>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (C=o,p)|0}else{p=Kd(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (C=o,p)|0}}else{if(g){if(f){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (C=o,p)|0}if(!l){if(f){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (C=o,p)|0}g=i-1|0;if(!(g&i)){if(f){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((Kd(i|0)|0)>>>0);return (C=o,p)|0}g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (C=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Dd(m|0,l|0,-1,-1)|0;d=C;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;cd(k,d,e,n)|0;p=c;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=cd(e,n,o&m,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l)|0;b=c;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (C=o,p)|0}function Sd(a){a=a|0;return Da[a&31]()|0}function Td(){return ea(0)|0}function Ud(){return ea(1)|0}function Vd(){return ea(2)|0}function Wd(){return ea(3)|0}function Xd(){return ea(4)|0}function Yd(){return ea(5)|0}function Zd(){return ea(6)|0}function _d(){return ea(7)|0}function $d(a,b){a=a|0;b=b|0;return Ea[a&31](b|0)|0}function ae(a){a=a|0;return ga(0,a|0)|0}function be(a){a=a|0;return ga(1,a|0)|0}function ce(a){a=a|0;return ga(2,a|0)|0}function de(a){a=a|0;return ga(3,a|0)|0}function ee(a){a=a|0;return ga(4,a|0)|0}function fe(a){a=a|0;return ga(5,a|0)|0}function ge(a){a=a|0;return ga(6,a|0)|0}function he(a){a=a|0;return ga(7,a|0)|0}function ie(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Fa[a&31](b|0,c|0,d|0)|0}function je(a,b,c){a=a|0;b=b|0;c=c|0;return ia(0,a|0,b|0,c|0)|0}function ke(a,b,c){a=a|0;b=b|0;c=c|0;return ia(1,a|0,b|0,c|0)|0}function le(a,b,c){a=a|0;b=b|0;c=c|0;return ia(2,a|0,b|0,c|0)|0}function me(a,b,c){a=a|0;b=b|0;c=c|0;return ia(3,a|0,b|0,c|0)|0}function ne(a,b,c){a=a|0;b=b|0;c=c|0;return ia(4,a|0,b|0,c|0)|0}function oe(a,b,c){a=a|0;b=b|0;c=c|0;return ia(5,a|0,b|0,c|0)|0}function pe(a,b,c){a=a|0;b=b|0;c=c|0;return ia(6,a|0,b|0,c|0)|0}function qe(a,b,c){a=a|0;b=b|0;c=c|0;return ia(7,a|0,b|0,c|0)|0}function re(a,b){a=a|0;b=b|0;Ga[a&31](b|0)}function se(a){a=a|0;ka(0,a|0)}function te(a){a=a|0;ka(1,a|0)}function ue(a){a=a|0;ka(2,a|0)}function ve(a){a=a|0;ka(3,a|0)}function we(a){a=a|0;ka(4,a|0)}function xe(a){a=a|0;ka(5,a|0)}function ye(a){a=a|0;ka(6,a|0)}function ze(a){a=a|0;ka(7,a|0)}function Ae(){ba(0);return 0}function Be(a){a=a|0;ba(1);return 0}function Ce(a,b,c){a=a|0;b=b|0;c=c|0;ba(2);return 0}function De(a){a=a|0;ba(3)}
// EMSCRIPTEN_END_FUNCS
var Da=[Ae,Ae,Td,Ae,Ud,Ae,Vd,Ae,Wd,Ae,Xd,Ae,Yd,Ae,Zd,Ae,_d,Ae,Ae,Ae,Ae,Ae,Ae,Ae,Ae,Ae,Ae,Ae,Ae,Ae,Ae,Ae];var Ea=[Be,Be,ae,Be,be,Be,ce,Be,de,Be,ee,Be,fe,Be,ge,Be,he,Be,pd,Be,Be,Be,Be,Be,Be,Be,Be,Be,Be,Be,Be,Be];var Fa=[Ce,Ce,je,Ce,ke,Ce,le,Ce,me,Ce,ne,Ce,oe,Ce,pe,Ce,qe,Ce,sd,qd,rd,Ce,Ce,Ce,Ce,Ce,Ce,Ce,Ce,Ce,Ce,Ce];var Ga=[De,De,se,De,te,De,ue,De,ve,De,we,De,xe,De,ye,De,ze,De,wd,De,De,De,De,De,De,De,De,De,De,De,De,De];return{_sodium_library_version_minor:jd,_crypto_onetimeauth_bytes:Jb,_sodium_version_string:hd,_sodium_hex2bin:gd,_crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive:dc,_bitshift64Lshr:Gd,_crypto_pwhash_scryptsalsa208sha256:ec,_crypto_box_noncebytes:Za,_crypto_box_beforenm:bb,_crypto_scalarmult_base:mc,_crypto_auth_bytes:Qa,_crypto_sign_open:Fc,_memcpy:Id,_crypto_box_seed_keypair:$a,_crypto_pwhash_scryptsalsa208sha256_memlimit_interactive:bc,_crypto_box_open_easy_afternm:ib,_crypto_sign_ed25519_sk_to_curve25519:Uc,_sodium_memzero:ed,_crypto_box_seal:kb,_free:zd,_crypto_shorthash:xc,_crypto_auth_keybytes:Ra,_crypto_pwhash_scryptsalsa208sha256_saltbytes:Zb,_crypto_sign_seedbytes:zc,_crypto_box_detached_afternm:cb,_crypto_auth:Sa,_randombytes_random:_c,_crypto_sign_keypair:Dc,_crypto_shorthash_keybytes:wc,_crypto_generichash_statebytes:vb,_crypto_pwhash_scryptsalsa208sha256_str_verify:gc,_crypto_generichash_init:xb,_crypto_generichash_keybytes_max:tb,_crypto_sign_ed25519_pk_to_curve25519:Tc,_crypto_box_beforenmbytes:Ya,_crypto_generichash:wb,_sodium_library_version_major:id,_randombytes_stir:$c,_randombytes_close:cd,_crypto_onetimeauth_keybytes:Kb,_crypto_onetimeauth:Lb,_crypto_shorthash_bytes:vc,_crypto_box_secretkeybytes:Xa,_crypto_onetimeauth_update:Ob,_crypto_pwhash_scryptsalsa208sha256_ll:Wb,_crypto_box_detached:db,_randombytes_buf:bd,_crypto_pwhash_scryptsalsa208sha256_str:fc,_bitshift64Ashr:Ed,_crypto_box_open_detached:hb,_crypto_scalarmult_bytes:kc,_crypto_auth_verify:Ta,_crypto_box_seal_open:lb,_crypto_secretbox_detached:rc,_crypto_secretbox_easy:sc,_crypto_pwhash_scryptsalsa208sha256_strbytes:_b,_memset:Fd,_crypto_box_open_detached_afternm:gb,_crypto_box_sealbytes:mb,_i64Subtract:Cd,_crypto_pwhash_scryptsalsa208sha256_strprefix:$b,_crypto_box_seedbytes:Va,_crypto_hash:Cb,_crypto_box_easy_afternm:eb,_crypto_box_macbytes:_a,_crypto_box_publickeybytes:Wa,_sodium_bin2hex:fd,_crypto_sign_secretkeybytes:Bc,_crypto_scalarmult_scalarbytes:lc,_crypto_onetimeauth_statebytes:Ib,_crypto_generichash_keybytes_min:sb,_malloc:yd,_memmove:Jd,_crypto_sign:Ec,_crypto_secretbox_noncebytes:pc,_randombytes_set_implementation:Zc,_crypto_box_keypair:ab,_crypto_generichash_keybytes:ub,_crypto_generichash_bytes_min:pb,_sodium_init:dd,_crypto_secretbox_macbytes:qc,_crypto_secretbox_keybytes:oc,_bitshift64Shl:Hd,_crypto_hash_bytes:Bb,_fflush:td,_crypto_generichash_bytes:rb,_crypto_generichash_bytes_max:qb,_crypto_secretbox_open_detached:tc,_crypto_sign_verify_detached:Hc,_crypto_onetimeauth_verify:Mb,_crypto_box_open_easy:jb,_crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive:cc,_crypto_sign_publickeybytes:Ac,_i64Add:Dd,_crypto_sign_bytes:yc,_crypto_generichash_update:yb,_crypto_scalarmult:nc,_crypto_sign_detached:Gc,_crypto_box_easy:fb,___errno_location:od,_crypto_onetimeauth_final:Pb,_crypto_secretbox_open_easy:uc,_crypto_generichash_final:zb,_randombytes_uniform:ad,_crypto_sign_seed_keypair:Cc,_crypto_pwhash_scryptsalsa208sha256_opslimit_interactive:ac,_crypto_onetimeauth_init:Nb,runPostSets:Bd,stackAlloc:Ha,stackSave:Ia,stackRestore:Ja,establishStackSpace:Ka,setThrew:La,setTempRet0:Oa,getTempRet0:Pa,dynCall_i:Sd,dynCall_ii:$d,dynCall_iiii:ie,dynCall_vi:re}})
// EMSCRIPTEN_END_ASM
(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var _sodium_library_version_minor=Module["_sodium_library_version_minor"]=asm["_sodium_library_version_minor"];var _crypto_onetimeauth_bytes=Module["_crypto_onetimeauth_bytes"]=asm["_crypto_onetimeauth_bytes"];var _crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive=Module["_crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive"]=asm["_crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _crypto_pwhash_scryptsalsa208sha256=Module["_crypto_pwhash_scryptsalsa208sha256"]=asm["_crypto_pwhash_scryptsalsa208sha256"];var _crypto_box_noncebytes=Module["_crypto_box_noncebytes"]=asm["_crypto_box_noncebytes"];var _crypto_box_beforenm=Module["_crypto_box_beforenm"]=asm["_crypto_box_beforenm"];var _crypto_scalarmult_base=Module["_crypto_scalarmult_base"]=asm["_crypto_scalarmult_base"];var _crypto_auth_bytes=Module["_crypto_auth_bytes"]=asm["_crypto_auth_bytes"];var _crypto_sign_open=Module["_crypto_sign_open"]=asm["_crypto_sign_open"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _crypto_box_seed_keypair=Module["_crypto_box_seed_keypair"]=asm["_crypto_box_seed_keypair"];var _crypto_pwhash_scryptsalsa208sha256_memlimit_interactive=Module["_crypto_pwhash_scryptsalsa208sha256_memlimit_interactive"]=asm["_crypto_pwhash_scryptsalsa208sha256_memlimit_interactive"];var _crypto_box_open_easy_afternm=Module["_crypto_box_open_easy_afternm"]=asm["_crypto_box_open_easy_afternm"];var _crypto_sign_ed25519_sk_to_curve25519=Module["_crypto_sign_ed25519_sk_to_curve25519"]=asm["_crypto_sign_ed25519_sk_to_curve25519"];var _sodium_memzero=Module["_sodium_memzero"]=asm["_sodium_memzero"];var _crypto_box_seal=Module["_crypto_box_seal"]=asm["_crypto_box_seal"];var _free=Module["_free"]=asm["_free"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var _crypto_shorthash=Module["_crypto_shorthash"]=asm["_crypto_shorthash"];var _crypto_auth_keybytes=Module["_crypto_auth_keybytes"]=asm["_crypto_auth_keybytes"];var _crypto_pwhash_scryptsalsa208sha256_saltbytes=Module["_crypto_pwhash_scryptsalsa208sha256_saltbytes"]=asm["_crypto_pwhash_scryptsalsa208sha256_saltbytes"];var _crypto_sign_seedbytes=Module["_crypto_sign_seedbytes"]=asm["_crypto_sign_seedbytes"];var _crypto_box_detached_afternm=Module["_crypto_box_detached_afternm"]=asm["_crypto_box_detached_afternm"];var _crypto_auth=Module["_crypto_auth"]=asm["_crypto_auth"];var _randombytes_random=Module["_randombytes_random"]=asm["_randombytes_random"];var _crypto_sign_keypair=Module["_crypto_sign_keypair"]=asm["_crypto_sign_keypair"];var _crypto_generichash_keybytes_min=Module["_crypto_generichash_keybytes_min"]=asm["_crypto_generichash_keybytes_min"];var _crypto_generichash_statebytes=Module["_crypto_generichash_statebytes"]=asm["_crypto_generichash_statebytes"];var _crypto_pwhash_scryptsalsa208sha256_str_verify=Module["_crypto_pwhash_scryptsalsa208sha256_str_verify"]=asm["_crypto_pwhash_scryptsalsa208sha256_str_verify"];var _sodium_version_string=Module["_sodium_version_string"]=asm["_sodium_version_string"];var _crypto_generichash_keybytes_max=Module["_crypto_generichash_keybytes_max"]=asm["_crypto_generichash_keybytes_max"];var _crypto_sign_ed25519_pk_to_curve25519=Module["_crypto_sign_ed25519_pk_to_curve25519"]=asm["_crypto_sign_ed25519_pk_to_curve25519"];var _crypto_sign_publickeybytes=Module["_crypto_sign_publickeybytes"]=asm["_crypto_sign_publickeybytes"];var _crypto_box_beforenmbytes=Module["_crypto_box_beforenmbytes"]=asm["_crypto_box_beforenmbytes"];var _crypto_generichash=Module["_crypto_generichash"]=asm["_crypto_generichash"];var _sodium_library_version_major=Module["_sodium_library_version_major"]=asm["_sodium_library_version_major"];var _randombytes_stir=Module["_randombytes_stir"]=asm["_randombytes_stir"];var _crypto_shorthash_keybytes=Module["_crypto_shorthash_keybytes"]=asm["_crypto_shorthash_keybytes"];var _randombytes_close=Module["_randombytes_close"]=asm["_randombytes_close"];var _crypto_onetimeauth_keybytes=Module["_crypto_onetimeauth_keybytes"]=asm["_crypto_onetimeauth_keybytes"];var _crypto_onetimeauth=Module["_crypto_onetimeauth"]=asm["_crypto_onetimeauth"];var _crypto_shorthash_bytes=Module["_crypto_shorthash_bytes"]=asm["_crypto_shorthash_bytes"];var _crypto_box_secretkeybytes=Module["_crypto_box_secretkeybytes"]=asm["_crypto_box_secretkeybytes"];var _crypto_onetimeauth_update=Module["_crypto_onetimeauth_update"]=asm["_crypto_onetimeauth_update"];var _crypto_pwhash_scryptsalsa208sha256_ll=Module["_crypto_pwhash_scryptsalsa208sha256_ll"]=asm["_crypto_pwhash_scryptsalsa208sha256_ll"];var _crypto_box_detached=Module["_crypto_box_detached"]=asm["_crypto_box_detached"];var _randombytes_buf=Module["_randombytes_buf"]=asm["_randombytes_buf"];var _crypto_pwhash_scryptsalsa208sha256_strbytes=Module["_crypto_pwhash_scryptsalsa208sha256_strbytes"]=asm["_crypto_pwhash_scryptsalsa208sha256_strbytes"];var _bitshift64Ashr=Module["_bitshift64Ashr"]=asm["_bitshift64Ashr"];var _crypto_box_open_detached=Module["_crypto_box_open_detached"]=asm["_crypto_box_open_detached"];var _crypto_scalarmult_bytes=Module["_crypto_scalarmult_bytes"]=asm["_crypto_scalarmult_bytes"];var _crypto_auth_verify=Module["_crypto_auth_verify"]=asm["_crypto_auth_verify"];var _crypto_sign_detached=Module["_crypto_sign_detached"]=asm["_crypto_sign_detached"];var _crypto_secretbox_detached=Module["_crypto_secretbox_detached"]=asm["_crypto_secretbox_detached"];var _crypto_secretbox_easy=Module["_crypto_secretbox_easy"]=asm["_crypto_secretbox_easy"];var _crypto_pwhash_scryptsalsa208sha256_str=Module["_crypto_pwhash_scryptsalsa208sha256_str"]=asm["_crypto_pwhash_scryptsalsa208sha256_str"];var _memset=Module["_memset"]=asm["_memset"];var _crypto_box_open_detached_afternm=Module["_crypto_box_open_detached_afternm"]=asm["_crypto_box_open_detached_afternm"];var _crypto_box_sealbytes=Module["_crypto_box_sealbytes"]=asm["_crypto_box_sealbytes"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _crypto_pwhash_scryptsalsa208sha256_strprefix=Module["_crypto_pwhash_scryptsalsa208sha256_strprefix"]=asm["_crypto_pwhash_scryptsalsa208sha256_strprefix"];var _crypto_box_seedbytes=Module["_crypto_box_seedbytes"]=asm["_crypto_box_seedbytes"];var _crypto_hash=Module["_crypto_hash"]=asm["_crypto_hash"];var _crypto_box_easy_afternm=Module["_crypto_box_easy_afternm"]=asm["_crypto_box_easy_afternm"];var _crypto_box_macbytes=Module["_crypto_box_macbytes"]=asm["_crypto_box_macbytes"];var _crypto_box_publickeybytes=Module["_crypto_box_publickeybytes"]=asm["_crypto_box_publickeybytes"];var _sodium_bin2hex=Module["_sodium_bin2hex"]=asm["_sodium_bin2hex"];var _crypto_sign_secretkeybytes=Module["_crypto_sign_secretkeybytes"]=asm["_crypto_sign_secretkeybytes"];var _crypto_scalarmult_scalarbytes=Module["_crypto_scalarmult_scalarbytes"]=asm["_crypto_scalarmult_scalarbytes"];var _crypto_onetimeauth_statebytes=Module["_crypto_onetimeauth_statebytes"]=asm["_crypto_onetimeauth_statebytes"];var _crypto_generichash_bytes_min=Module["_crypto_generichash_bytes_min"]=asm["_crypto_generichash_bytes_min"];var _malloc=Module["_malloc"]=asm["_malloc"];var _crypto_secretbox_open_easy=Module["_crypto_secretbox_open_easy"]=asm["_crypto_secretbox_open_easy"];var _crypto_sign=Module["_crypto_sign"]=asm["_crypto_sign"];var _crypto_secretbox_noncebytes=Module["_crypto_secretbox_noncebytes"]=asm["_crypto_secretbox_noncebytes"];var _randombytes_set_implementation=Module["_randombytes_set_implementation"]=asm["_randombytes_set_implementation"];var _crypto_box_keypair=Module["_crypto_box_keypair"]=asm["_crypto_box_keypair"];var _crypto_generichash_keybytes=Module["_crypto_generichash_keybytes"]=asm["_crypto_generichash_keybytes"];var _sodium_hex2bin=Module["_sodium_hex2bin"]=asm["_sodium_hex2bin"];var _sodium_init=Module["_sodium_init"]=asm["_sodium_init"];var _crypto_secretbox_macbytes=Module["_crypto_secretbox_macbytes"]=asm["_crypto_secretbox_macbytes"];var _crypto_secretbox_keybytes=Module["_crypto_secretbox_keybytes"]=asm["_crypto_secretbox_keybytes"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _crypto_hash_bytes=Module["_crypto_hash_bytes"]=asm["_crypto_hash_bytes"];var _fflush=Module["_fflush"]=asm["_fflush"];var _crypto_generichash_bytes=Module["_crypto_generichash_bytes"]=asm["_crypto_generichash_bytes"];var _crypto_generichash_bytes_max=Module["_crypto_generichash_bytes_max"]=asm["_crypto_generichash_bytes_max"];var _crypto_secretbox_open_detached=Module["_crypto_secretbox_open_detached"]=asm["_crypto_secretbox_open_detached"];var _crypto_sign_verify_detached=Module["_crypto_sign_verify_detached"]=asm["_crypto_sign_verify_detached"];var _crypto_onetimeauth_verify=Module["_crypto_onetimeauth_verify"]=asm["_crypto_onetimeauth_verify"];var _crypto_box_open_easy=Module["_crypto_box_open_easy"]=asm["_crypto_box_open_easy"];var _crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive=Module["_crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive"]=asm["_crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive"];var _crypto_generichash_init=Module["_crypto_generichash_init"]=asm["_crypto_generichash_init"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _crypto_sign_bytes=Module["_crypto_sign_bytes"]=asm["_crypto_sign_bytes"];var _crypto_generichash_update=Module["_crypto_generichash_update"]=asm["_crypto_generichash_update"];var _crypto_scalarmult=Module["_crypto_scalarmult"]=asm["_crypto_scalarmult"];var _crypto_box_seal_open=Module["_crypto_box_seal_open"]=asm["_crypto_box_seal_open"];var _crypto_box_easy=Module["_crypto_box_easy"]=asm["_crypto_box_easy"];var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var _crypto_onetimeauth_final=Module["_crypto_onetimeauth_final"]=asm["_crypto_onetimeauth_final"];var _memmove=Module["_memmove"]=asm["_memmove"];var _crypto_generichash_final=Module["_crypto_generichash_final"]=asm["_crypto_generichash_final"];var _randombytes_uniform=Module["_randombytes_uniform"]=asm["_randombytes_uniform"];var _crypto_sign_seed_keypair=Module["_crypto_sign_seed_keypair"]=asm["_crypto_sign_seed_keypair"];var _crypto_pwhash_scryptsalsa208sha256_opslimit_interactive=Module["_crypto_pwhash_scryptsalsa208sha256_opslimit_interactive"]=asm["_crypto_pwhash_scryptsalsa208sha256_opslimit_interactive"];var _crypto_onetimeauth_init=Module["_crypto_onetimeauth_init"]=asm["_crypto_onetimeauth_init"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];Runtime.stackAlloc=asm["stackAlloc"];Runtime.stackSave=asm["stackSave"];Runtime.stackRestore=asm["stackRestore"];Runtime.establishStackSpace=asm["establishStackSpace"];Runtime.setTempRet0=asm["setTempRet0"];Runtime.getTempRet0=asm["getTempRet0"];function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){assert(runDependencies==0,"cannot call main when async dependencies remain! (listen on __ATMAIN__)");assert(__ATPRERUN__.length==0,"cannot call main when preRun functions remain to be called");args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv="[allocate(intArrayFromString(Module["thisProgram"]),"i8",ALLOC_NORMAL)];pad();for(var" i="0;i<argc-1;i=i+1){argv.push(allocate(intArrayFromString(args[i]),"i8",ALLOC_NORMAL));pad()}argv.push(0);argv=allocate(argv,"i32",ALLOC_NORMAL);try{var" ret="Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e" instanceof="" exitstatus){return}else="" if(e="="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{if(e&&typeof" e="=="object"&&e.stack)Module.printErr("exception" thrown:="" "+[e,e.stack]);throw="" e}}finally{calledmain="true}};function" run(args){args="args||Module["arguments"];if(preloadStartTime===null)preloadStartTime=Date.now();if(runDependencies">0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["stdout"]["once"]("drain",(function(){process["exit"](status)}));console.log(" ");setTimeout((function(){process["exit"](status)}),500)}else if(ENVIRONMENT_IS_SHELL&&typeof quit==="function"){quit(status)}throw new ExitStatus(status)}Module["exit"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}run()
return Module;
});
}).call(this,require('_process'),require("buffer").Buffer,"/node_modules/libsodium/dist/modules")
},{"_process":104,"buffer":45,"crypto":54,"fs":1,"path":101}],233:[function(require,module,exports){
var raf = require("raf")
var TypedError = require("error/typed")
var InvalidUpdateInRender = TypedError({
type: "main-loop.invalid.update.in-render",
message: "main-loop: Unexpected update occurred in loop.\n" +
"We are currently rendering a view, " +
"you can't change state right now.\n" +
"The diff is: {stringDiff}.\n" +
"SUGGESTED FIX: find the state mutation in your view " +
"or rendering function and remove it.\n" +
"The view should not have any side effects.\n",
diff: null,
stringDiff: null
})
module.exports = main
function main(initialState, view, opts) {
opts = opts || {}
var currentState = initialState
var create = opts.create
var diff = opts.diff
var patch = opts.patch
var redrawScheduled = false
var tree = opts.initialTree || view(currentState)
var target = opts.target || create(tree, opts)
var inRenderingTransaction = false
currentState = null
var loop = {
state: initialState,
target: target,
update: update
}
return loop
function update(state) {
if (inRenderingTransaction) {
throw InvalidUpdateInRender({
diff: state._diff,
stringDiff: JSON.stringify(state._diff)
})
}
if (currentState === null && !redrawScheduled) {
redrawScheduled = true
raf(redraw)
}
currentState = state
loop.state = state
}
function redraw() {
redrawScheduled = false
if (currentState === null) {
return
}
inRenderingTransaction = true
var newTree = view(currentState)
if (opts.createOnly) {
inRenderingTransaction = false
create(newTree, opts)
} else {
var patches = diff(tree, newTree, opts)
inRenderingTransaction = false
target = patch(target, patches, opts)
}
tree = newTree
currentState = null
}
}
},{"error/typed":169,"raf":253}],234:[function(require,module,exports){
var levelup = require('levelup');
var memdown = require('memdown');
module.exports = MemDB;
function MemDB (opts, fn) {
if (typeof opts == 'function') {
fn = opts;
opts = {};
}
if (typeof opts == 'string') opts = {};
opts = opts || {};
opts.db = function (l) { return new memdown(l) };
return levelup('', opts, fn);
}
},{"levelup":227,"memdown":235}],235:[function(require,module,exports){
(function (process,global,Buffer){
var inherits = require('inherits')
, AbstractLevelDOWN = require('abstract-leveldown').AbstractLevelDOWN
, AbstractIterator = require('abstract-leveldown').AbstractIterator
, ltgt = require('ltgt')
, setImmediate = global.setImmediate || process.nextTick
, createRBT = require('functional-red-black-tree')
, globalStore = {}
function toKey (key) {
return typeof key == 'string' ? '$' + key : JSON.stringify(key)
}
function gt(value) {
return ltgt.compare(value, this._end) > 0
}
function gte(value) {
return ltgt.compare(value, this._end) >= 0
}
function lt(value) {
return ltgt.compare(value, this._end) < 0
}
function lte(value) {
return ltgt.compare(value, this._end) <= 0="" }="" function="" memiterator="" (db,="" options)="" {="" abstractiterator.call(this,="" db)="" this._limit="options.limit" if="" (this._limit="==" -1)="" var="" tree="db._store[db._location];" this.keyasbuffer="options.keyAsBuffer" !="=" false="" this.valueasbuffer="options.valueAsBuffer" this._reverse="options.reverse" this._options="options" this._done="0" (!this._reverse)="" this._incr="next" ;="" this._start="ltgt.lowerBound(options);" this._end="ltgt.upperBound(options)" (typeof="" 'undefined')="" this._tree="tree.begin;" else="" (ltgt.lowerboundinclusive(options))="" (this._end)="" (ltgt.upperboundinclusive(options))="" this._test="lte" inherits(memiterator,="" abstractiterator)="" memiterator.prototype._next="function" (callback)="" key="" ,="" value="" (this._done++="">= this._limit)
return setImmediate(callback)
if (!this._tree.valid)
return setImmediate(callback)
key = this._tree.key
value = this._tree.value
if (!this._test(key))
return setImmediate(callback)
if (this.keyAsBuffer)
key = new Buffer(key)
if (this.valueAsBuffer)
value = new Buffer(value)
this._tree[this._incr]()
setImmediate(function callNext() {
callback(null, key, value)
})
}
MemIterator.prototype._test = function () {return true}
function MemDOWN (location) {
if (!(this instanceof MemDOWN))
return new MemDOWN(location)
AbstractLevelDOWN.call(this, typeof location == 'string' ? location : '')
this._location = this.location ? toKey(this.location) : '_tree'
this._store = this.location ? globalStore: this
this._store[this._location] = this._store[this._location] || createRBT(ltgt.compare)
}
MemDOWN.clearGlobalStore = function (strict) {
if (strict) {
Object.keys(globalStore).forEach(function (key) {
delete globalStore[key];
})
} else {
globalStore = {}
}
}
inherits(MemDOWN, AbstractLevelDOWN)
MemDOWN.prototype._open = function (options, callback) {
var self = this
setImmediate(function callNext() { callback(null, self) })
}
MemDOWN.prototype._put = function (key, value, options, callback) {
if (typeof value === 'undefined' || value === null) value = ''
var iter = this._store[this._location].find(key)
if (iter.valid) {
this._store[this._location] = iter.update(value)
} else {
this._store[this._location] = this._store[this._location].insert(key, value)
}
setImmediate(callback)
}
MemDOWN.prototype._get = function (key, options, callback) {
var value = this._store[this._location].get(key)
if (value === undefined) {
// 'NotFound' error, consistent with LevelDOWN API
var err = new Error('NotFound')
return setImmediate(function callNext() { callback(err) })
}
if (options.asBuffer !== false && !this._isBuffer(value))
value = new Buffer(String(value))
setImmediate(function callNext () {
callback(null, value)
})
}
MemDOWN.prototype._del = function (key, options, callback) {
this._store[this._location] = this._store[this._location].remove(key)
setImmediate(callback)
}
MemDOWN.prototype._batch = function (array, options, callback) {
var err
, i = -1
, key
, value
, iter
, len = array.length
, tree = this._store[this._location]
while (++i < len) {
if (!array[i])
continue;
key = this._isBuffer(array[i].key) ? array[i].key : String(array[i].key)
err = this._checkKey(key, 'key')
if (err)
return setImmediate(function errorCall() { callback(err) })
iter = tree.find(key)
if (array[i].type === 'put') {
value = this._isBuffer(array[i].value) ? array[i].value : String(array[i].value)
err = this._checkKey(value, 'value')
if (err)
return setImmediate(function errorCall() { callback(err) })
tree = iter.valid ? iter.update(value) : tree.insert(key, value)
} else {
tree = iter.remove()
}
}
this._store[this._location] = tree;
setImmediate(callback)
}
MemDOWN.prototype._iterator = function (options) {
return new MemIterator(this, options)
}
MemDOWN.prototype._isBuffer = function (obj) {
return Buffer.isBuffer(obj)
}
MemDOWN.destroy = function (name, callback) {
var key = toKey(name)
if (key in globalStore)
delete globalStore[key]
setImmediate(callback)
}
module.exports = MemDOWN
}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
},{"_process":104,"abstract-leveldown":142,"buffer":45,"functional-red-black-tree":181,"inherits":204,"ltgt":236}],236:[function(require,module,exports){
(function (Buffer){
exports.compare = function (a, b) {
if(Buffer.isBuffer(a)) {
var l = Math.min(a.length, b.length)
for(var i = 0; i < l; i++) {
var cmp = a[i] - b[i]
if(cmp) return cmp
}
return a.length - b.length
}
return a < b ? -1 : a > b ? 1 : 0
}
function has(obj, key) {
return Object.hasOwnProperty.call(obj, key)
}
// to be compatible with the current abstract-leveldown tests
// nullish or empty strings.
// I could use !!val but I want to permit numbers and booleans,
// if possible.
function isDef (val) {
return val != null && val !== ''
}
var lowerBound = exports.lowerBound = function (range) {
return (
isDef(range.gt) ? range.gt
: isDef(range.gte) ? range.gte
: isDef(range.min) ? range.min
: isDef(range.start) && !range.reverse ? range.start
: isDef(range.end) && range.reverse ? range.end
: undefined
)
}
exports.lowerBoundInclusive = function (range) {
return isDef(range.gt) ? false : true
}
exports.upperBoundInclusive =
function (range) {
return isDef(range.lt) ? false : true
}
var lowerBoundExclusive = exports.lowerBoundExclusive =
function (range) {
return isDef(range.gt) ? true : false
}
var upperBoundExclusive = exports.upperBoundExclusive =
function (range) {
return isDef(range.lt) ? true : false
}
var upperBound = exports.upperBound = function (range) {
return (
isDef(range.lt) ? range.lt
: isDef(range.lte) ? range.lte
: isDef(range.max) ? range.max
: isDef(range.start) && range.reverse ? range.start
: isDef(range.end) && !range.reverse ? range.end
: undefined
)
}
exports.contains = function (range, key, compare) {
compare = compare || exports.compare
var lb = lowerBound(range)
if(isDef(lb)) {
var cmp = compare(key, lb)
if(cmp < 0 || (cmp === 0 && lowerBoundExclusive(range)))
return false
}
var ub = upperBound(range)
if(isDef(ub)) {
var cmp = compare(key, ub)
if(cmp > 0 || (cmp === 0) && upperBoundExclusive(range))
return false
}
return true
}
exports.filter = function (range, compare) {
return function (key) {
return exports.contains(range, key, compare)
}
}
}).call(this,{"isBuffer":require("../../../../../../../../.nvm-fish/v5.4.1/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
},{"../../../../../../../../.nvm-fish/v5.4.1/lib/node_modules/browserify/node_modules/is-buffer/index.js":93}],237:[function(require,module,exports){
/**
* Helpers.
*/
var s = 1000;
var m = s * 60;
var h = m * 60;
var d = h * 24;
var y = d * 365.25;
/**
* Parse or format the given `val`.
*
* Options:
*
* - `long` verbose formatting [false]
*
* @param {String|Number} val
* @param {Object} options
* @return {String|Number}
* @api public
*/
module.exports = function(val, options){
options = options || {};
if ('string' == typeof val) return parse(val);
return options.long
? long(val)
: short(val);
};
/**
* Parse the given `str` and return milliseconds.
*
* @param {String} str
* @return {Number}
* @api private
*/
function parse(str) {
str = '' + str;
if (str.length > 10000) return;
var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);
if (!match) return;
var n = parseFloat(match[1]);
var type = (match[2] || 'ms').toLowerCase();
switch (type) {
case 'years':
case 'year':
case 'yrs':
case 'yr':
case 'y':
return n * y;
case 'days':
case 'day':
case 'd':
return n * d;
case 'hours':
case 'hour':
case 'hrs':
case 'hr':
case 'h':
return n * h;
case 'minutes':
case 'minute':
case 'mins':
case 'min':
case 'm':
return n * m;
case 'seconds':
case 'second':
case 'secs':
case 'sec':
case 's':
return n * s;
case 'milliseconds':
case 'millisecond':
case 'msecs':
case 'msec':
case 'ms':
return n;
}
}
/**
* Short format for `ms`.
*
* @param {Number} ms
* @return {String}
* @api private
*/
function short(ms) {
if (ms >= d) return Math.round(ms / d) + 'd';
if (ms >= h) return Math.round(ms / h) + 'h';
if (ms >= m) return Math.round(ms / m) + 'm';
if (ms >= s) return Math.round(ms / s) + 's';
return ms + 'ms';
}
/**
* Long format for `ms`.
*
* @param {Number} ms
* @return {String}
* @api private
*/
function long(ms) {
return plural(ms, d, 'day')
|| plural(ms, h, 'hour')
|| plural(ms, m, 'minute')
|| plural(ms, s, 'second')
|| ms + ' ms';
}
/**
* Pluralization helper.
*/
function plural(ms, n, name) {
if (ms < n) return;
if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name;
return Math.ceil(ms / n) + ' ' + name + 's';
}
},{}],238:[function(require,module,exports){
(function (process){
var mutexify = function() {
var queue = []
var used = null
var call = function () {
used(release)
}
var acquire = function (fn) {
if (used) return queue.push(fn)
used = fn
process.nextTick(call)
return 0
}
var release = function (fn, err, value) {
used = null
if (queue.length) acquire(queue.shift())
if (fn) fn(err, value)
}
return acquire
}
module.exports = mutexify
}).call(this,require('_process'))
},{"_process":104}],239:[function(require,module,exports){
(function (process,Buffer){
var req = require('request')
module.exports = Nets
function Nets (opts, cb) {
if (typeof opts === 'string') opts = { uri: opts }
// in node, if encoding === null then response will be a Buffer. we want this to be the default
if (!opts.hasOwnProperty('encoding')) opts.encoding = null
// in browser, we should by default convert the arraybuffer into a Buffer
if (process.browser && !opts.hasOwnProperty('json') && opts.encoding === null) {
opts.responseType = 'arraybuffer'
var originalCb = cb
cb = bufferify
}
function bufferify (err, resp, body) {
if (body) body = new Buffer(new Uint8Array(body))
originalCb(err, resp, body)
}
return req(opts, cb)
}
}).call(this,require('_process'),require("buffer").Buffer)
},{"_process":104,"buffer":45,"request":328}],240:[function(require,module,exports){
var wrappy = require('wrappy')
module.exports = wrappy(once)
once.proto = once(function () {
Object.defineProperty(Function.prototype, 'once', {
value: function () {
return once(this)
},
configurable: true
})
})
function once (fn) {
var f = function () {
if (f.called) return f.value
f.called = true
return f.value = fn.apply(this, arguments)
}
f.called = false
return f
}
},{"wrappy":326}],241:[function(require,module,exports){
var trim = require('trim')
, forEach = require('for-each')
, isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
}
module.exports = function (headers) {
if (!headers)
return {}
var result = {}
forEach(
trim(headers).split('\n')
, function (row) {
var index = row.indexOf(':')
, key = trim(row.slice(0, index)).toLowerCase()
, value = trim(row.slice(index + 1))
if (typeof(result[key]) === 'undefined') {
result[key] = value
} else if (isArray(result[key])) {
result[key].push(value)
} else {
result[key] = [ result[key], value ]
}
}
)
return result
}
},{"for-each":172,"trim":286}],242:[function(require,module,exports){
(function (process){
// Generated by CoffeeScript 1.6.3
(function() {
var getNanoSeconds, hrtime, loadTime;
if ((typeof performance !== "undefined" && performance !== null) && performance.now) {
module.exports = function() {
return performance.now();
};
} else if ((typeof process !== "undefined" && process !== null) && process.hrtime) {
module.exports = function() {
return (getNanoSeconds() - loadTime) / 1e6;
};
hrtime = process.hrtime;
getNanoSeconds = function() {
var hr;
hr = hrtime();
return hr[0] * 1e9 + hr[1];
};
loadTime = getNanoSeconds();
} else if (Date.now) {
module.exports = function() {
return Date.now() - loadTime;
};
loadTime = Date.now();
} else {
module.exports = function() {
return new Date().getTime() - loadTime;
};
loadTime = new Date().getTime();
}
}).call(this);
/*
*/
}).call(this,require('_process'))
},{"_process":104}],243:[function(require,module,exports){
(function (process){
'use strict';
if (!process.version ||
process.version.indexOf('v0.') === 0 ||
process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
module.exports = nextTick;
} else {
module.exports = process.nextTick;
}
function nextTick(fn) {
var args = new Array(arguments.length - 1);
var i = 0;
while (i < args.length) {
args[i++] = arguments[i];
}
process.nextTick(function afterTick() {
fn.apply(null, args);
});
}
}).call(this,require('_process'))
},{"_process":104}],244:[function(require,module,exports){
var parse = require('./parse')
var stringify = require('./stringify')
module.exports = parse
module.exports.parse = parse
module.exports.stringify = stringify
},{"./parse":245,"./stringify":246}],245:[function(require,module,exports){
var tokenize = require('./tokenize')
var MAX_RANGE = 0x1FFFFFFF
var onfieldoptions = function (tokens) {
var opts = {}
while (tokens.length) {
switch (tokens[0]) {
case '[':
case ',':
tokens.shift()
var name = tokens.shift()
if (name === '(') { // handling [(A) = B]
name = tokens.shift()
tokens.shift() // remove the end of bracket
}
if (tokens[0] !== '=') throw new Error('Unexpected token in field options: ' + tokens[0])
tokens.shift()
if (tokens[0] === ']') throw new Error('Unexpected ] in field option')
opts[name] = tokens.shift()
break
case ']':
tokens.shift()
return opts
default:
throw new Error('Unexpected token in field options: ' + tokens[0])
}
}
throw new Error('No closing tag for field options')
}
var onfield = function (tokens) {
var field = {
name: null,
type: null,
tag: 0,
map: null,
oneof: null,
required: false,
repeated: false,
options: {}
}
while (tokens.length) {
switch (tokens[0]) {
case '=':
tokens.shift()
field.tag = Number(tokens.shift())
break
case 'map':
field.type = 'map'
field.map = {from: null, to: null}
tokens.shift()
if (tokens[0] !== '<') throw="" new="" error('unexpected="" token="" in="" map="" type:="" '="" +="" tokens[0])="" tokens.shift()="" field.map.from="tokens.shift()" if="" (tokens[0]="" !="=" ',')="" field.map.to="tokens.shift()">') throw new Error('Unexpected token in map type: ' + tokens[0])
tokens.shift()
field.name = tokens.shift()
break
case 'repeated':
case 'required':
case 'optional':
var t = tokens.shift()
field.required = t === 'required'
field.repeated = t === 'repeated'
field.type = tokens.shift()
field.name = tokens.shift()
break
case '[':
field.options = onfieldoptions(tokens)
break
case ';':
tokens.shift()
return field
default:
throw new Error('Unexpected token in message field: ' + tokens[0])
}
}
throw new Error('No ; found for message field')
}
var onmessagebody = function (tokens) {
var body = {
enums: [],
messages: [],
fields: [],
extensions: null
}
while (tokens.length) {
switch (tokens[0]) {
case 'map':
case 'repeated':
case 'optional':
case 'required':
body.fields.push(onfield(tokens))
break
case 'enum':
body.enums.push(onenum(tokens))
break
case 'message':
body.messages.push(onmessage(tokens))
break
case 'extensions':
body.extensions = onextensions(tokens)
break
case 'oneof':
tokens.shift()
var name = tokens.shift()
if (tokens[0] !== '{') throw new Error('Unexpected token in oneof: ' + tokens[0])
tokens.shift()
while (tokens[0] !== '}') {
tokens.unshift('optional')
var field = onfield(tokens)
field.oneof = name
body.fields.push(field)
}
tokens.shift()
break
case ';':
tokens.shift()
break
default:
// proto3 does not require the use of optional/required, assumed as optional
// "singular: a well-formed message can have zero or one of this field (but not more than one)."
// https://developers.google.com/protocol-buffers/docs/proto3#specifying-field-rules
tokens.unshift('optional')
body.fields.push(onfield(tokens))
}
}
return body
}
var onextend = function (tokens) {
var out = {
name: tokens[1],
message: onmessage(tokens)
}
return out
}
var onextensions = function (tokens) {
tokens.shift()
var from = Number(tokens.shift())
if (isNaN(from)) throw new Error('Invalid from in extensions definition')
if (tokens.shift() !== 'to') throw new Error("Expected keyword 'to' in extensions definition")
var to = tokens.shift()
if (to === 'max') to = MAX_RANGE
to = Number(to)
if (isNaN(to)) throw new Error('Invalid to in extensions definition')
if (tokens.shift() !== ';') throw new Error('Missing ; in extensions definition')
return {from: from, to: to}
}
var onmessage = function (tokens) {
tokens.shift()
var lvl = 1
var body = []
var msg = {
name: tokens.shift(),
enums: [],
messages: [],
fields: []
}
if (tokens[0] !== '{') throw new Error('Expected { but found ' + tokens[0])
tokens.shift()
while (tokens.length) {
if (tokens[0] === '{') lvl++
else if (tokens[0] === '}') lvl--
if (!lvl) {
tokens.shift()
body = onmessagebody(body)
msg.enums = body.enums
msg.messages = body.messages
msg.fields = body.fields
msg.extensions = body.extensions
return msg
}
body.push(tokens.shift())
}
if (lvl) throw new Error('No closing tag for message')
}
var onpackagename = function (tokens) {
tokens.shift()
var name = tokens.shift()
if (tokens[0] !== ';') throw new Error('Expected ; but found ' + tokens[0])
tokens.shift()
return name
}
var onsyntaxversion = function (tokens) {
tokens.shift()
if (tokens[0] !== '=') throw new Error('Expected = but found ' + tokens[0])
tokens.shift()
var version = tokens.shift()
switch (version) {
case '"proto2"':
version = 2
break
case '"proto3"':
version = 3
break
default:
throw new Error('Expected protobuf syntax version but found ' + version)
}
if (tokens[0] !== ';') throw new Error('Expected ; but found ' + tokens[0])
tokens.shift()
return version
}
var onenumvalue = function (tokens) {
if (tokens.length < 4) throw new Error('Invalid enum value: ' + tokens.slice(0, 3).join(' '))
if (tokens[1] !== '=') throw new Error('Expected = but found ' + tokens[1])
if (tokens[3] !== ';') throw new Error('Expected ; but found ' + tokens[1])
var name = tokens.shift()
tokens.shift()
var value = Number(tokens.shift())
tokens.shift()
return {
name: name,
value: value
}
}
var onenum = function (tokens) {
tokens.shift()
var e = {
name: tokens.shift(),
values: {}
}
if (tokens[0] !== '{') throw new Error('Expected { but found ' + tokens[0])
tokens.shift()
while (tokens.length) {
if (tokens[0] === '}') {
tokens.shift()
// there goes optional semicolon after the enclosing "}"
if (tokens[0] === ';') tokens.shift()
return e
}
if (tokens[0] === 'option') {
// just skip "option allow_alias = true;"
while (tokens.shift() !== ';') {
// do nothing
}
}
var val = onenumvalue(tokens)
e.values[val.name] = val.value
}
throw new Error('No closing tag for enum')
}
var onoption = function (tokens) {
var name = null
var value = null
var parse = function (value) {
if (value === 'true') return true
if (value === 'false') return false
return value.replace(/^"+|"+$/gm, '')
}
while (tokens.length) {
if (tokens[0] === ';') {
tokens.shift()
return {name: name, value: value}
}
switch (tokens[0]) {
case 'option':
tokens.shift()
var hasBracket = tokens[0] === '('
if (hasBracket) tokens.shift()
name = tokens.shift()
if (hasBracket) {
if (tokens[0] !== ')') throw new Error('Expected ) but found ' + tokens[0])
tokens.shift()
}
break
case '=':
tokens.shift()
if (name === null) throw new Error('Expected key for option with value: ' + tokens[0])
value = parse(tokens.shift())
if (name === 'optimize_for' && !/^(SPEED|CODE_SIZE|LITE_RUNTIME)$/.test(value)) {
throw new Error('Unexpected value for option optimize_for: ' + value)
} else if (value === '{') {
// option foo = {bar: baz}
value = onoptionMap(tokens)
}
break
default:
throw new Error('Unexpected token in option: ' + tokens[0])
}
}
}
var onoptionMap = function (tokens) {
var parse = function (value) {
if (value === 'true') return true
if (value === 'false') return false
return value.replace(/^"+|"+$/gm, '')
}
var map = {}
while (tokens.length) {
if (tokens[0] === '}') {
tokens.shift()
return map
}
var hasBracket = tokens[0] === '('
if (hasBracket) tokens.shift()
var key = tokens.shift()
if (hasBracket) {
if (tokens[0] !== ')') throw new Error('Expected ) but found ' + tokens[0])
tokens.shift()
}
var value = null
switch (tokens[0]) {
case ':':
if (map[key] !== undefined) throw new Error('Duplicate option map key ' + key)
tokens.shift()
value = parse(tokens.shift())
if (value === '{') {
// option foo = {bar: baz}
value = onoptionMap(tokens)
}
map[key] = value
break
case '{':
tokens.shift()
value = onoptionMap(tokens)
if (map[key] === undefined) map[key] = []
if (!Array.isArray(map[key])) throw new Error('Duplicate option map key ' + key)
map[key].push(value)
break
default:
throw new Error('Unexpected token in option map: ' + tokens[0])
}
}
throw new Error('No closing tag for option map')
}
var onimport = function (tokens) {
tokens.shift()
var file = tokens.shift().replace(/^"+|"+$/gm, '')
if (tokens[0] !== ';') throw new Error('Unexpected token: ' + tokens[0] + '. Expected ";"')
tokens.shift()
return file
}
var onservice = function (tokens) {
tokens.shift()
var service = {
name: tokens.shift(),
methods: [],
options: {}
}
if (tokens[0] !== '{') throw new Error('Expected { but found ' + tokens[0])
tokens.shift()
while (tokens.length) {
if (tokens[0] === '}') {
tokens.shift()
// there goes optional semicolon after the enclosing "}"
if (tokens[0] === ';') tokens.shift()
return service
}
switch (tokens[0]) {
case 'option':
var opt = onoption(tokens)
if (service.options[opt.name] !== undefined) throw new Error('Duplicate option ' + opt.name)
service.options[opt.name] = opt.value
break
case 'rpc':
service.methods.push(onrpc(tokens))
break
default:
throw new Error('Unexpected token in service: ' + tokens[0])
}
}
throw new Error('No closing tag for service')
}
var onrpc = function (tokens) {
tokens.shift()
var rpc = {
name: tokens.shift(),
input_type: null,
output_type: null,
client_streaming: false,
server_streaming: false,
options: {}
}
if (tokens[0] !== '(') throw new Error('Expected ( but found ' + tokens[0])
tokens.shift()
if (tokens[0] === 'stream') {
tokens.shift()
rpc.client_streaming = true
}
rpc.input_type = tokens.shift()
if (tokens[0] !== ')') throw new Error('Expected ) but found ' + tokens[0])
tokens.shift()
if (tokens[0] !== 'returns') throw new Error('Expected returns but found ' + tokens[0])
tokens.shift()
if (tokens[0] !== '(') throw new Error('Expected ( but found ' + tokens[0])
tokens.shift()
if (tokens[0] === 'stream') {
tokens.shift()
rpc.server_streaming = true
}
rpc.output_type = tokens.shift()
if (tokens[0] !== ')') throw new Error('Expected ) but found ' + tokens[0])
tokens.shift()
if (tokens[0] === ';') {
tokens.shift()
return rpc
}
if (tokens[0] !== '{') throw new Error('Expected { but found ' + tokens[0])
tokens.shift()
while (tokens.length) {
if (tokens[0] === '}') {
tokens.shift()
// there goes optional semicolon after the enclosing "}"
if (tokens[0] === ';') tokens.shift()
return rpc
}
if (tokens[0] === 'option') {
var opt = onoption(tokens)
if (rpc.options[opt.name] !== undefined) throw new Error('Duplicate option ' + opt.name)
rpc.options[opt.name] = opt.value
} else {
throw new Error('Unexpected token in rpc options: ' + tokens[0])
}
}
throw new Error('No closing tag for rpc')
}
var parse = function (buf) {
var tokens = tokenize(buf.toString())
// check for isolated strings in tokens by looking for opening quote
for (var i = 0; i < tokens.length; i++) {
if (/^(\"|\')([^\'\"]*)$/.test(tokens[i])) {
var j
if (tokens[i].length === 1) {
j = i + 1
} else {
j = i
}
// look ahead for the closing quote and collapse all
// in-between tokens into a single token
for (j; j < tokens.length; j++) {
if (/^([^\'\"]*)(\"|\')$/.test(tokens[j])) {
tokens = tokens.slice(0, i).concat(tokens.slice(i, j + 1).join('')).concat(tokens.slice(j + 1))
break
}
}
}
}
var schema = {
syntax: 3,
package: null,
imports: [],
enums: [],
messages: [],
options: {},
extends: []
}
var firstline = true
while (tokens.length) {
switch (tokens[0]) {
case 'package':
schema.package = onpackagename(tokens)
break
case 'syntax':
if (!firstline) throw new Error('Protobuf syntax version should be first thing in file')
schema.syntax = onsyntaxversion(tokens)
break
case 'message':
schema.messages.push(onmessage(tokens))
break
case 'enum':
schema.enums.push(onenum(tokens))
break
case 'option':
var opt = onoption(tokens)
if (schema.options[opt.name]) throw new Error('Duplicate option ' + opt.name)
schema.options[opt.name] = opt.value
break
case 'import':
schema.imports.push(onimport(tokens))
break
case 'extend':
schema.extends.push(onextend(tokens))
break
case 'service':
if (!schema.services) schema.services = []
schema.services.push(onservice(tokens))
break
default:
throw new Error('Unexpected token: ' + tokens[0])
}
firstline = false
}
// now iterate over messages and propagate extends
schema.extends.forEach(function (ext) {
schema.messages.forEach(function (msg) {
if (msg.name === ext.name) {
ext.message.fields.forEach(function (field) {
if (!msg.extensions || field.tag < msg.extensions.from || field.tag > msg.extensions.to) {
throw new Error(msg.name + ' does not declare ' + field.tag + ' as an extension number')
}
msg.fields.push(field)
})
}
})
})
return schema
}
module.exports = parse
},{"./tokenize":247}],246:[function(require,module,exports){
var onfield = function (f, result) {
var prefix = f.repeated ? 'repeated' : f.required ? 'required' : 'optional'
if (f.type === 'map') prefix = 'map<' +="" f.map.from="" ','="" f.map.to="" '="">'
if (f.oneof) prefix = ''
var opts = Object.keys(f.options || {}).map(function (key) {
return key + ' = ' + f.options[key]
}).join(',')
if (opts) opts = ' [' + opts + ']'
result.push((prefix ? prefix + ' ' : '') + (f.map === 'map' ? '' : f.type + ' ') + f.name + ' = ' + f.tag + opts + ';')
return result
}
var onmessage = function (m, result) {
result.push('message ' + m.name + ' {')
if (!m.enums) m.enums = []
m.enums.forEach(function (e) {
result.push(onenum(e, []))
})
if (!m.messages) m.messages = []
m.messages.forEach(function (m) {
result.push(onmessage(m, []))
})
var oneofs = {}
if (!m.fields) m.fields = []
m.fields.forEach(function (f) {
if (f.oneof) {
if (!oneofs[f.oneof]) oneofs[f.oneof] = []
oneofs[f.oneof].push(onfield(f, []))
} else {
result.push(onfield(f, []))
}
})
Object.keys(oneofs).forEach(function (n) {
oneofs[n].unshift('oneof ' + n + ' {')
oneofs[n].push('}')
result.push(oneofs[n])
})
result.push('}', '')
return result
}
var onenum = function (e, result) {
result.push('enum ' + e.name + ' {')
var vals = Object.keys(e.values).map(function (key) {
return key + ' = ' + e.values[key] + ';'
})
result.push(vals)
result.push('}', '')
return result
}
var onoption = function (o, result) {
var keys = Object.keys(o)
keys.forEach(function (option) {
var v = o[option]
if (~option.indexOf('.')) option = '(' + option + ')'
var type = typeof v
if (type === 'object') {
v = onoptionMap(v, [])
if (v.length) result.push('option ' + option + ' = {', v, '};')
} else {
if (type === 'string' && option !== 'optimize_for') v = '"' + v + '"'
result.push('option ' + option + ' = ' + v + ';')
}
})
if (keys.length > 0) {
result.push('')
}
return result
}
var onoptionMap = function (o, result) {
var keys = Object.keys(o)
keys.forEach(function (k) {
var v = o[k]
var type = typeof v
if (type === 'object') {
if (Array.isArray(v)) {
v.forEach(function (v) {
v = onoptionMap(v, [])
if (v.length) result.push(k + ' {', v, '}')
})
} else {
v = onoptionMap(v, [])
if (v.length) result.push(k + ' {', v, '}')
}
} else {
if (type === 'string') v = '"' + v + '"'
result.push(k + ': ' + v)
}
})
return result
}
var onservices = function (s, result) {
result.push('service ' + s.name + ' {')
if (!s.options) s.options = {}
onoption(s.options, result)
if (!s.methods) s.methods = []
s.methods.forEach(function (m) {
result.push(onrpc(m, []))
})
result.push('}', '')
return result
}
var onrpc = function (rpc, result) {
var def = 'rpc ' + rpc.name + '('
if (rpc.client_streaming) def += 'stream '
def += rpc.input_type + ') returns ('
if (rpc.server_streaming) def += 'stream '
def += rpc.output_type + ')'
if (!rpc.options) rpc.options = {}
var options = onoption(rpc.options, [])
if (options.length > 1) {
result.push(def + ' {', options.slice(0, -1), '}')
} else {
result.push(def + ';')
}
return result
}
var indent = function (lvl) {
return function (line) {
if (Array.isArray(line)) return line.map(indent(lvl + ' ')).join('\n')
return lvl + line
}
}
module.exports = function (schema) {
var result = []
result.push('syntax = "proto' + schema.syntax + '";', '')
if (schema.package) result.push('package ' + schema.package + ';', '')
if (!schema.options) schema.options = {}
onoption(schema.options, result)
if (!schema.enums) schema.enums = []
schema.enums.forEach(function (e) {
onenum(e, result)
})
if (!schema.messages) schema.messages = []
schema.messages.forEach(function (m) {
onmessage(m, result)
})
if (schema.services) {
schema.services.forEach(function (s) {
onservices(s, result)
})
}
return result.map(indent('')).join('\n')
}
},{}],247:[function(require,module,exports){
module.exports = function (sch) {
var noComments = function (line) {
var i = line.indexOf('//')
return i > -1 ? line.slice(0, i) : line
}
var noMultilineComments = function () {
var inside = false
return function (token) {
if (token === '/*') {
inside = true
return false
}
if (token === '*/') {
inside = false
return false
}
return !inside
}
}
var trim = function (line) {
return line.trim()
}
return sch
.replace(/([;,{}\(\)=\:\[\]<>]|\/\*|\*\/)/g, ' $1 ')
.split(/\n/)
.map(trim)
.filter(Boolean)
.map(noComments)
.map(trim)
.filter(Boolean)
.join('\n')
.split(/\s+|\n+/gm)
.filter(noMultilineComments())
}
},{}],248:[function(require,module,exports){
(function (Buffer){
/* eslint-disable no-spaced-func */
/* eslint-disable no-unexpected-multiline */
var encodings = require('./encodings')
var varint = require('varint')
var genobj = require('generate-object-property')
var genfun = require('generate-function')
var skip = function (type, buffer, offset) {
switch (type) {
case 0:
varint.decode(buffer, offset)
return offset + varint.decode.bytes
case 1:
return offset + 8
case 2:
var len = varint.decode(buffer, offset)
return offset + varint.decode.bytes + len
case 3:
case 4:
throw new Error('Groups are not supported')
case 5:
return offset + 4
}
throw new Error('Unknown wire type: ' + type)
}
var defined = function (val) {
return val !== null && val !== undefined && (typeof val !== 'number' || !isNaN(val))
}
var isString = function (def) {
try {
return !!def && typeof JSON.parse(def) === 'string'
} catch (err) {
return false
}
}
var defaultValue = function (f, def) {
if (f.map) return '{}'
if (f.repeated) return '[]'
switch (f.type) {
case 'string':
return isString(def) ? def : '""'
case 'bool':
if (def === 'true') return 'true'
return 'false'
case 'float':
case 'double':
case 'sfixed32':
case 'fixed32':
case 'varint':
case 'enum':
case 'uint64':
case 'uint32':
case 'int64':
case 'int32':
case 'sint64':
case 'sint32':
return '' + Number(def || 0)
default:
return 'null'
}
}
module.exports = function (schema, extraEncodings) {
var messages = {}
var enums = {}
var cache = {}
var visit = function (schema, prefix) {
if (schema.enums) {
schema.enums.forEach(function (e) {
e.id = prefix + (prefix ? '.' : '') + e.name
enums[e.id] = e
visit(e, e.id)
})
}
if (schema.messages) {
schema.messages.forEach(function (m) {
m.id = prefix + (prefix ? '.' : '') + m.name
messages[m.id] = m
m.fields.forEach(function (f) {
if (!f.map) return
var name = 'Map_' + f.map.from + '_' + f.map.to
var map = {
name: name,
enums: [],
messages: [],
fields: [{
name: 'key',
type: f.map.from,
tag: 1,
repeated: false,
required: true
}, {
name: 'value',
type: f.map.to,
tag: 2,
repeated: false,
required: false
}],
extensions: null,
id: prefix + (prefix ? '.' : '') + name
}
if (!messages[map.id]) {
messages[map.id] = map
schema.messages.push(map)
}
f.type = name
f.repeated = true
})
visit(m, m.id)
})
}
}
visit(schema, '')
var compileEnum = function (e) {
var conditions = Object.keys(e.values)
.map(function (k) {
return 'val !== ' + parseInt(e.values[k], 10)
})
.join(' && ')
if (!conditions) conditions = 'true'
var encode = genfun()
('function encode (val, buf, offset) {')
('if (%s) throw new Error("Invalid enum value: "+val)', conditions)
('varint.encode(val, buf, offset)')
('encode.bytes = varint.encode.bytes')
('return buf')
('}')
.toFunction({
varint: varint
})
var decode = genfun()
('function decode (buf, offset) {')
('var val = varint.decode(buf, offset)')
('if (%s) throw new Error("Invalid enum value: "+val)', conditions)
('decode.bytes = varint.decode.bytes')
('return val')
('}')
.toFunction({
varint: varint
})
return encodings.make(0, encode, decode, varint.encodingLength)
}
var compileMessage = function (m, exports) {
m.messages.forEach(function (nested) {
exports[nested.name] = resolve(nested.name, m.id)
})
m.enums.forEach(function (val) {
exports[val.name] = val.values
})
exports.type = 2
exports.message = true
exports.name = m.name
var oneofs = {}
m.fields.forEach(function (f) {
if (!f.oneof) return
if (!oneofs[f.oneof]) oneofs[f.oneof] = []
oneofs[f.oneof].push(f.name)
})
var enc = m.fields.map(function (f) {
return resolve(f.type, m.id)
})
var forEach = function (fn) {
for (var i = 0; i < enc.length; i++) fn(enc[i], m.fields[i], genobj('obj', m.fields[i].name), i)
}
// compile encodingLength
var encodingLength = genfun()
('function encodingLength (obj) {')
('var length = 0')
Object.keys(oneofs).forEach(function (name) {
var msg = JSON.stringify('only one of the properties defined in oneof ' + name + ' can be set')
var cnt = oneofs[name]
.map(function (prop) {
return '+defined(' + genobj('obj', prop) + ')'
})
.join(' + ')
encodingLength('if ((%s) > 1) throw new Error(%s)', cnt, msg)
})
forEach(function (e, f, val, i) {
var packed = f.repeated && f.options && f.options.packed
var hl = varint.encodingLength(f.tag << 3 | e.type)
if (f.required) encodingLength('if (!defined(%s)) throw new Error(%s)', val, JSON.stringify(f.name + ' is required'))
else encodingLength('if (defined(%s)) {', val)
if (f.map) {
encodingLength()
('var tmp = Object.keys(%s)', val)
('for (var i = 0; i < tmp.length; i++) {')
('tmp[i] = {key: tmp[i], value: %s[tmp[i]]}', val)
('}')
val = 'tmp'
}
if (packed) {
encodingLength()
('var packedLen = 0')
('for (var i = 0; i < %s.length; i++) {', val)
('if (!defined(%s)) continue', val + '[i]')
('var len = enc[%d].encodingLength(%s)', i, val + '[i]')
('packedLen += len')
if (e.message) encodingLength('packedLen += varint.encodingLength(len)')
encodingLength('}')
('if (packedLen) {')
('length += %d + packedLen + varint.encodingLength(packedLen)', hl)
('}')
} else {
if (f.repeated) {
encodingLength('for (var i = 0; i < %s.length; i++) {', val)
val += '[i]'
encodingLength('if (!defined(%s)) continue', val)
}
encodingLength('var len = enc[%d].encodingLength(%s)', i, val)
if (e.message) encodingLength('length += varint.encodingLength(len)')
encodingLength('length += %d + len', hl)
if (f.repeated) encodingLength('}')
}
if (!f.required) encodingLength('}')
})
encodingLength()
('return length')
('}')
encodingLength = encodingLength.toFunction({
defined: defined,
varint: varint,
enc: enc
})
// compile encode
var encode = genfun()
('function encode (obj, buf, offset) {')
('if (!offset) offset = 0')
('if (!buf) buf = new Buffer(encodingLength(obj))')
('var oldOffset = offset')
Object.keys(oneofs).forEach(function (name) {
var msg = JSON.stringify('only one of the properties defined in oneof ' + name + ' can be set')
var cnt = oneofs[name]
.map(function (prop) {
return '+defined(' + genobj('obj', prop) + ')'
})
.join(' + ')
encode('if ((%s) > 1) throw new Error(%s)', cnt, msg)
})
forEach(function (e, f, val, i) {
if (f.required) encode('if (!defined(%s)) throw new Error(%s)', val, JSON.stringify(f.name + ' is required'))
else encode('if (defined(%s)) {', val)
var packed = f.repeated && f.options && f.options.packed
var p = varint.encode(f.tag << 3 | 2)
var h = varint.encode(f.tag << 3 | e.type)
var j
if (f.map) {
encode()
('var tmp = Object.keys(%s)', val)
('for (var i = 0; i < tmp.length; i++) {')
('tmp[i] = {key: tmp[i], value: %s[tmp[i]]}', val)
('}')
val = 'tmp'
}
if (packed) {
encode()
('var packedLen = 0')
('for (var i = 0; i < %s.length; i++) {', val)
('if (!defined(%s)) continue', val + '[i]')
('packedLen += enc[%d].encodingLength(%s)', i, val + '[i]')
('}')
encode('if (packedLen) {')
for (j = 0; j < h.length; j++) encode('buf[offset++] = %d', p[j])
encode('varint.encode(packedLen, buf, offset)')
encode('offset += varint.encode.bytes')
encode('}')
}
if (f.repeated) {
encode('for (var i = 0; i < %s.length; i++) {', val)
val += '[i]'
encode('if (!defined(%s)) continue', val)
}
if (!packed) for (j = 0; j < h.length; j++) encode('buf[offset++] = %d', h[j])
if (e.message) {
encode('varint.encode(enc[%d].encodingLength(%s), buf, offset)', i, val)
encode('offset += varint.encode.bytes')
}
encode('enc[%d].encode(%s, buf, offset)', i, val)
encode('offset += enc[%d].encode.bytes', i)
if (f.repeated) encode('}')
if (!f.required) encode('}')
})
encode()
('encode.bytes = offset - oldOffset')
('return buf')
('}')
encode = encode.toFunction({
encodingLength: encodingLength,
defined: defined,
varint: varint,
enc: enc,
Buffer: Buffer
})
// compile decode
var invalid = m.fields
.map(function (f, i) {
return f.required && '!found' + i
})
.filter(function (f) {
return f
})
.join(' || ')
var decode = genfun()
var objectKeys = []
forEach(function (e, f) {
var def = f.options && f.options.default
var resolved = resolve(f.type, m.id, false)
var vals = resolved && resolved.values
if (vals) { // is enum
if (f.repeated) {
objectKeys.push(genobj.property(f.name) + ': []')
} else {
def = (def && def in vals) ? vals[def] : vals[Object.keys(vals)[0]]
objectKeys.push(genobj.property(f.name) + ': ' + parseInt(def || 0, 10))
}
return
}
if (!f.oneof) {
objectKeys.push(genobj.property(f.name) + ': ' + defaultValue(f, def))
}
})
decode()
('function decode (buf, offset, end) {')
('if (!offset) offset = 0')
('if (!end) end = buf.length')
('if (!(end <= 1="" buf.length="" &&="" offset="" <="buf.length))" throw="" new="" error("decoded="" message="" is="" not="" valid")')="" ('var="" oldoffset="offset')" obj="{')" objectkeys.foreach(function="" (prop,="" i)="" {="" decode(prop="" +="" (i="==" objectkeys.length="" -="" ?="" ''="" :="" ','))="" })="" decode('}')="" foreach(function="" (e,="" f,="" val,="" if="" (f.required)="" decode('var="" found%d="false'," decode('while="" (true)="" {')="" ('if="" (end="" (invalid="" 'if="" (%s)="" valid")',="" invalid)="" ('decode.bytes="offset" oldoffset')="" ('return="" obj')="" ('}')="" prefix="varint.decode(buf," offset)')="" ('offset="" tag="prefix">> 3')
('switch (tag) {')
forEach(function (e, f, val, i) {
var packed = f.repeated && f.options && f.options.packed
decode('case %d:', f.tag)
if (f.oneof) {
m.fields.forEach(function (otherField) {
if (otherField.oneof === f.oneof && f.name !== otherField.name) {
decode('delete %s', genobj('obj', otherField.name))
}
})
}
if (packed) {
decode()
('var packedEnd = varint.decode(buf, offset)')
('offset += varint.decode.bytes')
('packedEnd += offset')
('while (offset < packedEnd) {')
}
if (e.message) {
decode('var len = varint.decode(buf, offset)')
decode('offset += varint.decode.bytes')
if (f.map) {
decode('var tmp = enc[%d].decode(buf, offset, offset + len)', i)
decode('%s[tmp.key] = tmp.value', val)
} else if (f.repeated) {
decode('%s.push(enc[%d].decode(buf, offset, offset + len))', val, i)
} else {
decode('%s = enc[%d].decode(buf, offset, offset + len)', val, i)
}
} else {
if (f.repeated) {
decode('%s.push(enc[%d].decode(buf, offset))', val, i)
} else {
decode('%s = enc[%d].decode(buf, offset)', val, i)
}
}
decode('offset += enc[%d].decode.bytes', i)
if (packed) decode('}')
if (f.required) decode('found%d = true', i)
decode('break')
})
decode()
('default:')
('offset = skip(prefix & 7, buf, offset)')
('}')
('}')
('}')
decode = decode.toFunction({
varint: varint,
skip: skip,
enc: enc
})
// end of compilation - return all the things
encode.bytes = decode.bytes = 0
exports.buffer = true
exports.encode = encode
exports.decode = decode
exports.encodingLength = encodingLength
return exports
}
var resolve = function (name, from, compile) {
if (extraEncodings && extraEncodings[name]) return extraEncodings[name]
if (encodings[name]) return encodings[name]
var m = (from ? from + '.' + name : name).split('.')
.map(function (part, i, list) {
return list.slice(0, i).concat(name).join('.')
})
.reverse()
.reduce(function (result, id) {
return result || messages[id] || enums[id]
}, null)
if (compile === false) return m
if (!m) throw new Error('Could not resolve ' + name)
if (m.values) return compileEnum(m)
return cache[m.id] || compileMessage(m, cache[m.id] = {})
}
return (schema.enums || []).concat((schema.messages || []).map(function (message) {
return resolve(message.id)
}))
}
}).call(this,require("buffer").Buffer)
},{"./encodings":249,"buffer":45,"generate-function":182,"generate-object-property":183,"varint":290}],249:[function(require,module,exports){
(function (Buffer){
var varint = require('varint')
var svarint = require('signed-varint')
var encoder = function (type, encode, decode, encodingLength) {
encode.bytes = decode.bytes = 0
return {
type: type,
encode: encode,
decode: decode,
encodingLength: encodingLength
}
}
exports.make = encoder
exports.bytes = (function (tag) {
var bufferLength = function (val) {
return Buffer.isBuffer(val) ? val.length : Buffer.byteLength(val)
}
var encodingLength = function (val) {
var len = bufferLength(val)
return varint.encodingLength(len) + len
}
var encode = function (val, buffer, offset) {
var oldOffset = offset
var len = bufferLength(val)
varint.encode(len, buffer, offset)
offset += varint.encode.bytes
if (Buffer.isBuffer(val)) val.copy(buffer, offset)
else buffer.write(val, offset, len)
offset += len
encode.bytes = offset - oldOffset
return buffer
}
var decode = function (buffer, offset) {
var oldOffset = offset
var len = varint.decode(buffer, offset)
offset += varint.decode.bytes
var val = buffer.slice(offset, offset + len)
offset += val.length
decode.bytes = offset - oldOffset
return val
}
return encoder(2, encode, decode, encodingLength)
})()
exports.string = (function () {
var encodingLength = function (val) {
var len = Buffer.byteLength(val)
return varint.encodingLength(len) + len
}
var encode = function (val, buffer, offset) {
var oldOffset = offset
var len = Buffer.byteLength(val)
varint.encode(len, buffer, offset, 'utf-8')
offset += varint.encode.bytes
buffer.write(val, offset, len)
offset += len
encode.bytes = offset - oldOffset
return buffer
}
var decode = function (buffer, offset) {
var oldOffset = offset
var len = varint.decode(buffer, offset)
offset += varint.decode.bytes
var val = buffer.toString('utf-8', offset, offset + len)
offset += len
decode.bytes = offset - oldOffset
return val
}
return encoder(2, encode, decode, encodingLength)
})()
exports.bool = (function () {
var encodingLength = function (val) {
return 1
}
var encode = function (val, buffer, offset) {
buffer[offset] = val ? 1 : 0
encode.bytes = 1
return buffer
}
var decode = function (buffer, offset) {
var bool = buffer[offset] > 0
decode.bytes = 1
return bool
}
return encoder(0, encode, decode, encodingLength)
})()
exports.int32 = (function () {
var decode = function (buffer, offset) {
var val = varint.decode(buffer, offset)
decode.bytes = varint.decode.bytes
return val > 2147483647 ? val - 4294967296 : val
}
var encode = function (val, buffer, offset) {
varint.encode(val < 0 ? val + 4294967296 : val, buffer, offset)
encode.bytes = varint.encode.bytes
return buffer
}
var encodingLength = function (val) {
return varint.encodingLength(val < 0 ? val + 4294967296 : val)
}
return encoder(0, varint.encode, decode, encodingLength)
})()
exports.int64 = (function () {
var decode = function (buffer, offset) {
var val = varint.decode(buffer, offset)
if (val >= Math.pow(2, 63)) {
var limit = 9
while (buffer[offset + limit - 1] === 0xff) limit--
limit = limit || 9
var subset = new Buffer(limit)
buffer.copy(subset, 0, offset, offset + limit)
subset[limit - 1] = subset[limit - 1] & 0x7f
val = -1 * varint.decode(subset, 0)
decode.bytes = 10
} else {
decode.bytes = varint.decode.bytes
}
return val
}
var encode = function (val, buffer, offset) {
if (val < 0) {
var last = offset + 9
varint.encode(val * -1, buffer, offset)
offset += varint.encode.bytes - 1
buffer[offset] = buffer[offset] | 0x80
while (offset < last - 1) {
offset++
buffer[offset] = 0xff
}
buffer[last] = 0x01
encode.bytes = 10
} else {
varint.encode(val, buffer, offset)
encode.bytes = varint.encode.bytes
}
return buffer
}
var encodingLength = function (val) {
return val < 0 ? 10 : varint.encodingLength(val)
}
return encoder(0, encode, decode, encodingLength)
})()
exports.sint32 =
exports.sint64 = (function () {
return encoder(0, svarint.encode, svarint.decode, svarint.encodingLength)
})()
exports.uint32 =
exports.uint64 =
exports.enum =
exports.varint = (function () {
return encoder(0, varint.encode, varint.decode, varint.encodingLength)
})()
// we cannot represent these in javascript so we just use buffers
exports.fixed64 =
exports.sfixed64 = (function () {
var encodingLength = function (val) {
return 8
}
var encode = function (val, buffer, offset) {
val.copy(buffer, offset)
encode.bytes = 8
return buffer
}
var decode = function (buffer, offset) {
var val = buffer.slice(offset, offset + 8)
decode.bytes = 8
return val
}
return encoder(1, encode, decode, encodingLength)
})()
exports.double = (function () {
var encodingLength = function (val) {
return 8
}
var encode = function (val, buffer, offset) {
buffer.writeDoubleLE(val, offset)
encode.bytes = 8
return buffer
}
var decode = function (buffer, offset) {
var val = buffer.readDoubleLE(offset)
decode.bytes = 8
return val
}
return encoder(1, encode, decode, encodingLength)
})()
exports.fixed32 = (function () {
var encodingLength = function (val) {
return 4
}
var encode = function (val, buffer, offset) {
buffer.writeUInt32LE(val, offset)
encode.bytes = 4
return buffer
}
var decode = function (buffer, offset) {
var val = buffer.readUInt32LE(offset)
decode.bytes = 4
return val
}
return encoder(5, encode, decode, encodingLength)
})()
exports.sfixed32 = (function () {
var encodingLength = function (val) {
return 4
}
var encode = function (val, buffer, offset) {
buffer.writeInt32LE(val, offset)
encode.bytes = 4
return buffer
}
var decode = function (buffer, offset) {
var val = buffer.readInt32LE(offset)
decode.bytes = 4
return val
}
return encoder(5, encode, decode, encodingLength)
})()
exports.float = (function () {
var encodingLength = function (val) {
return 4
}
var encode = function (val, buffer, offset) {
buffer.writeFloatLE(val, offset)
encode.bytes = 4
return buffer
}
var decode = function (buffer, offset) {
var val = buffer.readFloatLE(offset)
decode.bytes = 4
return val
}
return encoder(5, encode, decode, encodingLength)
})()
}).call(this,require("buffer").Buffer)
},{"buffer":45,"signed-varint":263,"varint":290}],250:[function(require,module,exports){
(function (Buffer){
var schema = require('protocol-buffers-schema')
var compile = require('./compile')
module.exports = function (proto, opts) {
if (!opts) opts = {}
if (!proto) throw new Error('Pass in a .proto string or a protobuf-schema parsed object')
var sch = (typeof proto === 'object' && !Buffer.isBuffer(proto)) ? proto : schema.parse(proto)
// to not make toString,toJSON enumarable we make a fire-and-forget prototype
var Messages = function () {
var self = this
compile(sch, opts.encodings || {}).forEach(function (m) {
self[m.name] = m.values || m
})
}
Messages.prototype.toString = function () {
return schema.stringify(sch)
}
Messages.prototype.toJSON = function () {
return sch
}
return new Messages()
}
}).call(this,{"isBuffer":require("../../../../../../.nvm-fish/v5.4.1/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
},{"../../../../../../.nvm-fish/v5.4.1/lib/node_modules/browserify/node_modules/is-buffer/index.js":93,"./compile":248,"protocol-buffers-schema":244}],251:[function(require,module,exports){
arguments[4][168][0].apply(exports,arguments)
},{"dup":168}],252:[function(require,module,exports){
var once = require('once')
var eos = require('end-of-stream')
var fs = require('fs') // we only need fs to get the ReadStream and WriteStream prototypes
var noop = function () {}
var isFn = function (fn) {
return typeof fn === 'function'
}
var isFS = function (stream) {
return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)
}
var isRequest = function (stream) {
return stream.setHeader && isFn(stream.abort)
}
var destroyer = function (stream, reading, writing, callback) {
callback = once(callback)
var closed = false
stream.on('close', function () {
closed = true
})
eos(stream, {readable: reading, writable: writing}, function (err) {
if (err) return callback(err)
closed = true
callback()
})
var destroyed = false
return function (err) {
if (closed) return
if (destroyed) return
destroyed = true
if (isFS(stream)) return stream.close() // use close for fs streams to avoid fd leaks
if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want
if (isFn(stream.destroy)) return stream.destroy()
callback(err || new Error('stream was destroyed'))
}
}
var call = function (fn) {
fn()
}
var pipe = function (from, to) {
return from.pipe(to)
}
var pump = function () {
var streams = Array.prototype.slice.call(arguments)
var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop
if (Array.isArray(streams[0])) streams = streams[0]
if (streams.length < 2) throw new Error('pump requires two streams per minimum')
var error
var destroys = streams.map(function (stream, i) {
var reading = i < streams.length - 1
var writing = i > 0
return destroyer(stream, reading, writing, function (err) {
if (!error) error = err
if (err) destroys.forEach(call)
if (reading) return
destroys.forEach(call)
callback(error)
})
})
return streams.reduce(pipe)
}
module.exports = pump
},{"end-of-stream":165,"fs":1,"once":240}],253:[function(require,module,exports){
var now = require('performance-now')
, global = typeof window === 'undefined' ? {} : window
, vendors = ['moz', 'webkit']
, suffix = 'AnimationFrame'
, raf = global['request' + suffix]
, caf = global['cancel' + suffix] || global['cancelRequest' + suffix]
, isNative = true
for(var i = 0; i < vendors.length && !raf; i++) {
raf = global[vendors[i] + 'Request' + suffix]
caf = global[vendors[i] + 'Cancel' + suffix]
|| global[vendors[i] + 'CancelRequest' + suffix]
}
// Some versions of FF have rAF but not cAF
if(!raf || !caf) {
isNative = false
var last = 0
, id = 0
, queue = []
, frameDuration = 1000 / 60
raf = function(callback) {
if(queue.length === 0) {
var _now = now()
, next = Math.max(0, frameDuration - (_now - last))
last = next + _now
setTimeout(function() {
var cp = queue.slice(0)
// Clear queue here to prevent
// callbacks from appending listeners
// to the current frame's queue
queue.length = 0
for(var i = 0; i < cp.length; i++) {
if(!cp[i].cancelled) {
try{
cp[i].callback(last)
} catch(e) {
setTimeout(function() { throw e }, 0)
}
}
}
}, Math.round(next))
}
queue.push({
handle: ++id,
callback: callback,
cancelled: false
})
return id
}
caf = function(handle) {
for(var i = 0; i < queue.length; i++) {
if(queue[i].handle === handle) {
queue[i].cancelled = true
}
}
}
}
module.exports = function(fn) {
// Wrap in a new function to prevent
// `cancel` potentially being assigned
// to the native rAF function
if(!isNative) {
return raf.call(global, fn)
}
return raf.call(global, function() {
try{
fn.apply(this, arguments)
} catch(e) {
setTimeout(function() { throw e }, 0)
}
})
}
module.exports.cancel = function() {
caf.apply(global, arguments)
}
},{"performance-now":242}],254:[function(require,module,exports){
(function (process){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// a duplex stream is just a stream that is both readable and writable.
// Since JS doesn't have multiple prototypal inheritance, this class
// prototypally inherits from Readable, and then parasitically from
// Writable.
module.exports = Duplex;
/**/
var objectKeys = Object.keys || function (obj) {
var keys = [];
for (var key in obj) keys.push(key);
return keys;
}
/**/
/**/
var util = require('core-util-is');
util.inherits = require('inherits');
/**/
var Readable = require('./_stream_readable');
var Writable = require('./_stream_writable');
util.inherits(Duplex, Readable);
forEach(objectKeys(Writable.prototype), function(method) {
if (!Duplex.prototype[method])
Duplex.prototype[method] = Writable.prototype[method];
});
function Duplex(options) {
if (!(this instanceof Duplex))
return new Duplex(options);
Readable.call(this, options);
Writable.call(this, options);
if (options && options.readable === false)
this.readable = false;
if (options && options.writable === false)
this.writable = false;
this.allowHalfOpen = true;
if (options && options.allowHalfOpen === false)
this.allowHalfOpen = false;
this.once('end', onend);
}
// the no-half-open enforcer
function onend() {
// if we allow half-open state, or if the writable side ended,
// then we're ok.
if (this.allowHalfOpen || this._writableState.ended)
return;
// no more data can be written.
// But allow more writes to happen in this tick.
process.nextTick(this.end.bind(this));
}
function forEach (xs, f) {
for (var i = 0, l = xs.length; i < l; i++) {
f(xs[i], i);
}
}
}).call(this,require('_process'))
},{"./_stream_readable":256,"./_stream_writable":258,"_process":104,"core-util-is":150,"inherits":204}],255:[function(require,module,exports){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// a passthrough stream.
// basically just the most minimal sort of Transform stream.
// Every written chunk gets output as-is.
module.exports = PassThrough;
var Transform = require('./_stream_transform');
/**/
var util = require('core-util-is');
util.inherits = require('inherits');
/**/
util.inherits(PassThrough, Transform);
function PassThrough(options) {
if (!(this instanceof PassThrough))
return new PassThrough(options);
Transform.call(this, options);
}
PassThrough.prototype._transform = function(chunk, encoding, cb) {
cb(null, chunk);
};
},{"./_stream_transform":257,"core-util-is":150,"inherits":204}],256:[function(require,module,exports){
(function (process){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
module.exports = Readable;
/**/
var isArray = require('isarray');
/**/
/**/
var Buffer = require('buffer').Buffer;
/**/
Readable.ReadableState = ReadableState;
var EE = require('events').EventEmitter;
/**/
if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
return emitter.listeners(type).length;
};
/**/
var Stream = require('stream');
/**/
var util = require('core-util-is');
util.inherits = require('inherits');
/**/
var StringDecoder;
/**/
var debug = require('util');
if (debug && debug.debuglog) {
debug = debug.debuglog('stream');
} else {
debug = function () {};
}
/**/
util.inherits(Readable, Stream);
function ReadableState(options, stream) {
var Duplex = require('./_stream_duplex');
options = options || {};
// the point at which it stops calling _read() to fill the buffer
// Note: 0 is a valid value, means "don't call _read preemptively ever"
var hwm = options.highWaterMark;
var defaultHwm = options.objectMode ? 16 : 16 * 1024;
this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
// cast to ints.
this.highWaterMark = ~~this.highWaterMark;
this.buffer = [];
this.length = 0;
this.pipes = null;
this.pipesCount = 0;
this.flowing = null;
this.ended = false;
this.endEmitted = false;
this.reading = false;
// a flag to be able to tell if the onwrite cb is called immediately,
// or on a later tick. We set this to true at first, because any
// actions that shouldn't happen until "later" should generally also
// not happen before the first write call.
this.sync = true;
// whenever we return null, then we set a flag to say
// that we're awaiting a 'readable' event emission.
this.needReadable = false;
this.emittedReadable = false;
this.readableListening = false;
// object stream flag. Used to make read(n) ignore n and to
// make all the buffer merging and length checks go away
this.objectMode = !!options.objectMode;
if (stream instanceof Duplex)
this.objectMode = this.objectMode || !!options.readableObjectMode;
// Crypto is kind of old and crusty. Historically, its default string
// encoding is 'binary' so we have to make this configurable.
// Everything else in the universe uses 'utf8', though.
this.defaultEncoding = options.defaultEncoding || 'utf8';
// when piping, we only care about 'readable' events that happen
// after read()ing all the bytes and not getting any pushback.
this.ranOut = false;
// the number of writers that are awaiting a drain event in .pipe()s
this.awaitDrain = 0;
// if true, a maybeReadMore has been scheduled
this.readingMore = false;
this.decoder = null;
this.encoding = null;
if (options.encoding) {
if (!StringDecoder)
StringDecoder = require('string_decoder/').StringDecoder;
this.decoder = new StringDecoder(options.encoding);
this.encoding = options.encoding;
}
}
function Readable(options) {
var Duplex = require('./_stream_duplex');
if (!(this instanceof Readable))
return new Readable(options);
this._readableState = new ReadableState(options, this);
// legacy
this.readable = true;
Stream.call(this);
}
// Manually shove something into the read() buffer.
// This returns true if the highWaterMark has not been hit yet,
// similar to how Writable.write() returns true if you should
// write() some more.
Readable.prototype.push = function(chunk, encoding) {
var state = this._readableState;
if (util.isString(chunk) && !state.objectMode) {
encoding = encoding || state.defaultEncoding;
if (encoding !== state.encoding) {
chunk = new Buffer(chunk, encoding);
encoding = '';
}
}
return readableAddChunk(this, state, chunk, encoding, false);
};
// Unshift should *always* be something directly out of read()
Readable.prototype.unshift = function(chunk) {
var state = this._readableState;
return readableAddChunk(this, state, chunk, '', true);
};
function readableAddChunk(stream, state, chunk, encoding, addToFront) {
var er = chunkInvalid(state, chunk);
if (er) {
stream.emit('error', er);
} else if (util.isNullOrUndefined(chunk)) {
state.reading = false;
if (!state.ended)
onEofChunk(stream, state);
} else if (state.objectMode || chunk && chunk.length > 0) {
if (state.ended && !addToFront) {
var e = new Error('stream.push() after EOF');
stream.emit('error', e);
} else if (state.endEmitted && addToFront) {
var e = new Error('stream.unshift() after end event');
stream.emit('error', e);
} else {
if (state.decoder && !addToFront && !encoding)
chunk = state.decoder.write(chunk);
if (!addToFront)
state.reading = false;
// if we want the data now, just emit it.
if (state.flowing && state.length === 0 && !state.sync) {
stream.emit('data', chunk);
stream.read(0);
} else {
// update the buffer info.
state.length += state.objectMode ? 1 : chunk.length;
if (addToFront)
state.buffer.unshift(chunk);
else
state.buffer.push(chunk);
if (state.needReadable)
emitReadable(stream);
}
maybeReadMore(stream, state);
}
} else if (!addToFront) {
state.reading = false;
}
return needMoreData(state);
}
// if it's past the high water mark, we can push in some more.
// Also, if we have no data yet, we can stand some
// more bytes. This is to work around cases where hwm=0,
// such as the repl. Also, if the push() triggered a
// readable event, and the user called read(largeNumber) such that
// needReadable was set, then we ought to push more, so that another
// 'readable' event will be triggered.
function needMoreData(state) {
return !state.ended &&
(state.needReadable ||
state.length < state.highWaterMark ||
state.length === 0);
}
// backwards compatibility.
Readable.prototype.setEncoding = function(enc) {
if (!StringDecoder)
StringDecoder = require('string_decoder/').StringDecoder;
this._readableState.decoder = new StringDecoder(enc);
this._readableState.encoding = enc;
return this;
};
// Don't raise the hwm > 128MB
var MAX_HWM = 0x800000;
function roundUpToNextPowerOf2(n) {
if (n >= MAX_HWM) {
n = MAX_HWM;
} else {
// Get the next highest power of 2
n--;
for (var p = 1; p < 32; p <<= 1)="" n="" |="n">> p;
n++;
}
return n;
}
function howMuchToRead(n, state) {
if (state.length === 0 && state.ended)
return 0;
if (state.objectMode)
return n === 0 ? 0 : 1;
if (isNaN(n) || util.isNull(n)) {
// only flow one buffer at a time
if (state.flowing && state.buffer.length)
return state.buffer[0].length;
else
return state.length;
}
if (n <= 0)="" return="" 0;="" if="" we're="" asking="" for="" more="" than="" the="" target="" buffer="" level,="" then="" raise="" water="" mark.="" bump="" up="" to="" next="" highest="" power="" of="" 2,="" prevent="" increasing="" it="" excessively="" in="" tiny="" amounts.="" (n=""> state.highWaterMark)
state.highWaterMark = roundUpToNextPowerOf2(n);
// don't have that much. return null, unless we've ended.
if (n > state.length) {
if (!state.ended) {
state.needReadable = true;
return 0;
} else
return state.length;
}
return n;
}
// you can override either this method, or the async _read(n) below.
Readable.prototype.read = function(n) {
debug('read', n);
var state = this._readableState;
var nOrig = n;
if (!util.isNumber(n) || n > 0)
state.emittedReadable = false;
// if we're doing read(0) to trigger a readable event, but we
// already have a bunch of data in the buffer, then just trigger
// the 'readable' event and move on.
if (n === 0 &&
state.needReadable &&
(state.length >= state.highWaterMark || state.ended)) {
debug('read: emitReadable', state.length, state.ended);
if (state.length === 0 && state.ended)
endReadable(this);
else
emitReadable(this);
return null;
}
n = howMuchToRead(n, state);
// if we've ended, and we're now clear, then finish it up.
if (n === 0 && state.ended) {
if (state.length === 0)
endReadable(this);
return null;
}
// All the actual chunk generation logic needs to be
// *below* the call to _read. The reason is that in certain
// synthetic stream cases, such as passthrough streams, _read
// may be a completely synchronous operation which may change
// the state of the read buffer, providing enough data when
// before there was *not* enough.
//
// So, the steps are:
// 1. Figure out what the state of things will be after we do
// a read from the buffer.
//
// 2. If that resulting state will trigger a _read, then call _read.
// Note that this may be asynchronous, or synchronous. Yes, it is
// deeply ugly to write APIs this way, but that still doesn't mean
// that the Readable class should behave improperly, as streams are
// designed to be sync/async agnostic.
// Take note if the _read call is sync or async (ie, if the read call
// has returned yet), so that we know whether or not it's safe to emit
// 'readable' etc.
//
// 3. Actually pull the requested chunks out of the buffer and return.
// if we need a readable event, then we need to do some reading.
var doRead = state.needReadable;
debug('need readable', doRead);
// if we currently have less than the highWaterMark, then also read some
if (state.length === 0 || state.length - n < state.highWaterMark) {
doRead = true;
debug('length less than watermark', doRead);
}
// however, if we've ended, then there's no point, and if we're already
// reading, then it's unnecessary.
if (state.ended || state.reading) {
doRead = false;
debug('reading or ended', doRead);
}
if (doRead) {
debug('do read');
state.reading = true;
state.sync = true;
// if the length is currently zero, then we *need* a readable event.
if (state.length === 0)
state.needReadable = true;
// call internal read method
this._read(state.highWaterMark);
state.sync = false;
}
// If _read pushed data synchronously, then `reading` will be false,
// and we need to re-evaluate how much data we can return to the user.
if (doRead && !state.reading)
n = howMuchToRead(nOrig, state);
var ret;
if (n > 0)
ret = fromList(n, state);
else
ret = null;
if (util.isNull(ret)) {
state.needReadable = true;
n = 0;
}
state.length -= n;
// If we have nothing in the buffer, then we want to know
// as soon as we *do* get something into the buffer.
if (state.length === 0 && !state.ended)
state.needReadable = true;
// If we tried to read() past the EOF, then emit end on the next tick.
if (nOrig !== n && state.ended && state.length === 0)
endReadable(this);
if (!util.isNull(ret))
this.emit('data', ret);
return ret;
};
function chunkInvalid(state, chunk) {
var er = null;
if (!util.isBuffer(chunk) &&
!util.isString(chunk) &&
!util.isNullOrUndefined(chunk) &&
!state.objectMode) {
er = new TypeError('Invalid non-string/buffer chunk');
}
return er;
}
function onEofChunk(stream, state) {
if (state.decoder && !state.ended) {
var chunk = state.decoder.end();
if (chunk && chunk.length) {
state.buffer.push(chunk);
state.length += state.objectMode ? 1 : chunk.length;
}
}
state.ended = true;
// emit 'readable' now to make sure it gets picked up.
emitReadable(stream);
}
// Don't emit readable right away in sync mode, because this can trigger
// another read() call => stack overflow. This way, it might trigger
// a nextTick recursion warning, but that's not so bad.
function emitReadable(stream) {
var state = stream._readableState;
state.needReadable = false;
if (!state.emittedReadable) {
debug('emitReadable', state.flowing);
state.emittedReadable = true;
if (state.sync)
process.nextTick(function() {
emitReadable_(stream);
});
else
emitReadable_(stream);
}
}
function emitReadable_(stream) {
debug('emit readable');
stream.emit('readable');
flow(stream);
}
// at this point, the user has presumably seen the 'readable' event,
// and called read() to consume some data. that may have triggered
// in turn another _read(n) call, in which case reading = true if
// it's in progress.
// However, if we're not ended, or reading, and the length < hwm,
// then go ahead and try to read some more preemptively.
function maybeReadMore(stream, state) {
if (!state.readingMore) {
state.readingMore = true;
process.nextTick(function() {
maybeReadMore_(stream, state);
});
}
}
function maybeReadMore_(stream, state) {
var len = state.length;
while (!state.reading && !state.flowing && !state.ended &&
state.length < state.highWaterMark) {
debug('maybeReadMore read 0');
stream.read(0);
if (len === state.length)
// didn't get any data, stop spinning.
break;
else
len = state.length;
}
state.readingMore = false;
}
// abstract method. to be overridden in specific implementation classes.
// call cb(er, data) where data is <= 0="" n="" in="" length.="" for="" virtual="" (non-string,="" non-buffer)="" streams,="" "length"="" is="" somewhat="" arbitrary,="" and="" perhaps="" not="" very="" meaningful.="" readable.prototype._read="function(n)" {="" this.emit('error',="" new="" error('not="" implemented'));="" };="" readable.prototype.pipe="function(dest," pipeopts)="" var="" src="this;" state="this._readableState;" switch="" (state.pipescount)="" case="" 0:="" state.pipes="dest;" break;="" 1:="" dest];="" default:="" state.pipes.push(dest);="" }="" state.pipescount="" +="1;" debug('pipe="" count="%d" opts="%j'," state.pipescount,="" pipeopts);="" doend="(!pipeOpts" ||="" pipeopts.end="" !="=" false)="" &&="" dest="" process.stdout="" process.stderr;="" endfn="doEnd" ?="" onend="" :="" cleanup;="" if="" (state.endemitted)="" process.nexttick(endfn);="" else="" src.once('end',="" endfn);="" dest.on('unpipe',="" onunpipe);="" function="" onunpipe(readable)="" debug('onunpipe');="" (readable="==" src)="" cleanup();="" onend()="" debug('onend');="" dest.end();="" when="" the="" drains,="" it="" reduces="" awaitdrain="" counter="" on="" source.="" this="" would="" be="" more="" elegant="" with="" a="" .once()="" handler="" flow(),="" but="" adding="" removing="" repeatedly="" too="" slow.="" ondrain="pipeOnDrain(src);" dest.on('drain',="" ondrain);="" cleanup()="" debug('cleanup');="" cleanup="" event="" handlers="" once="" pipe="" broken="" dest.removelistener('close',="" onclose);="" dest.removelistener('finish',="" onfinish);="" dest.removelistener('drain',="" dest.removelistener('error',="" onerror);="" dest.removelistener('unpipe',="" src.removelistener('end',="" onend);="" cleanup);="" src.removelistener('data',="" ondata);="" reader="" waiting="" drain="" from="" specific="" writer,="" then="" cause="" to="" never="" start="" flowing="" again.="" so,="" awaiting="" drain,="" we="" just="" call="" now.="" don't="" know,="" assume="" that="" are="" one.="" (state.awaitdrain="" (!dest._writablestate="" dest._writablestate.needdrain))="" ondrain();="" src.on('data',="" ondata(chunk)="" debug('ondata');="" ret="dest.write(chunk);" (false="==" ret)="" debug('false="" write="" response,="" pause',="" src._readablestate.awaitdrain);="" src._readablestate.awaitdrain++;="" src.pause();="" has="" an="" error,="" stop="" piping="" into="" it.="" however,="" suppress="" throwing="" behavior="" this.="" onerror(er)="" debug('onerror',="" er);="" unpipe();="" (ee.listenercount(dest,="" 'error')="==" 0)="" dest.emit('error',="" brutally="" ugly="" hack="" make="" sure="" our="" error="" attached="" before="" any="" userland="" ones.="" do="" (!dest._events="" !dest._events.error)="" dest.on('error',="" (isarray(dest._events.error))="" dest._events.error.unshift(onerror);="" dest._events.error="[onerror," dest._events.error];="" both="" close="" finish="" should="" trigger="" unpipe,="" only="" once.="" onclose()="" dest.once('close',="" onfinish()="" debug('onfinish');="" dest.once('finish',="" unpipe()="" debug('unpipe');="" src.unpipe(dest);="" tell="" it's="" being="" piped="" dest.emit('pipe',="" src);="" flow="" hasn't="" been="" started="" already.="" (!state.flowing)="" resume');="" src.resume();="" return="" dest;="" pipeondrain(src)="" function()="" debug('pipeondrain',="" state.awaitdrain);="" (state.awaitdrain)="" state.awaitdrain--;="" ee.listenercount(src,="" 'data'))="" state.flowing="true;" flow(src);="" readable.prototype.unpipe="function(dest)" we're="" anywhere,="" nothing.="" (state.pipescount="==" this;="" one="" destination.="" most="" common="" case.="" 1)="" passed="" one,="" right="" (dest="" state.pipes)="" (!dest)="" got="" match.="" (dest)="" dest.emit('unpipe',="" this);="" slow="" multiple destinations.="" remove="" all.="" dests="state.pipes;" len="state.pipesCount;" (var="" i="0;" <="" len;="" i++)="" dests[i].emit('unpipe',="" try="" find="" dest);="" (i="==" -1)="" state.pipes.splice(i,="" 1);="" -="1;" set="" up="" data="" events="" they="" asked="" ensure="" readable="" listeners="" eventually="" get="" something="" readable.prototype.on="function(ev," fn)="" res="Stream.prototype.on.call(this," ev,="" fn);="" listening="" data,="" explicitly="" paused,="" resume="" of="" next="" tick.="" (ev="==" 'data'="" false="" this._readablestate.flowing)="" this.resume();="" 'readable'="" this.readable)="" (!state.readablelistening)="" state.readablelistening="true;" state.emittedreadable="false;" state.needreadable="true;" (!state.reading)="" self="this;" process.nexttick(function()="" debug('readable="" nexttick="" read="" 0');="" self.read(0);="" });="" (state.length)="" emitreadable(this,="" state);="" res;="" readable.prototype.addlistener="Readable.prototype.on;" pause()="" resume()="" remnants="" legacy="" stream="" api="" user="" uses="" them,="" old="" mode.="" readable.prototype.resume="function()" debug('resume');="" debug('resume="" this.read(0);="" resume(this,="" resume(stream,="" state)="" (!state.resumescheduled)="" state.resumescheduled="true;" resume_(stream,="" stream.emit('resume');="" flow(stream);="" (state.flowing="" !state.reading)="" stream.read(0);="" readable.prototype.pause="function()" debug('call="" pause="" this._readablestate.flowing);="" debug('pause');="" this._readablestate.flowing="false;" this.emit('pause');="" flow(stream)="" debug('flow',="" state.flowing);="" (state.flowing)="" chunk="stream.read();" while="" (null="" wrap="" old-style="" as="" async *not*="" part="" interface.="" unfortunate="" mess="" history.="" readable.prototype.wrap="function(stream)" paused="false;" stream.on('end',="" debug('wrapped="" end');="" (state.decoder="" !state.ended)="" (chunk="" chunk.length)="" self.push(chunk);="" self.push(null);="" stream.on('data',="" function(chunk)="" data');="" (state.decoder)="" (!chunk="" !state.objectmode="" !chunk.length)="" return;="" (!ret)="" stream.pause();="" proxy="" all="" other="" methods.="" important="" wrapping="" filters="" duplexes.="" stream)="" (util.isfunction(stream[i])="" util.isundefined(this[i]))="" this[i]="function(method)" stream[method].apply(stream,="" arguments);="" }}(i);="" certain="" events.="" 'close',="" 'destroy',="" 'pause',="" 'resume'];="" foreach(events,="" function(ev)="" stream.on(ev,="" self.emit.bind(self,="" ev));="" consume="" some="" bytes,="" simply="" unpause="" underlying="" stream.="" self._read="function(n)" _read',="" n);="" (paused)="" stream.resume();="" self;="" exposed="" testing="" purposes="" only.="" readable._fromlist="fromList;" pluck="" off="" bytes="" array="" buffers.="" length="" combined="" lengths="" buffers="" list.="" fromlist(n,="" list="state.buffer;" stringmode="!!state.decoder;" objectmode="!!state.objectMode;" ret;="" nothing="" list,="" definitely="" empty.="" (list.length="==" null;="" (length="==" (objectmode)="" (!n="">= length) {
// read it all, truncate the array.
if (stringMode)
ret = list.join('');
else
ret = Buffer.concat(list, length);
list.length = 0;
} else {
// read just some of it.
if (n < list[0].length) {
// just take a part of the first list item.
// slice is the same for buffers and strings.
var buf = list[0];
ret = buf.slice(0, n);
list[0] = buf.slice(n);
} else if (n === list[0].length) {
// first list is a perfect match
ret = list.shift();
} else {
// complex case.
// we have enough to cover it, but it spans past the first buffer.
if (stringMode)
ret = '';
else
ret = new Buffer(n);
var c = 0;
for (var i = 0, l = list.length; i < l && c < n; i++) {
var buf = list[0];
var cpy = Math.min(n - c, buf.length);
if (stringMode)
ret += buf.slice(0, cpy);
else
buf.copy(ret, c, 0, cpy);
if (cpy < buf.length)
list[0] = buf.slice(cpy);
else
list.shift();
c += cpy;
}
}
}
return ret;
}
function endReadable(stream) {
var state = stream._readableState;
// If we get here before consuming all the bytes, then that is a
// bug in node. Should never happen.
if (state.length > 0)
throw new Error('endReadable called on non-empty stream');
if (!state.endEmitted) {
state.ended = true;
process.nextTick(function() {
// Check that we didn't get one last unshift.
if (!state.endEmitted && state.length === 0) {
state.endEmitted = true;
stream.readable = false;
stream.emit('end');
}
});
}
}
function forEach (xs, f) {
for (var i = 0, l = xs.length; i < l; i++) {
f(xs[i], i);
}
}
function indexOf (xs, x) {
for (var i = 0, l = xs.length; i < l; i++) {
if (xs[i] === x) return i;
}
return -1;
}
}).call(this,require('_process'))
},{"./_stream_duplex":254,"_process":104,"buffer":45,"core-util-is":150,"events":82,"inherits":204,"isarray":209,"stream":131,"string_decoder/":272,"util":19}],257:[function(require,module,exports){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// a transform stream is a readable/writable stream where you do
// something with the data. Sometimes it's called a "filter",
// but that's not a great name for it, since that implies a thing where
// some bits pass through, and others are simply ignored. (That would
// be a valid example of a transform, of course.)
//
// While the output is causally related to the input, it's not a
// necessarily symmetric or synchronous transformation. For example,
// a zlib stream might take multiple plain-text writes(), and then
// emit a single compressed chunk some time in the future.
//
// Here's how this works:
//
// The Transform stream has all the aspects of the readable and writable
// stream classes. When you write(chunk), that calls _write(chunk,cb)
// internally, and returns false if there's a lot of pending writes
// buffered up. When you call read(), that calls _read(n) until
// there's enough pending readable data buffered up.
//
// In a transform stream, the written data is placed in a buffer. When
// _read(n) is called, it transforms the queued up data, calling the
// buffered _write cb's as it consumes chunks. If consuming a single
// written chunk would result in multiple output chunks, then the first
// outputted bit calls the readcb, and subsequent chunks just go into
// the read buffer, and will cause it to emit 'readable' if necessary.
//
// This way, back-pressure is actually determined by the reading side,
// since _read has to be called to start processing a new chunk. However,
// a pathological inflate type of transform can cause excessive buffering
// here. For example, imagine a stream where every byte of input is
// interpreted as an integer from 0-255, and then results in that many
// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
// 1kb of data being output. In this case, you could write a very small
// amount of input, and end up with a very large amount of output. In
// such a pathological inflating mechanism, there'd be no way to tell
// the system to stop doing the transform. A single 4MB write could
// cause the system to run out of memory.
//
// However, even in such a pathological case, only a single written chunk
// would be consumed, and then the rest would wait (un-transformed) until
// the results of the previous transformed chunk were consumed.
module.exports = Transform;
var Duplex = require('./_stream_duplex');
/**/
var util = require('core-util-is');
util.inherits = require('inherits');
/**/
util.inherits(Transform, Duplex);
function TransformState(options, stream) {
this.afterTransform = function(er, data) {
return afterTransform(stream, er, data);
};
this.needTransform = false;
this.transforming = false;
this.writecb = null;
this.writechunk = null;
}
function afterTransform(stream, er, data) {
var ts = stream._transformState;
ts.transforming = false;
var cb = ts.writecb;
if (!cb)
return stream.emit('error', new Error('no writecb in Transform class'));
ts.writechunk = null;
ts.writecb = null;
if (!util.isNullOrUndefined(data))
stream.push(data);
if (cb)
cb(er);
var rs = stream._readableState;
rs.reading = false;
if (rs.needReadable || rs.length < rs.highWaterMark) {
stream._read(rs.highWaterMark);
}
}
function Transform(options) {
if (!(this instanceof Transform))
return new Transform(options);
Duplex.call(this, options);
this._transformState = new TransformState(options, this);
// when the writable side finishes, then flush out anything remaining.
var stream = this;
// start out asking for a readable event once data is transformed.
this._readableState.needReadable = true;
// we have implemented the _read method, and done the other things
// that Readable wants before the first _read call, so unset the
// sync guard flag.
this._readableState.sync = false;
this.once('prefinish', function() {
if (util.isFunction(this._flush))
this._flush(function(er) {
done(stream, er);
});
else
done(stream);
});
}
Transform.prototype.push = function(chunk, encoding) {
this._transformState.needTransform = false;
return Duplex.prototype.push.call(this, chunk, encoding);
};
// This is the part where you do stuff!
// override this function in implementation classes.
// 'chunk' is an input chunk.
//
// Call `push(newChunk)` to pass along transformed output
// to the readable side. You may call 'push' zero or more times.
//
// Call `cb(err)` when you are done with this chunk. If you pass
// an error, then that'll put the hurt on the whole operation. If you
// never call cb(), then you'll never get another chunk.
Transform.prototype._transform = function(chunk, encoding, cb) {
throw new Error('not implemented');
};
Transform.prototype._write = function(chunk, encoding, cb) {
var ts = this._transformState;
ts.writecb = cb;
ts.writechunk = chunk;
ts.writeencoding = encoding;
if (!ts.transforming) {
var rs = this._readableState;
if (ts.needTransform ||
rs.needReadable ||
rs.length < rs.highWaterMark)
this._read(rs.highWaterMark);
}
};
// Doesn't matter what the args are here.
// _transform does all the work.
// That we got here means that the readable side wants more data.
Transform.prototype._read = function(n) {
var ts = this._transformState;
if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
ts.transforming = true;
this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
} else {
// mark that we need a transform, so that any data that comes in
// will get processed, now that we've asked for it.
ts.needTransform = true;
}
};
function done(stream, er) {
if (er)
return stream.emit('error', er);
// if there's nothing in the write buffer, then that means
// that nothing more will ever be provided
var ws = stream._writableState;
var ts = stream._transformState;
if (ws.length)
throw new Error('calling transform done when ws.length != 0');
if (ts.transforming)
throw new Error('calling transform done when still transforming');
return stream.push(null);
}
},{"./_stream_duplex":254,"core-util-is":150,"inherits":204}],258:[function(require,module,exports){
(function (process){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// A bit simpler than readable streams.
// Implement an async ._write(chunk, cb), and it'll handle all
// the drain event emission and buffering.
module.exports = Writable;
/**/
var Buffer = require('buffer').Buffer;
/**/
Writable.WritableState = WritableState;
/**/
var util = require('core-util-is');
util.inherits = require('inherits');
/**/
var Stream = require('stream');
util.inherits(Writable, Stream);
function WriteReq(chunk, encoding, cb) {
this.chunk = chunk;
this.encoding = encoding;
this.callback = cb;
}
function WritableState(options, stream) {
var Duplex = require('./_stream_duplex');
options = options || {};
// the point at which write() starts returning false
// Note: 0 is a valid value, means that we always return false if
// the entire buffer is not flushed immediately on write()
var hwm = options.highWaterMark;
var defaultHwm = options.objectMode ? 16 : 16 * 1024;
this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
// object stream flag to indicate whether or not this stream
// contains buffers or objects.
this.objectMode = !!options.objectMode;
if (stream instanceof Duplex)
this.objectMode = this.objectMode || !!options.writableObjectMode;
// cast to ints.
this.highWaterMark = ~~this.highWaterMark;
this.needDrain = false;
// at the start of calling end()
this.ending = false;
// when end() has been called, and returned
this.ended = false;
// when 'finish' is emitted
this.finished = false;
// should we decode strings into buffers before passing to _write?
// this is here so that some node-core streams can optimize string
// handling at a lower level.
var noDecode = options.decodeStrings === false;
this.decodeStrings = !noDecode;
// Crypto is kind of old and crusty. Historically, its default string
// encoding is 'binary' so we have to make this configurable.
// Everything else in the universe uses 'utf8', though.
this.defaultEncoding = options.defaultEncoding || 'utf8';
// not an actual buffer we keep track of, but a measurement
// of how much we're waiting to get pushed to some underlying
// socket or file.
this.length = 0;
// a flag to see when we're in the middle of a write.
this.writing = false;
// when true all writes will be buffered until .uncork() call
this.corked = 0;
// a flag to be able to tell if the onwrite cb is called immediately,
// or on a later tick. We set this to true at first, because any
// actions that shouldn't happen until "later" should generally also
// not happen before the first write call.
this.sync = true;
// a flag to know if we're processing previously buffered items, which
// may call the _write() callback in the same tick, so that we don't
// end up in an overlapped onwrite situation.
this.bufferProcessing = false;
// the callback that's passed to _write(chunk,cb)
this.onwrite = function(er) {
onwrite(stream, er);
};
// the callback that the user supplies to write(chunk,encoding,cb)
this.writecb = null;
// the amount that is being written when _write is called.
this.writelen = 0;
this.buffer = [];
// number of pending user-supplied write callbacks
// this must be 0 before 'finish' can be emitted
this.pendingcb = 0;
// emit prefinish if the only thing we're waiting for is _write cbs
// This is relevant for synchronous Transform streams
this.prefinished = false;
// True if the error was already emitted and should not be thrown again
this.errorEmitted = false;
}
function Writable(options) {
var Duplex = require('./_stream_duplex');
// Writable ctor is applied to Duplexes, though they're not
// instanceof Writable, they're instanceof Readable.
if (!(this instanceof Writable) && !(this instanceof Duplex))
return new Writable(options);
this._writableState = new WritableState(options, this);
// legacy.
this.writable = true;
Stream.call(this);
}
// Otherwise people can pipe Writable streams, which is just wrong.
Writable.prototype.pipe = function() {
this.emit('error', new Error('Cannot pipe. Not readable.'));
};
function writeAfterEnd(stream, state, cb) {
var er = new Error('write after end');
// TODO: defer error events consistently everywhere, not just the cb
stream.emit('error', er);
process.nextTick(function() {
cb(er);
});
}
// If we get something that is not a buffer, string, null, or undefined,
// and we're not in objectMode, then that's an error.
// Otherwise stream chunks are all considered to be of length=1, and the
// watermarks determine how many objects to keep in the buffer, rather than
// how many bytes or characters.
function validChunk(stream, state, chunk, cb) {
var valid = true;
if (!util.isBuffer(chunk) &&
!util.isString(chunk) &&
!util.isNullOrUndefined(chunk) &&
!state.objectMode) {
var er = new TypeError('Invalid non-string/buffer chunk');
stream.emit('error', er);
process.nextTick(function() {
cb(er);
});
valid = false;
}
return valid;
}
Writable.prototype.write = function(chunk, encoding, cb) {
var state = this._writableState;
var ret = false;
if (util.isFunction(encoding)) {
cb = encoding;
encoding = null;
}
if (util.isBuffer(chunk))
encoding = 'buffer';
else if (!encoding)
encoding = state.defaultEncoding;
if (!util.isFunction(cb))
cb = function() {};
if (state.ended)
writeAfterEnd(this, state, cb);
else if (validChunk(this, state, chunk, cb)) {
state.pendingcb++;
ret = writeOrBuffer(this, state, chunk, encoding, cb);
}
return ret;
};
Writable.prototype.cork = function() {
var state = this._writableState;
state.corked++;
};
Writable.prototype.uncork = function() {
var state = this._writableState;
if (state.corked) {
state.corked--;
if (!state.writing &&
!state.corked &&
!state.finished &&
!state.bufferProcessing &&
state.buffer.length)
clearBuffer(this, state);
}
};
function decodeChunk(state, chunk, encoding) {
if (!state.objectMode &&
state.decodeStrings !== false &&
util.isString(chunk)) {
chunk = new Buffer(chunk, encoding);
}
return chunk;
}
// if we're already writing something, then just put this
// in the queue, and wait our turn. Otherwise, call _write
// If we return false, then we need a drain event, so set that flag.
function writeOrBuffer(stream, state, chunk, encoding, cb) {
chunk = decodeChunk(state, chunk, encoding);
if (util.isBuffer(chunk))
encoding = 'buffer';
var len = state.objectMode ? 1 : chunk.length;
state.length += len;
var ret = state.length < state.highWaterMark;
// we must ensure that previous needDrain will not be reset to false.
if (!ret)
state.needDrain = true;
if (state.writing || state.corked)
state.buffer.push(new WriteReq(chunk, encoding, cb));
else
doWrite(stream, state, false, len, chunk, encoding, cb);
return ret;
}
function doWrite(stream, state, writev, len, chunk, encoding, cb) {
state.writelen = len;
state.writecb = cb;
state.writing = true;
state.sync = true;
if (writev)
stream._writev(chunk, state.onwrite);
else
stream._write(chunk, encoding, state.onwrite);
state.sync = false;
}
function onwriteError(stream, state, sync, er, cb) {
if (sync)
process.nextTick(function() {
state.pendingcb--;
cb(er);
});
else {
state.pendingcb--;
cb(er);
}
stream._writableState.errorEmitted = true;
stream.emit('error', er);
}
function onwriteStateUpdate(state) {
state.writing = false;
state.writecb = null;
state.length -= state.writelen;
state.writelen = 0;
}
function onwrite(stream, er) {
var state = stream._writableState;
var sync = state.sync;
var cb = state.writecb;
onwriteStateUpdate(state);
if (er)
onwriteError(stream, state, sync, er, cb);
else {
// Check if we're actually ready to finish, but don't emit yet
var finished = needFinish(stream, state);
if (!finished &&
!state.corked &&
!state.bufferProcessing &&
state.buffer.length) {
clearBuffer(stream, state);
}
if (sync) {
process.nextTick(function() {
afterWrite(stream, state, finished, cb);
});
} else {
afterWrite(stream, state, finished, cb);
}
}
}
function afterWrite(stream, state, finished, cb) {
if (!finished)
onwriteDrain(stream, state);
state.pendingcb--;
cb();
finishMaybe(stream, state);
}
// Must force callback to be called on nextTick, so that we don't
// emit 'drain' before the write() consumer gets the 'false' return
// value, and has a chance to attach a 'drain' listener.
function onwriteDrain(stream, state) {
if (state.length === 0 && state.needDrain) {
state.needDrain = false;
stream.emit('drain');
}
}
// if there's something in the buffer waiting, then process it
function clearBuffer(stream, state) {
state.bufferProcessing = true;
if (stream._writev && state.buffer.length > 1) {
// Fast case, write everything using _writev()
var cbs = [];
for (var c = 0; c < state.buffer.length; c++)
cbs.push(state.buffer[c].callback);
// count the one we are adding, as well.
// TODO(isaacs) clean this up
state.pendingcb++;
doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
for (var i = 0; i < cbs.length; i++) {
state.pendingcb--;
cbs[i](err);
}
});
// Clear buffer
state.buffer = [];
} else {
// Slow case, write chunks one-by-one
for (var c = 0; c < state.buffer.length; c++) {
var entry = state.buffer[c];
var chunk = entry.chunk;
var encoding = entry.encoding;
var cb = entry.callback;
var len = state.objectMode ? 1 : chunk.length;
doWrite(stream, state, false, len, chunk, encoding, cb);
// if we didn't call the onwrite immediately, then
// it means that we need to wait until it does.
// also, that means that the chunk and cb are currently
// being processed, so move the buffer counter past them.
if (state.writing) {
c++;
break;
}
}
if (c < state.buffer.length)
state.buffer = state.buffer.slice(c);
else
state.buffer.length = 0;
}
state.bufferProcessing = false;
}
Writable.prototype._write = function(chunk, encoding, cb) {
cb(new Error('not implemented'));
};
Writable.prototype._writev = null;
Writable.prototype.end = function(chunk, encoding, cb) {
var state = this._writableState;
if (util.isFunction(chunk)) {
cb = chunk;
chunk = null;
encoding = null;
} else if (util.isFunction(encoding)) {
cb = encoding;
encoding = null;
}
if (!util.isNullOrUndefined(chunk))
this.write(chunk, encoding);
// .end() fully uncorks
if (state.corked) {
state.corked = 1;
this.uncork();
}
// ignore unnecessary end() calls.
if (!state.ending && !state.finished)
endWritable(this, state, cb);
};
function needFinish(stream, state) {
return (state.ending &&
state.length === 0 &&
!state.finished &&
!state.writing);
}
function prefinish(stream, state) {
if (!state.prefinished) {
state.prefinished = true;
stream.emit('prefinish');
}
}
function finishMaybe(stream, state) {
var need = needFinish(stream, state);
if (need) {
if (state.pendingcb === 0) {
prefinish(stream, state);
state.finished = true;
stream.emit('finish');
} else
prefinish(stream, state);
}
return need;
}
function endWritable(stream, state, cb) {
state.ending = true;
finishMaybe(stream, state);
if (cb) {
if (state.finished)
process.nextTick(cb);
else
stream.once('finish', cb);
}
state.ended = true;
}
}).call(this,require('_process'))
},{"./_stream_duplex":254,"_process":104,"buffer":45,"core-util-is":150,"inherits":204,"stream":131}],259:[function(require,module,exports){
exports = module.exports = require('./lib/_stream_readable.js');
exports.Stream = require('stream');
exports.Readable = exports;
exports.Writable = require('./lib/_stream_writable.js');
exports.Duplex = require('./lib/_stream_duplex.js');
exports.Transform = require('./lib/_stream_transform.js');
exports.PassThrough = require('./lib/_stream_passthrough.js');
},{"./lib/_stream_duplex.js":254,"./lib/_stream_passthrough.js":255,"./lib/_stream_readable.js":256,"./lib/_stream_transform.js":257,"./lib/_stream_writable.js":258,"stream":131}],260:[function(require,module,exports){
(function (Buffer){
// prototype class for hash functions
function Hash (blockSize, finalSize) {
this._block = new Buffer(blockSize)
this._finalSize = finalSize
this._blockSize = blockSize
this._len = 0
this._s = 0
}
Hash.prototype.update = function (data, enc) {
if (typeof data === 'string') {
enc = enc || 'utf8'
data = new Buffer(data, enc)
}
var l = this._len += data.length
var s = this._s || 0
var f = 0
var buffer = this._block
while (s < l) {
var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
var ch = (t - f)
for (var i = 0; i < ch; i++) {
buffer[(s % this._blockSize) + i] = data[i + f]
}
s += ch
f += ch
if ((s % this._blockSize) === 0) {
this._update(buffer)
}
}
this._s = s
return this
}
Hash.prototype.digest = function (enc) {
// Suppose the length of the message M, in bits, is l
var l = this._len * 8
// Append the bit 1 to the end of the message
this._block[this._len % this._blockSize] = 0x80
// and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
this._block.fill(0, this._len % this._blockSize + 1)
if (l % (this._blockSize * 8) >= this._finalSize * 8) {
this._update(this._block)
this._block.fill(0)
}
// to this append the block which is equal to the number l written in binary
// TODO: handle case where l is > Math.pow(2, 29)
this._block.writeInt32BE(l, this._blockSize - 4)
var hash = this._update(this._block) || this._hash()
return enc ? hash.toString(enc) : hash
}
Hash.prototype._update = function () {
throw new Error('_update must be implemented by subclass')
}
module.exports = Hash
}).call(this,require("buffer").Buffer)
},{"buffer":45}],261:[function(require,module,exports){
(function (Buffer){
/**
* A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
* in FIPS 180-2
* Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
*
*/
var inherits = require('inherits')
var Hash = require('./hash')
var K = [
0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
]
var W = new Array(64)
function Sha256 () {
this.init()
this._w = W // new Array(64)
Hash.call(this, 64, 56)
}
inherits(Sha256, Hash)
Sha256.prototype.init = function () {
this._a = 0x6a09e667 | 0
this._b = 0xbb67ae85 | 0
this._c = 0x3c6ef372 | 0
this._d = 0xa54ff53a | 0
this._e = 0x510e527f | 0
this._f = 0x9b05688c | 0
this._g = 0x1f83d9ab | 0
this._h = 0x5be0cd19 | 0
return this
}
function Ch (x, y, z) {
return z ^ (x & (y ^ z))
}
function Maj (x, y, z) {
return (x & y) | (z & (x | y))
}
function Sigma0 (x) {
return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
}
function Sigma1 (x) {
return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
}
function Gamma0 (x) {
return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
}
function Gamma1 (x) {
return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
}
Sha256.prototype._update = function (M) {
var W = this._w
var a = this._a | 0
var b = this._b | 0
var c = this._c | 0
var d = this._d | 0
var e = this._e | 0
var f = this._f | 0
var g = this._g | 0
var h = this._h | 0
var j = 0
function calcW () { return Gamma1(W[j - 2]) + W[j - 7] + Gamma0(W[j - 15]) + W[j - 16] }
function loop (w) {
W[j] = w
var T1 = h + Sigma1(e) + Ch(e, f, g) + K[j] + w
var T2 = Sigma0(a) + Maj(a, b, c)
h = g
g = f
f = e
e = d + T1
d = c
c = b
b = a
a = T1 + T2
j++
}
while (j < 16) loop(M.readInt32BE(j * 4))
while (j < 64) loop(calcW())
this._a = (a + this._a) | 0
this._b = (b + this._b) | 0
this._c = (c + this._c) | 0
this._d = (d + this._d) | 0
this._e = (e + this._e) | 0
this._f = (f + this._f) | 0
this._g = (g + this._g) | 0
this._h = (h + this._h) | 0
}
Sha256.prototype._hash = function () {
var H = new Buffer(32)
H.writeInt32BE(this._a, 0)
H.writeInt32BE(this._b, 4)
H.writeInt32BE(this._c, 8)
H.writeInt32BE(this._d, 12)
H.writeInt32BE(this._e, 16)
H.writeInt32BE(this._f, 20)
H.writeInt32BE(this._g, 24)
H.writeInt32BE(this._h, 28)
return H
}
module.exports = Sha256
}).call(this,require("buffer").Buffer)
},{"./hash":260,"buffer":45,"inherits":204}],262:[function(require,module,exports){
var ess = require('event-source-stream')
var nets = require('nets')
var pump = require('pump')
var through = require('through2')
var noop = function () {}
module.exports = function (app, urls) {
if (!app) throw new Error('app name required')
if (!urls || !urls.length) throw new Error('signalhub url(s) required')
var that = {}
if (!Array.isArray(urls)) urls = [urls]
urls = urls.map(function (url) {
url = url.replace(/\/$/, '')
return url.indexOf('://') === -1 ? 'http://' + url : url
})
that.subscribe = function (channel) {
var endpoint
if (Array.isArray(channel)) {
endpoint = channel.join(',')
} else {
endpoint = channel
}
var all = through.obj()
var streams = urls.map(function (url) {
return ess(url + '/v1/' + app + '/' + endpoint, {json: true})
})
if (streams.length === 1) return streams[0]
var all = through.obj()
all.setMaxListeners(0)
streams.forEach(function (stream) {
stream.on('open', function () {
all.emit('open')
})
pump(stream, all)
})
return all
}
var broadcast = function (url, channel, message, cb) {
nets({
method: 'POST',
json: message,
url: url + '/v1/' + app + '/' + channel
}, function (err, res) {
if (err) return cb(err)
if (res.statusCode !== 200) return cb(new Error('Bad status: ' + res.statusCode))
cb()
})
}
that.broadcast = function (channel, message, cb) {
if (!cb) cb = noop
var pending = urls.length
var errors = 0
urls.forEach(function (url) {
broadcast(url, channel, message, function (err) {
if (err) errors++
if (--pending) return
if (errors === urls.length) return cb(err)
cb()
})
})
}
return that
}
},{"event-source-stream":171,"nets":239,"pump":252,"through2":285}],263:[function(require,module,exports){
var varint = require('varint')
exports.encode = function encode (v, b, o) {
v = v >= 0 ? v*2 : v*-2 - 1
var r = varint.encode(v, b, o)
encode.bytes = varint.encode.bytes
return r
}
exports.decode = function decode (b, o) {
var v = varint.decode(b, o)
decode.bytes = varint.decode.bytes
return v & 1 ? (v+1) / -2 : v / 2
}
exports.encodingLength = function (v) {
return varint.encodingLength(v >= 0 ? v*2 : v*-2 - 1)
}
},{"varint":266}],264:[function(require,module,exports){
module.exports = read
var MSB = 0x80
, REST = 0x7F
function read(buf, offset) {
var res = 0
, offset = offset || 0
, shift = 0
, counter = offset
, b
, l = buf.length
do {
if(counter >= l) {
read.bytesRead = 0
return undefined
}
b = buf[counter++]
res += shift < 28
? (b & REST) << shift
: (b & REST) * Math.pow(2, shift)
shift += 7
} while (b >= MSB)
read.bytes = counter - offset
return res
}
},{}],265:[function(require,module,exports){
module.exports = encode
var MSB = 0x80
, REST = 0x7F
, MSBALL = ~REST
, INT = Math.pow(2, 31)
function encode(num, out, offset) {
out = out || []
offset = offset || 0
var oldOffset = offset
while(num >= INT) {
out[offset++] = (num & 0xFF) | MSB
num /= 128
}
while(num & MSBALL) {
out[offset++] = (num & 0xFF) | MSB
num >>>= 7
}
out[offset] = num | 0
encode.bytes = offset - oldOffset + 1
return out
}
},{}],266:[function(require,module,exports){
module.exports = {
encode: require('./encode.js')
, decode: require('./decode.js')
, encodingLength: require('./length.js')
}
},{"./decode.js":264,"./encode.js":265,"./length.js":267}],267:[function(require,module,exports){
var N1 = Math.pow(2, 7)
var N2 = Math.pow(2, 14)
var N3 = Math.pow(2, 21)
var N4 = Math.pow(2, 28)
var N5 = Math.pow(2, 35)
var N6 = Math.pow(2, 42)
var N7 = Math.pow(2, 49)
module.exports = function (value) {
return (
value < N1 ? 1
: value < N2 ? 2
: value < N3 ? 3
: value < N4 ? 4
: value < N5 ? 5
: value < N6 ? 6
: value < N7 ? 7
: 8
)
}
},{}],268:[function(require,module,exports){
(function (Buffer){
/* global Blob */
module.exports = Peer
var debug = require('debug')('simple-peer')
var getBrowserRTC = require('get-browser-rtc')
var hat = require('hat')
var inherits = require('inherits')
var isTypedArray = require('is-typedarray')
var once = require('once')
var stream = require('stream')
inherits(Peer, stream.Duplex)
/**
* WebRTC peer connection. Same API as node core `net.Socket`, plus a few extra methods.
* Duplex stream.
* @param {Object} opts
*/
function Peer (opts) {
var self = this
if (!(self instanceof Peer)) return new Peer(opts)
self._debug('new peer %o', opts)
if (!opts) opts = {}
opts.allowHalfOpen = false
if (opts.highWaterMark == null) opts.highWaterMark = 1024 * 1024
stream.Duplex.call(self, opts)
self.initiator = opts.initiator || false
self.channelConfig = opts.channelConfig || Peer.channelConfig
self.channelName = opts.initiator ? (opts.channelName || hat(160)) : null
self.config = opts.config || Peer.config
self.constraints = opts.constraints || Peer.constraints
self.offerConstraints = opts.offerConstraints
self.answerConstraints = opts.answerConstraints
self.reconnectTimer = opts.reconnectTimer || false
self.sdpTransform = opts.sdpTransform || function (sdp) { return sdp }
self.stream = opts.stream || false
self.trickle = opts.trickle !== undefined ? opts.trickle : true
self.destroyed = false
self.connected = false
// so Peer object always has same shape (V8 optimization)
self.remoteAddress = undefined
self.remoteFamily = undefined
self.remotePort = undefined
self.localAddress = undefined
self.localPort = undefined
self._isWrtc = !!opts.wrtc // HACK: to fix `wrtc` bug. See issue: #60
self._wrtc = opts.wrtc || getBrowserRTC()
if (!self._wrtc) {
if (typeof window === 'undefined') {
throw new Error('No WebRTC support: Specify `opts.wrtc` option in this environment')
} else {
throw new Error('No WebRTC support: Not a supported browser')
}
}
self._maxBufferedAmount = opts.highWaterMark
self._pcReady = false
self._channelReady = false
self._iceComplete = false // ice candidate trickle done (got null candidate)
self._channel = null
self._pendingCandidates = []
self._chunk = null
self._cb = null
self._interval = null
self._reconnectTimeout = null
self._pc = new (self._wrtc.RTCPeerConnection)(self.config, self.constraints)
self._pc.oniceconnectionstatechange = self._onIceConnectionStateChange.bind(self)
self._pc.onsignalingstatechange = self._onSignalingStateChange.bind(self)
self._pc.onicecandidate = self._onIceCandidate.bind(self)
if (self.stream) self._pc.addStream(self.stream)
self._pc.onaddstream = self._onAddStream.bind(self)
if (self.initiator) {
self._setupData({ channel: self._pc.createDataChannel(self.channelName, self.channelConfig) })
self._pc.onnegotiationneeded = once(self._createOffer.bind(self))
// Only Chrome triggers "negotiationneeded"; this is a workaround for other
// implementations
if (typeof window === 'undefined' || !window.webkitRTCPeerConnection) {
self._pc.onnegotiationneeded()
}
} else {
self._pc.ondatachannel = self._setupData.bind(self)
}
self.on('finish', function () {
if (self.connected) {
// When local peer is finished writing, close connection to remote peer.
// Half open connections are currently not supported.
// Wait a bit before destroying so the datachannel flushes.
// TODO: is there a more reliable way to accomplish this?
setTimeout(function () {
self._destroy()
}, 100)
} else {
// If data channel is not connected when local peer is finished writing, wait until
// data is flushed to network at "connect" event.
// TODO: is there a more reliable way to accomplish this?
self.once('connect', function () {
setTimeout(function () {
self._destroy()
}, 100)
})
}
})
}
Peer.WEBRTC_SUPPORT = !!getBrowserRTC()
/**
* Expose config, constraints, and data channel config for overriding all Peer
* instances. Otherwise, just set opts.config, opts.constraints, or opts.channelConfig
* when constructing a Peer.
*/
Peer.config = {
iceServers: [
{
url: 'stun:23.21.150.121', // deprecated, replaced by `urls`
urls: 'stun:23.21.150.121'
}
]
}
Peer.constraints = {}
Peer.channelConfig = {}
Object.defineProperty(Peer.prototype, 'bufferSize', {
get: function () {
var self = this
return (self._channel && self._channel.bufferedAmount) || 0
}
})
Peer.prototype.address = function () {
var self = this
return { port: self.localPort, family: 'IPv4', address: self.localAddress }
}
Peer.prototype.signal = function (data) {
var self = this
if (self.destroyed) throw new Error('cannot signal after peer is destroyed')
if (typeof data === 'string') {
try {
data = JSON.parse(data)
} catch (err) {
data = {}
}
}
self._debug('signal()')
function addIceCandidate (candidate) {
try {
self._pc.addIceCandidate(
new self._wrtc.RTCIceCandidate(candidate), noop, self._onError.bind(self)
)
} catch (err) {
self._destroy(new Error('error adding candidate: ' + err.message))
}
}
if (data.sdp) {
self._pc.setRemoteDescription(new (self._wrtc.RTCSessionDescription)(data), function () {
if (self.destroyed) return
if (self._pc.remoteDescription.type === 'offer') self._createAnswer()
self._pendingCandidates.forEach(addIceCandidate)
self._pendingCandidates = []
}, self._onError.bind(self))
}
if (data.candidate) {
if (self._pc.remoteDescription) addIceCandidate(data.candidate)
else self._pendingCandidates.push(data.candidate)
}
if (!data.sdp && !data.candidate) {
self._destroy(new Error('signal() called with invalid signal data'))
}
}
/**
* Send text/binary data to the remote peer.
* @param {TypedArrayView|ArrayBuffer|Buffer|string|Blob|Object} chunk
*/
Peer.prototype.send = function (chunk) {
var self = this
if (!isTypedArray.strict(chunk) && !(chunk instanceof ArrayBuffer) &&
!Buffer.isBuffer(chunk) && typeof chunk !== 'string' &&
(typeof Blob === 'undefined' || !(chunk instanceof Blob))) {
chunk = JSON.stringify(chunk)
}
// HACK: `wrtc` module doesn't accept node.js buffer. See issue: #60
if (Buffer.isBuffer(chunk) && self._isWrtc) {
chunk = new Uint8Array(chunk)
}
var len = chunk.length || chunk.byteLength || chunk.size
self._channel.send(chunk)
self._debug('write: %d bytes', len)
}
Peer.prototype.destroy = function (onclose) {
var self = this
self._destroy(null, onclose)
}
Peer.prototype._destroy = function (err, onclose) {
var self = this
if (self.destroyed) return
if (onclose) self.once('close', onclose)
self._debug('destroy (error: %s)', err && err.message)
self.readable = self.writable = false
if (!self._readableState.ended) self.push(null)
if (!self._writableState.finished) self.end()
self.destroyed = true
self.connected = false
self._pcReady = false
self._channelReady = false
self._chunk = null
self._cb = null
clearInterval(self._interval)
clearTimeout(self._reconnectTimeout)
if (self._pc) {
try {
self._pc.close()
} catch (err) {}
self._pc.oniceconnectionstatechange = null
self._pc.onsignalingstatechange = null
self._pc.onicecandidate = null
}
if (self._channel) {
try {
self._channel.close()
} catch (err) {}
self._channel.onmessage = null
self._channel.onopen = null
self._channel.onclose = null
}
self._pc = null
self._channel = null
if (err) self.emit('error', err)
self.emit('close')
}
Peer.prototype._setupData = function (event) {
var self = this
self._channel = event.channel
self.channelName = self._channel.label
self._channel.binaryType = 'arraybuffer'
self._channel.onmessage = self._onChannelMessage.bind(self)
self._channel.onopen = self._onChannelOpen.bind(self)
self._channel.onclose = self._onChannelClose.bind(self)
}
Peer.prototype._read = function () {}
Peer.prototype._write = function (chunk, encoding, cb) {
var self = this
if (self.destroyed) return cb(new Error('cannot write after peer is destroyed'))
if (self.connected) {
try {
self.send(chunk)
} catch (err) {
return self._onError(err)
}
if (self._channel.bufferedAmount > self._maxBufferedAmount) {
self._debug('start backpressure: bufferedAmount %d', self._channel.bufferedAmount)
self._cb = cb
} else {
cb(null)
}
} else {
self._debug('write before connect')
self._chunk = chunk
self._cb = cb
}
}
Peer.prototype._createOffer = function () {
var self = this
if (self.destroyed) return
self._pc.createOffer(function (offer) {
if (self.destroyed) return
offer.sdp = self.sdpTransform(offer.sdp)
self._pc.setLocalDescription(offer, noop, self._onError.bind(self))
var sendOffer = function () {
var signal = self._pc.localDescription || offer
self._debug('signal')
self.emit('signal', {
type: signal.type,
sdp: signal.sdp
})
}
if (self.trickle || self._iceComplete) sendOffer()
else self.once('_iceComplete', sendOffer) // wait for candidates
}, self._onError.bind(self), self.offerConstraints)
}
Peer.prototype._createAnswer = function () {
var self = this
if (self.destroyed) return
self._pc.createAnswer(function (answer) {
if (self.destroyed) return
answer.sdp = self.sdpTransform(answer.sdp)
self._pc.setLocalDescription(answer, noop, self._onError.bind(self))
var sendAnswer = function () {
var signal = self._pc.localDescription || answer
self._debug('signal')
self.emit('signal', {
type: signal.type,
sdp: signal.sdp
})
}
if (self.trickle || self._iceComplete) sendAnswer()
else self.once('_iceComplete', sendAnswer)
}, self._onError.bind(self), self.answerConstraints)
}
Peer.prototype._onIceConnectionStateChange = function () {
var self = this
if (self.destroyed) return
var iceGatheringState = self._pc.iceGatheringState
var iceConnectionState = self._pc.iceConnectionState
self._debug('iceConnectionStateChange %s %s', iceGatheringState, iceConnectionState)
self.emit('iceConnectionStateChange', iceGatheringState, iceConnectionState)
if (iceConnectionState === 'connected' || iceConnectionState === 'completed') {
clearTimeout(self._reconnectTimeout)
self._pcReady = true
self._maybeReady()
}
if (iceConnectionState === 'disconnected') {
if (self.reconnectTimer) {
// If user has set `opt.reconnectTimer`, allow time for ICE to attempt a reconnect
clearTimeout(self._reconnectTimeout)
self._reconnectTimeout = setTimeout(function () {
self._destroy()
}, self.reconnectTimer)
} else {
self._destroy()
}
}
if (iceConnectionState === 'failed') {
self._destroy()
}
if (iceConnectionState === 'closed') {
self._destroy()
}
}
Peer.prototype._maybeReady = function () {
var self = this
self._debug('maybeReady pc %s channel %s', self._pcReady, self._channelReady)
if (self.connected || self._connecting || !self._pcReady || !self._channelReady) return
self._connecting = true
if (!self._pc.getStats) {
onStats([])
} else if (typeof window !== 'undefined' && !!window.mozRTCPeerConnection) {
self._pc.getStats(null, function (res) {
var items = []
res.forEach(function (item) {
items.push(item)
})
onStats(items)
}, self._onError.bind(self))
} else {
self._pc.getStats(function (res) {
var items = []
res.result().forEach(function (result) {
var item = {}
result.names().forEach(function (name) {
item[name] = result.stat(name)
})
item.id = result.id
item.type = result.type
item.timestamp = result.timestamp
items.push(item)
})
onStats(items)
})
}
function onStats (items) {
items.forEach(function (item) {
if (item.type === 'remotecandidate' && item.candidateType === 'host') {
self.remoteAddress = item.ipAddress
self.remotePort = Number(item.portNumber)
self.remoteFamily = 'IPv4'
self._debug(
'connect remote: %s:%s (%s)',
self.remoteAddress, self.remotePort, self.remoteFamily
)
} else if (item.type === 'localcandidate' && item.candidateType === 'host') {
self.localAddress = item.ipAddress
self.localPort = Number(item.portNumber)
self._debug('connect local: %s:%s', self.localAddress, self.localPort)
}
})
self._connecting = false
self.connected = true
if (self._chunk) {
try {
self.send(self._chunk)
} catch (err) {
return self._onError(err)
}
self._chunk = null
self._debug('sent chunk from "write before connect"')
var cb = self._cb
self._cb = null
cb(null)
}
self._interval = setInterval(function () {
if (!self._cb || !self._channel || self._channel.bufferedAmount > self._maxBufferedAmount) return
self._debug('ending backpressure: bufferedAmount %d', self._channel.bufferedAmount)
var cb = self._cb
self._cb = null
cb(null)
}, 150)
if (self._interval.unref) self._interval.unref()
self._debug('connect')
self.emit('connect')
}
}
Peer.prototype._onSignalingStateChange = function () {
var self = this
if (self.destroyed) return
self._debug('signalingStateChange %s', self._pc.signalingState)
self.emit('signalingStateChange', self._pc.signalingState)
}
Peer.prototype._onIceCandidate = function (event) {
var self = this
if (self.destroyed) return
if (event.candidate && self.trickle) {
self.emit('signal', {
candidate: {
candidate: event.candidate.candidate,
sdpMLineIndex: event.candidate.sdpMLineIndex,
sdpMid: event.candidate.sdpMid
}
})
} else if (!event.candidate) {
self._iceComplete = true
self.emit('_iceComplete')
}
}
Peer.prototype._onChannelMessage = function (event) {
var self = this
if (self.destroyed) return
var data = event.data
self._debug('read: %d bytes', data.byteLength || data.length)
if (data instanceof ArrayBuffer) {
data = new Buffer(data)
self.push(data)
} else {
try {
data = JSON.parse(data)
} catch (err) {}
self.emit('data', data)
}
}
Peer.prototype._onChannelOpen = function () {
var self = this
if (self.connected || self.destroyed) return
self._debug('on channel open')
self._channelReady = true
self._maybeReady()
}
Peer.prototype._onChannelClose = function () {
var self = this
if (self.destroyed) return
self._debug('on channel close')
self._destroy()
}
Peer.prototype._onAddStream = function (event) {
var self = this
if (self.destroyed) return
self._debug('on add stream')
self.emit('stream', event.stream)
}
Peer.prototype._onError = function (err) {
var self = this
if (self.destroyed) return
self._debug('error %s', err.message || err)
self._destroy(err)
}
Peer.prototype._debug = function () {
var self = this
var args = [].slice.call(arguments)
var id = self.channelName && self.channelName.substring(0, 7)
args[0] = '[' + id + '] ' + args[0]
debug.apply(null, args)
}
function noop () {}
}).call(this,require("buffer").Buffer)
},{"buffer":45,"debug":152,"get-browser-rtc":184,"hat":187,"inherits":204,"is-typedarray":208,"once":240,"stream":131}],269:[function(require,module,exports){
(function (Buffer){
var sodium = require('libsodium-wrappers')
function I(b) {
return Buffer.isBuffer(b) ? new Uint8Array(b) : b
}
function B(b) {
return (b instanceof Uint8Array) ? new Buffer(b) : b
}
function bufferize(fn) {
if('function' !== typeof fn)
throw new Error('not a function')
return function () {
var args = [].map.call(arguments, I)
var r = B(fn.apply(this, args))
return r
}
}
function keys (k) {
return {
publicKey: B(k.publicKey),
secretKey: B(k.secretKey || k.privateKey)
}
}
exports.crypto_sign_seed_keypair = function (seed) {
return keys(sodium.crypto_sign_seed_keypair(I(seed)))
}
exports.crypto_sign_keypair = function () {
return keys(sodium.crypto_sign_keypair())
}
exports.crypto_box_keypair = function () {
return keys(sodium.crypto_box_keypair())
}
;[
'sign_verify_detached',
'sign_detached',
'sign',
'sign_open',
'sign_ed25519_pk_to_curve25519',
'sign_ed25519_sk_to_curve25519',
'scalarmult',
'secretbox_easy',
'secretbox_open_easy',
'box_easy',
'box_open_easy',
'auth',
'auth_verify',
'hash'
].forEach(function (name) {
if(name === 'auth_verify') {
//this is inconsistent with sign_verify!!
var fn = bufferize(sodium.crypto_auth_verify)
exports['crypto_'+name] = function (msg, tok, key) { return fn(msg, tok, key) ? 0 : 1 }
}
else
exports['crypto_'+name] = bufferize(sodium['crypto_'+name])
})
var Sha256 = require('sha.js/sha256')
exports.crypto_hash_sha256 = function (msg) {
return new Sha256().update(msg).digest()
}
function nullIfThrew (fn) {
return function () {
try { return fn.apply(this, [].slice.call(arguments)) }
catch (err) { return null }
}
}
exports.crypto_secretbox_open_easy = nullIfThrew(exports.crypto_secretbox_open_easy)
exports.crypto_box_open_easy = nullIfThrew(exports.crypto_box_open_easy)
}).call(this,require("buffer").Buffer)
},{"buffer":45,"libsodium-wrappers":231,"sha.js/sha256":261}],270:[function(require,module,exports){
var once = require('once')
module.exports = function(stream, cb) {
if (!cb) return stream
var list = []
cb = once(cb)
stream.on('data', function(data) {
list.push(data)
})
stream.on('end', function() {
cb(null, list)
})
stream.on('close', function() {
cb(new Error('Premature close'))
})
stream.on('error', cb)
return stream
}
},{"once":240}],271:[function(require,module,exports){
var nargs = /\{([0-9a-zA-Z]+)\}/g
var slice = Array.prototype.slice
module.exports = template
function template(string) {
var args
if (arguments.length === 2 && typeof arguments[1] === "object") {
args = arguments[1]
} else {
args = slice.call(arguments, 1)
}
if (!args || !args.hasOwnProperty) {
args = {}
}
return string.replace(nargs, function replaceArg(match, i, index) {
var result
if (string[index - 1] === "{" &&
string[index + match.length] === "}") {
return i
} else {
result = args.hasOwnProperty(i) ? args[i] : null
if (result === null || result === undefined) {
return ""
}
return result
}
})
}
},{}],272:[function(require,module,exports){
arguments[4][132][0].apply(exports,arguments)
},{"buffer":45,"dup":132}],273:[function(require,module,exports){
(function (Buffer){
var swarm = require('webrtc-swarm')
var signalhub = require('signalhub')
var hsodium = require('hyperlog-sodium')
var hyperlog = require('hyperlog')
var defined = require('defined')
var through = require('through2')
var pump = require('pump')
module.exports = function (opts) {
if (typeof opts === 'string') opts = { id: opts }
if (!opts) opts = {}
var keys = opts.keys || {}
var kopts = {
publicKey: normkey(defined(
opts.publicKey, opts.public, opts.pub, opts.identity, opts.id,
keys.publicKey, keys.public, keys.pub, keys.identity, keys.id
)),
secretKey: normkey(defined(
opts.secretKey, opts.secret, opts.private, opts.priv,
keys.secretKey, keys.secret, keys.private, keys.priv
))
}
var topic = kopts.publicKey.toString('hex')
var log = hyperlog(opts.db, hsodium(opts.sodium, kopts, opts))
var hub = signalhub('swarmlog.' + topic, opts.hubs)
var sw = swarm(hub, opts)
var peerStream = opts.peerStream || function (peer) { return peer }
sw.on('peer', function (peer, id) {
var stream = peerStream(peer)
pump(stream, toBuffer(), log.replicate({ live: true }), stream)
})
return log
}
function normkey (id) {
if (/\.ed25519$/.test(id)) {
var b64 = id.replace(/\.ed25519$/,'').replace(/^@/,'')
return Buffer(b64,'base64')
} else if (Buffer.isBuffer(id)) {
return id
} else if (id) return Buffer(id, 'hex')
}
function toBuffer () {
return through.obj(function (buf, enc, next) {
next(null, Buffer.isBuffer(buf) ? buf : Buffer(buf))
})
}
}).call(this,require("buffer").Buffer)
},{"buffer":45,"defined":156,"hyperlog":189,"hyperlog-sodium":188,"pump":252,"signalhub":262,"through2":279,"webrtc-swarm":319}],274:[function(require,module,exports){
arguments[4][113][0].apply(exports,arguments)
},{"./_stream_readable":275,"./_stream_writable":277,"core-util-is":150,"dup":113,"inherits":204,"process-nextick-args":243}],275:[function(require,module,exports){
(function (process){
'use strict';
module.exports = Readable;
/**/
var processNextTick = require('process-nextick-args');
/**/
/**/
var isArray = require('isarray');
/**/
/**/
var Buffer = require('buffer').Buffer;
/**/
Readable.ReadableState = ReadableState;
var EE = require('events');
/**/
var EElistenerCount = function(emitter, type) {
return emitter.listeners(type).length;
};
/**/
/**/
var Stream;
(function (){try{
Stream = require('st' + 'ream');
}catch(_){}finally{
if (!Stream)
Stream = require('events').EventEmitter;
}}())
/**/
var Buffer = require('buffer').Buffer;
/**/
var util = require('core-util-is');
util.inherits = require('inherits');
/**/
/**/
var debugUtil = require('util');
var debug;
if (debugUtil && debugUtil.debuglog) {
debug = debugUtil.debuglog('stream');
} else {
debug = function () {};
}
/**/
var StringDecoder;
util.inherits(Readable, Stream);
var Duplex;
function ReadableState(options, stream) {
Duplex = Duplex || require('./_stream_duplex');
options = options || {};
// object stream flag. Used to make read(n) ignore n and to
// make all the buffer merging and length checks go away
this.objectMode = !!options.objectMode;
if (stream instanceof Duplex)
this.objectMode = this.objectMode || !!options.readableObjectMode;
// the point at which it stops calling _read() to fill the buffer
// Note: 0 is a valid value, means "don't call _read preemptively ever"
var hwm = options.highWaterMark;
var defaultHwm = this.objectMode ? 16 : 16 * 1024;
this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
// cast to ints.
this.highWaterMark = ~~this.highWaterMark;
this.buffer = [];
this.length = 0;
this.pipes = null;
this.pipesCount = 0;
this.flowing = null;
this.ended = false;
this.endEmitted = false;
this.reading = false;
// a flag to be able to tell if the onwrite cb is called immediately,
// or on a later tick. We set this to true at first, because any
// actions that shouldn't happen until "later" should generally also
// not happen before the first write call.
this.sync = true;
// whenever we return null, then we set a flag to say
// that we're awaiting a 'readable' event emission.
this.needReadable = false;
this.emittedReadable = false;
this.readableListening = false;
// Crypto is kind of old and crusty. Historically, its default string
// encoding is 'binary' so we have to make this configurable.
// Everything else in the universe uses 'utf8', though.
this.defaultEncoding = options.defaultEncoding || 'utf8';
// when piping, we only care about 'readable' events that happen
// after read()ing all the bytes and not getting any pushback.
this.ranOut = false;
// the number of writers that are awaiting a drain event in .pipe()s
this.awaitDrain = 0;
// if true, a maybeReadMore has been scheduled
this.readingMore = false;
this.decoder = null;
this.encoding = null;
if (options.encoding) {
if (!StringDecoder)
StringDecoder = require('string_decoder/').StringDecoder;
this.decoder = new StringDecoder(options.encoding);
this.encoding = options.encoding;
}
}
var Duplex;
function Readable(options) {
Duplex = Duplex || require('./_stream_duplex');
if (!(this instanceof Readable))
return new Readable(options);
this._readableState = new ReadableState(options, this);
// legacy
this.readable = true;
if (options && typeof options.read === 'function')
this._read = options.read;
Stream.call(this);
}
// Manually shove something into the read() buffer.
// This returns true if the highWaterMark has not been hit yet,
// similar to how Writable.write() returns true if you should
// write() some more.
Readable.prototype.push = function(chunk, encoding) {
var state = this._readableState;
if (!state.objectMode && typeof chunk === 'string') {
encoding = encoding || state.defaultEncoding;
if (encoding !== state.encoding) {
chunk = new Buffer(chunk, encoding);
encoding = '';
}
}
return readableAddChunk(this, state, chunk, encoding, false);
};
// Unshift should *always* be something directly out of read()
Readable.prototype.unshift = function(chunk) {
var state = this._readableState;
return readableAddChunk(this, state, chunk, '', true);
};
Readable.prototype.isPaused = function() {
return this._readableState.flowing === false;
};
function readableAddChunk(stream, state, chunk, encoding, addToFront) {
var er = chunkInvalid(state, chunk);
if (er) {
stream.emit('error', er);
} else if (chunk === null) {
state.reading = false;
onEofChunk(stream, state);
} else if (state.objectMode || chunk && chunk.length > 0) {
if (state.ended && !addToFront) {
var e = new Error('stream.push() after EOF');
stream.emit('error', e);
} else if (state.endEmitted && addToFront) {
var e = new Error('stream.unshift() after end event');
stream.emit('error', e);
} else {
if (state.decoder && !addToFront && !encoding)
chunk = state.decoder.write(chunk);
if (!addToFront)
state.reading = false;
// if we want the data now, just emit it.
if (state.flowing && state.length === 0 && !state.sync) {
stream.emit('data', chunk);
stream.read(0);
} else {
// update the buffer info.
state.length += state.objectMode ? 1 : chunk.length;
if (addToFront)
state.buffer.unshift(chunk);
else
state.buffer.push(chunk);
if (state.needReadable)
emitReadable(stream);
}
maybeReadMore(stream, state);
}
} else if (!addToFront) {
state.reading = false;
}
return needMoreData(state);
}
// if it's past the high water mark, we can push in some more.
// Also, if we have no data yet, we can stand some
// more bytes. This is to work around cases where hwm=0,
// such as the repl. Also, if the push() triggered a
// readable event, and the user called read(largeNumber) such that
// needReadable was set, then we ought to push more, so that another
// 'readable' event will be triggered.
function needMoreData(state) {
return !state.ended &&
(state.needReadable ||
state.length < state.highWaterMark ||
state.length === 0);
}
// backwards compatibility.
Readable.prototype.setEncoding = function(enc) {
if (!StringDecoder)
StringDecoder = require('string_decoder/').StringDecoder;
this._readableState.decoder = new StringDecoder(enc);
this._readableState.encoding = enc;
return this;
};
// Don't raise the hwm > 8MB
var MAX_HWM = 0x800000;
function computeNewHighWaterMark(n) {
if (n >= MAX_HWM) {
n = MAX_HWM;
} else {
// Get the next highest power of 2
n--;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
n++;
}
return n;
}
function howMuchToRead(n, state) {
if (state.length === 0 && state.ended)
return 0;
if (state.objectMode)
return n === 0 ? 0 : 1;
if (n === null || isNaN(n)) {
// only flow one buffer at a time
if (state.flowing && state.buffer.length)
return state.buffer[0].length;
else
return state.length;
}
if (n <= 0)="" return="" 0;="" if="" we're="" asking="" for="" more="" than="" the="" target="" buffer="" level,="" then="" raise="" water="" mark.="" bump="" up="" to="" next="" highest="" power="" of="" 2,="" prevent="" increasing="" it="" excessively="" in="" tiny="" amounts.="" (n=""> state.highWaterMark)
state.highWaterMark = computeNewHighWaterMark(n);
// don't have that much. return null, unless we've ended.
if (n > state.length) {
if (!state.ended) {
state.needReadable = true;
return 0;
} else {
return state.length;
}
}
return n;
}
// you can override either this method, or the async _read(n) below.
Readable.prototype.read = function(n) {
debug('read', n);
var state = this._readableState;
var nOrig = n;
if (typeof n !== 'number' || n > 0)
state.emittedReadable = false;
// if we're doing read(0) to trigger a readable event, but we
// already have a bunch of data in the buffer, then just trigger
// the 'readable' event and move on.
if (n === 0 &&
state.needReadable &&
(state.length >= state.highWaterMark || state.ended)) {
debug('read: emitReadable', state.length, state.ended);
if (state.length === 0 && state.ended)
endReadable(this);
else
emitReadable(this);
return null;
}
n = howMuchToRead(n, state);
// if we've ended, and we're now clear, then finish it up.
if (n === 0 && state.ended) {
if (state.length === 0)
endReadable(this);
return null;
}
// All the actual chunk generation logic needs to be
// *below* the call to _read. The reason is that in certain
// synthetic stream cases, such as passthrough streams, _read
// may be a completely synchronous operation which may change
// the state of the read buffer, providing enough data when
// before there was *not* enough.
//
// So, the steps are:
// 1. Figure out what the state of things will be after we do
// a read from the buffer.
//
// 2. If that resulting state will trigger a _read, then call _read.
// Note that this may be asynchronous, or synchronous. Yes, it is
// deeply ugly to write APIs this way, but that still doesn't mean
// that the Readable class should behave improperly, as streams are
// designed to be sync/async agnostic.
// Take note if the _read call is sync or async (ie, if the read call
// has returned yet), so that we know whether or not it's safe to emit
// 'readable' etc.
//
// 3. Actually pull the requested chunks out of the buffer and return.
// if we need a readable event, then we need to do some reading.
var doRead = state.needReadable;
debug('need readable', doRead);
// if we currently have less than the highWaterMark, then also read some
if (state.length === 0 || state.length - n < state.highWaterMark) {
doRead = true;
debug('length less than watermark', doRead);
}
// however, if we've ended, then there's no point, and if we're already
// reading, then it's unnecessary.
if (state.ended || state.reading) {
doRead = false;
debug('reading or ended', doRead);
}
if (doRead) {
debug('do read');
state.reading = true;
state.sync = true;
// if the length is currently zero, then we *need* a readable event.
if (state.length === 0)
state.needReadable = true;
// call internal read method
this._read(state.highWaterMark);
state.sync = false;
}
// If _read pushed data synchronously, then `reading` will be false,
// and we need to re-evaluate how much data we can return to the user.
if (doRead && !state.reading)
n = howMuchToRead(nOrig, state);
var ret;
if (n > 0)
ret = fromList(n, state);
else
ret = null;
if (ret === null) {
state.needReadable = true;
n = 0;
}
state.length -= n;
// If we have nothing in the buffer, then we want to know
// as soon as we *do* get something into the buffer.
if (state.length === 0 && !state.ended)
state.needReadable = true;
// If we tried to read() past the EOF, then emit end on the next tick.
if (nOrig !== n && state.ended && state.length === 0)
endReadable(this);
if (ret !== null)
this.emit('data', ret);
return ret;
};
function chunkInvalid(state, chunk) {
var er = null;
if (!(Buffer.isBuffer(chunk)) &&
typeof chunk !== 'string' &&
chunk !== null &&
chunk !== undefined &&
!state.objectMode) {
er = new TypeError('Invalid non-string/buffer chunk');
}
return er;
}
function onEofChunk(stream, state) {
if (state.ended) return;
if (state.decoder) {
var chunk = state.decoder.end();
if (chunk && chunk.length) {
state.buffer.push(chunk);
state.length += state.objectMode ? 1 : chunk.length;
}
}
state.ended = true;
// emit 'readable' now to make sure it gets picked up.
emitReadable(stream);
}
// Don't emit readable right away in sync mode, because this can trigger
// another read() call => stack overflow. This way, it might trigger
// a nextTick recursion warning, but that's not so bad.
function emitReadable(stream) {
var state = stream._readableState;
state.needReadable = false;
if (!state.emittedReadable) {
debug('emitReadable', state.flowing);
state.emittedReadable = true;
if (state.sync)
processNextTick(emitReadable_, stream);
else
emitReadable_(stream);
}
}
function emitReadable_(stream) {
debug('emit readable');
stream.emit('readable');
flow(stream);
}
// at this point, the user has presumably seen the 'readable' event,
// and called read() to consume some data. that may have triggered
// in turn another _read(n) call, in which case reading = true if
// it's in progress.
// However, if we're not ended, or reading, and the length < hwm,
// then go ahead and try to read some more preemptively.
function maybeReadMore(stream, state) {
if (!state.readingMore) {
state.readingMore = true;
processNextTick(maybeReadMore_, stream, state);
}
}
function maybeReadMore_(stream, state) {
var len = state.length;
while (!state.reading && !state.flowing && !state.ended &&
state.length < state.highWaterMark) {
debug('maybeReadMore read 0');
stream.read(0);
if (len === state.length)
// didn't get any data, stop spinning.
break;
else
len = state.length;
}
state.readingMore = false;
}
// abstract method. to be overridden in specific implementation classes.
// call cb(er, data) where data is <= 0="" 1="" n="" in="" length.="" for="" virtual="" (non-string,="" non-buffer)="" streams,="" "length"="" is="" somewhat="" arbitrary,="" and="" perhaps="" not="" very="" meaningful.="" readable.prototype._read="function(n)" {="" this.emit('error',="" new="" error('not="" implemented'));="" };="" readable.prototype.pipe="function(dest," pipeopts)="" var="" src="this;" state="this._readableState;" switch="" (state.pipescount)="" case="" 0:="" state.pipes="dest;" break;="" 1:="" dest];="" default:="" state.pipes.push(dest);="" }="" state.pipescount="" +="1;" debug('pipe="" count="%d" opts="%j'," state.pipescount,="" pipeopts);="" doend="(!pipeOpts" ||="" pipeopts.end="" !="=" false)="" &&="" dest="" process.stdout="" process.stderr;="" endfn="doEnd" ?="" onend="" :="" cleanup;="" if="" (state.endemitted)="" processnexttick(endfn);="" else="" src.once('end',="" endfn);="" dest.on('unpipe',="" onunpipe);="" function="" onunpipe(readable)="" debug('onunpipe');="" (readable="==" src)="" cleanup();="" onend()="" debug('onend');="" dest.end();="" when="" the="" drains,="" it="" reduces="" awaitdrain="" counter="" on="" source.="" this="" would="" be="" more="" elegant="" with="" a="" .once()="" handler="" flow(),="" but="" adding="" removing="" repeatedly="" too="" slow.="" ondrain="pipeOnDrain(src);" dest.on('drain',="" ondrain);="" cleanedup="false;" cleanup()="" debug('cleanup');="" cleanup="" event="" handlers="" once="" pipe="" broken="" dest.removelistener('close',="" onclose);="" dest.removelistener('finish',="" onfinish);="" dest.removelistener('drain',="" dest.removelistener('error',="" onerror);="" dest.removelistener('unpipe',="" src.removelistener('end',="" onend);="" cleanup);="" src.removelistener('data',="" ondata);="" reader="" waiting="" drain="" from="" specific="" writer,="" then="" cause="" to="" never="" start="" flowing="" again.="" so,="" awaiting="" drain,="" we="" just="" call="" now.="" don't="" know,="" assume="" that="" are="" one.="" (state.awaitdrain="" (!dest._writablestate="" dest._writablestate.needdrain))="" ondrain();="" src.on('data',="" ondata(chunk)="" debug('ondata');="" ret="dest.write(chunk);" (false="==" ret)="" user="" unpiped="" during="" `dest.write()`,="" possible="" get="" stuck="" permanently="" paused="" write="" also="" returned="" false.="" (state.pipescount="==" state.pipes[0]="==" src.listenercount('data')="==" !cleanedup)="" debug('false="" response,="" pause',="" src._readablestate.awaitdrain);="" src._readablestate.awaitdrain++;="" src.pause();="" has="" an="" error,="" stop="" piping="" into="" it.="" however,="" suppress="" throwing="" behavior="" this.="" onerror(er)="" debug('onerror',="" er);="" unpipe();="" (eelistenercount(dest,="" 'error')="==" 0)="" dest.emit('error',="" brutally="" ugly="" hack="" make="" sure="" our="" error="" attached="" before="" any="" userland="" ones.="" do="" (!dest._events="" !dest._events.error)="" dest.on('error',="" (isarray(dest._events.error))="" dest._events.error.unshift(onerror);="" dest._events.error="[onerror," dest._events.error];="" both="" close="" finish="" should="" trigger="" unpipe,="" only="" once.="" onclose()="" dest.once('close',="" onfinish()="" debug('onfinish');="" dest.once('finish',="" unpipe()="" debug('unpipe');="" src.unpipe(dest);="" tell="" it's="" being="" piped="" dest.emit('pipe',="" src);="" flow="" hasn't="" been="" started="" already.="" (!state.flowing)="" resume');="" src.resume();="" return="" dest;="" pipeondrain(src)="" function()="" debug('pipeondrain',="" state.awaitdrain);="" (state.awaitdrain)="" state.awaitdrain--;="" eelistenercount(src,="" 'data'))="" state.flowing="true;" flow(src);="" readable.prototype.unpipe="function(dest)" we're="" anywhere,="" nothing.="" this;="" one="" destination.="" most="" common="" case.="" 1)="" passed="" one,="" right="" (dest="" state.pipes)="" (!dest)="" got="" match.="" (dest)="" dest.emit('unpipe',="" this);="" slow="" multiple destinations.="" remove="" all.="" dests="state.pipes;" len="state.pipesCount;" (var="" i="0;" <="" len;="" i++)="" dests[i].emit('unpipe',="" try="" find="" dest);="" (i="==" -1)="" state.pipes.splice(i,="" 1);="" -="1;" set="" up="" data="" events="" they="" asked="" ensure="" readable="" listeners="" eventually="" something="" readable.prototype.on="function(ev," fn)="" res="Stream.prototype.on.call(this," ev,="" fn);="" listening="" data,="" explicitly="" paused,="" resume="" of="" next="" tick.="" (ev="==" 'data'="" false="" this._readablestate.flowing)="" this.resume();="" 'readable'="" this.readable)="" (!state.readablelistening)="" state.readablelistening="true;" state.emittedreadable="false;" state.needreadable="true;" (!state.reading)="" processnexttick(nreadingnexttick,="" (state.length)="" emitreadable(this,="" state);="" res;="" readable.prototype.addlistener="Readable.prototype.on;" nreadingnexttick(self)="" debug('readable="" nexttick="" read="" 0');="" self.read(0);="" pause()="" resume()="" remnants="" legacy="" stream="" api="" uses="" them,="" old="" mode.="" readable.prototype.resume="function()" debug('resume');="" resume(this,="" resume(stream,="" state)="" (!state.resumescheduled)="" state.resumescheduled="true;" processnexttick(resume_,="" stream,="" resume_(stream,="" debug('resume="" stream.read(0);="" stream.emit('resume');="" flow(stream);="" (state.flowing="" !state.reading)="" readable.prototype.pause="function()" debug('call="" pause="" this._readablestate.flowing);="" debug('pause');="" this._readablestate.flowing="false;" this.emit('pause');="" flow(stream)="" debug('flow',="" state.flowing);="" (state.flowing)="" chunk="stream.read();" while="" (null="" wrap="" old-style="" as="" async *not*="" part="" interface.="" unfortunate="" mess="" history.="" readable.prototype.wrap="function(stream)" self="this;" stream.on('end',="" debug('wrapped="" end');="" (state.decoder="" !state.ended)="" (chunk="" chunk.length)="" self.push(chunk);="" self.push(null);="" });="" stream.on('data',="" function(chunk)="" data');="" (state.decoder)="" skip="" over="" falsy="" values="" objectmode="" (state.objectmode="" null="" undefined))="" return;="" (!state.objectmode="" (!chunk="" !chunk.length))="" (!ret)="" stream.pause();="" proxy="" all="" other="" methods.="" important="" wrapping="" filters="" duplexes.="" stream)="" (this[i]="==" undefined="" typeof="" stream[i]="==" 'function')="" this[i]="function(method)" stream[method].apply(stream,="" arguments);="" }(i);="" certain="" events.="" 'close',="" 'destroy',="" 'pause',="" 'resume'];="" foreach(events,="" function(ev)="" stream.on(ev,="" self.emit.bind(self,="" ev));="" consume="" some="" bytes,="" simply="" unpause="" underlying="" stream.="" self._read="function(n)" _read',="" n);="" (paused)="" stream.resume();="" self;="" exposed="" testing="" purposes="" only.="" readable._fromlist="fromList;" pluck="" off="" bytes="" array="" buffers.="" length="" combined="" lengths="" buffers="" list.="" fromlist(n,="" list="state.buffer;" stringmode="!!state.decoder;" ret;="" nothing="" list,="" definitely="" empty.="" (list.length="==" null;="" (length="==" (objectmode)="" (!n="">= length) {
// read it all, truncate the array.
if (stringMode)
ret = list.join('');
else if (list.length === 1)
ret = list[0];
else
ret = Buffer.concat(list, length);
list.length = 0;
} else {
// read just some of it.
if (n < list[0].length) {
// just take a part of the first list item.
// slice is the same for buffers and strings.
var buf = list[0];
ret = buf.slice(0, n);
list[0] = buf.slice(n);
} else if (n === list[0].length) {
// first list is a perfect match
ret = list.shift();
} else {
// complex case.
// we have enough to cover it, but it spans past the first buffer.
if (stringMode)
ret = '';
else
ret = new Buffer(n);
var c = 0;
for (var i = 0, l = list.length; i < l && c < n; i++) {
var buf = list[0];
var cpy = Math.min(n - c, buf.length);
if (stringMode)
ret += buf.slice(0, cpy);
else
buf.copy(ret, c, 0, cpy);
if (cpy < buf.length)
list[0] = buf.slice(cpy);
else
list.shift();
c += cpy;
}
}
}
return ret;
}
function endReadable(stream) {
var state = stream._readableState;
// If we get here before consuming all the bytes, then that is a
// bug in node. Should never happen.
if (state.length > 0)
throw new Error('endReadable called on non-empty stream');
if (!state.endEmitted) {
state.ended = true;
processNextTick(endReadableNT, state, stream);
}
}
function endReadableNT(state, stream) {
// Check that we didn't get one last unshift.
if (!state.endEmitted && state.length === 0) {
state.endEmitted = true;
stream.readable = false;
stream.emit('end');
}
}
function forEach (xs, f) {
for (var i = 0, l = xs.length; i < l; i++) {
f(xs[i], i);
}
}
function indexOf (xs, x) {
for (var i = 0, l = xs.length; i < l; i++) {
if (xs[i] === x) return i;
}
return -1;
}
}).call(this,require('_process'))
},{"./_stream_duplex":274,"_process":104,"buffer":45,"core-util-is":150,"events":82,"inherits":204,"isarray":209,"process-nextick-args":243,"string_decoder/":272,"util":19}],276:[function(require,module,exports){
arguments[4][116][0].apply(exports,arguments)
},{"./_stream_duplex":274,"core-util-is":150,"dup":116,"inherits":204}],277:[function(require,module,exports){
arguments[4][117][0].apply(exports,arguments)
},{"./_stream_duplex":274,"buffer":45,"core-util-is":150,"dup":117,"events":82,"inherits":204,"process-nextick-args":243,"util-deprecate":287}],278:[function(require,module,exports){
arguments[4][120][0].apply(exports,arguments)
},{"./lib/_stream_transform.js":276,"dup":120}],279:[function(require,module,exports){
(function (process){
var Transform = require('readable-stream/transform')
, inherits = require('util').inherits
, xtend = require('xtend')
function DestroyableTransform(opts) {
Transform.call(this, opts)
this._destroyed = false
}
inherits(DestroyableTransform, Transform)
DestroyableTransform.prototype.destroy = function(err) {
if (this._destroyed) return
this._destroyed = true
var self = this
process.nextTick(function() {
if (err)
self.emit('error', err)
self.emit('close')
})
}
// a noop _transform function
function noop (chunk, enc, callback) {
callback(null, chunk)
}
// create a new export function, used by both the main export and
// the .ctor export, contains common logic for dealing with arguments
function through2 (construct) {
return function (options, transform, flush) {
if (typeof options == 'function') {
flush = transform
transform = options
options = {}
}
if (typeof transform != 'function')
transform = noop
if (typeof flush != 'function')
flush = null
return construct(options, transform, flush)
}
}
// main export, just make me a transform stream!
module.exports = through2(function (options, transform, flush) {
var t2 = new DestroyableTransform(options)
t2._transform = transform
if (flush)
t2._flush = flush
return t2
})
// make me a reusable prototype that I can `new`, or implicitly `new`
// with a constructor call
module.exports.ctor = through2(function (options, transform, flush) {
function Through2 (override) {
if (!(this instanceof Through2))
return new Through2(override)
this.options = xtend(options, override)
DestroyableTransform.call(this, this.options)
}
inherits(Through2, DestroyableTransform)
Through2.prototype._transform = transform
if (flush)
Through2.prototype._flush = flush
return Through2
})
module.exports.obj = through2(function (options, transform, flush) {
var t2 = new DestroyableTransform(xtend({ objectMode: true, highWaterMark: 16 }, options))
t2._transform = transform
if (flush)
t2._flush = flush
return t2
})
}).call(this,require('_process'))
},{"_process":104,"readable-stream/transform":278,"util":135,"xtend":330}],280:[function(require,module,exports){
(function (process){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// a duplex stream is just a stream that is both readable and writable.
// Since JS doesn't have multiple prototypal inheritance, this class
// prototypally inherits from Readable, and then parasitically from
// Writable.
module.exports = Duplex;
/**/
var objectKeys = Object.keys || function (obj) {
var keys = [];
for (var key in obj) keys.push(key);
return keys;
}
/**/
/**/
var util = require('core-util-is');
util.inherits = require('inherits');
/**/
var Readable = require('./_stream_readable');
var Writable = require('./_stream_writable');
util.inherits(Duplex, Readable);
forEach(objectKeys(Writable.prototype), function(method) {
if (!Duplex.prototype[method])
Duplex.prototype[method] = Writable.prototype[method];
});
function Duplex(options) {
if (!(this instanceof Duplex))
return new Duplex(options);
Readable.call(this, options);
Writable.call(this, options);
if (options && options.readable === false)
this.readable = false;
if (options && options.writable === false)
this.writable = false;
this.allowHalfOpen = true;
if (options && options.allowHalfOpen === false)
this.allowHalfOpen = false;
this.once('end', onend);
}
// the no-half-open enforcer
function onend() {
// if we allow half-open state, or if the writable side ended,
// then we're ok.
if (this.allowHalfOpen || this._writableState.ended)
return;
// no more data can be written.
// But allow more writes to happen in this tick.
process.nextTick(this.end.bind(this));
}
function forEach (xs, f) {
for (var i = 0, l = xs.length; i < l; i++) {
f(xs[i], i);
}
}
}).call(this,require('_process'))
},{"./_stream_readable":281,"./_stream_writable":283,"_process":104,"core-util-is":150,"inherits":204}],281:[function(require,module,exports){
(function (process){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
module.exports = Readable;
/**/
var isArray = require('isarray');
/**/
/**/
var Buffer = require('buffer').Buffer;
/**/
Readable.ReadableState = ReadableState;
var EE = require('events').EventEmitter;
/**/
if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
return emitter.listeners(type).length;
};
/**/
var Stream = require('stream');
/**/
var util = require('core-util-is');
util.inherits = require('inherits');
/**/
var StringDecoder;
util.inherits(Readable, Stream);
function ReadableState(options, stream) {
options = options || {};
// the point at which it stops calling _read() to fill the buffer
// Note: 0 is a valid value, means "don't call _read preemptively ever"
var hwm = options.highWaterMark;
this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024;
// cast to ints.
this.highWaterMark = ~~this.highWaterMark;
this.buffer = [];
this.length = 0;
this.pipes = null;
this.pipesCount = 0;
this.flowing = false;
this.ended = false;
this.endEmitted = false;
this.reading = false;
// In streams that never have any data, and do push(null) right away,
// the consumer can miss the 'end' event if they do some I/O before
// consuming the stream. So, we don't emit('end') until some reading
// happens.
this.calledRead = false;
// a flag to be able to tell if the onwrite cb is called immediately,
// or on a later tick. We set this to true at first, becuase any
// actions that shouldn't happen until "later" should generally also
// not happen before the first write call.
this.sync = true;
// whenever we return null, then we set a flag to say
// that we're awaiting a 'readable' event emission.
this.needReadable = false;
this.emittedReadable = false;
this.readableListening = false;
// object stream flag. Used to make read(n) ignore n and to
// make all the buffer merging and length checks go away
this.objectMode = !!options.objectMode;
// Crypto is kind of old and crusty. Historically, its default string
// encoding is 'binary' so we have to make this configurable.
// Everything else in the universe uses 'utf8', though.
this.defaultEncoding = options.defaultEncoding || 'utf8';
// when piping, we only care about 'readable' events that happen
// after read()ing all the bytes and not getting any pushback.
this.ranOut = false;
// the number of writers that are awaiting a drain event in .pipe()s
this.awaitDrain = 0;
// if true, a maybeReadMore has been scheduled
this.readingMore = false;
this.decoder = null;
this.encoding = null;
if (options.encoding) {
if (!StringDecoder)
StringDecoder = require('string_decoder/').StringDecoder;
this.decoder = new StringDecoder(options.encoding);
this.encoding = options.encoding;
}
}
function Readable(options) {
if (!(this instanceof Readable))
return new Readable(options);
this._readableState = new ReadableState(options, this);
// legacy
this.readable = true;
Stream.call(this);
}
// Manually shove something into the read() buffer.
// This returns true if the highWaterMark has not been hit yet,
// similar to how Writable.write() returns true if you should
// write() some more.
Readable.prototype.push = function(chunk, encoding) {
var state = this._readableState;
if (typeof chunk === 'string' && !state.objectMode) {
encoding = encoding || state.defaultEncoding;
if (encoding !== state.encoding) {
chunk = new Buffer(chunk, encoding);
encoding = '';
}
}
return readableAddChunk(this, state, chunk, encoding, false);
};
// Unshift should *always* be something directly out of read()
Readable.prototype.unshift = function(chunk) {
var state = this._readableState;
return readableAddChunk(this, state, chunk, '', true);
};
function readableAddChunk(stream, state, chunk, encoding, addToFront) {
var er = chunkInvalid(state, chunk);
if (er) {
stream.emit('error', er);
} else if (chunk === null || chunk === undefined) {
state.reading = false;
if (!state.ended)
onEofChunk(stream, state);
} else if (state.objectMode || chunk && chunk.length > 0) {
if (state.ended && !addToFront) {
var e = new Error('stream.push() after EOF');
stream.emit('error', e);
} else if (state.endEmitted && addToFront) {
var e = new Error('stream.unshift() after end event');
stream.emit('error', e);
} else {
if (state.decoder && !addToFront && !encoding)
chunk = state.decoder.write(chunk);
// update the buffer info.
state.length += state.objectMode ? 1 : chunk.length;
if (addToFront) {
state.buffer.unshift(chunk);
} else {
state.reading = false;
state.buffer.push(chunk);
}
if (state.needReadable)
emitReadable(stream);
maybeReadMore(stream, state);
}
} else if (!addToFront) {
state.reading = false;
}
return needMoreData(state);
}
// if it's past the high water mark, we can push in some more.
// Also, if we have no data yet, we can stand some
// more bytes. This is to work around cases where hwm=0,
// such as the repl. Also, if the push() triggered a
// readable event, and the user called read(largeNumber) such that
// needReadable was set, then we ought to push more, so that another
// 'readable' event will be triggered.
function needMoreData(state) {
return !state.ended &&
(state.needReadable ||
state.length < state.highWaterMark ||
state.length === 0);
}
// backwards compatibility.
Readable.prototype.setEncoding = function(enc) {
if (!StringDecoder)
StringDecoder = require('string_decoder/').StringDecoder;
this._readableState.decoder = new StringDecoder(enc);
this._readableState.encoding = enc;
};
// Don't raise the hwm > 128MB
var MAX_HWM = 0x800000;
function roundUpToNextPowerOf2(n) {
if (n >= MAX_HWM) {
n = MAX_HWM;
} else {
// Get the next highest power of 2
n--;
for (var p = 1; p < 32; p <<= 1)="" n="" |="n">> p;
n++;
}
return n;
}
function howMuchToRead(n, state) {
if (state.length === 0 && state.ended)
return 0;
if (state.objectMode)
return n === 0 ? 0 : 1;
if (n === null || isNaN(n)) {
// only flow one buffer at a time
if (state.flowing && state.buffer.length)
return state.buffer[0].length;
else
return state.length;
}
if (n <= 0)="" return="" 0;="" if="" we're="" asking="" for="" more="" than="" the="" target="" buffer="" level,="" then="" raise="" water="" mark.="" bump="" up="" to="" next="" highest="" power="" of="" 2,="" prevent="" increasing="" it="" excessively="" in="" tiny="" amounts.="" (n=""> state.highWaterMark)
state.highWaterMark = roundUpToNextPowerOf2(n);
// don't have that much. return null, unless we've ended.
if (n > state.length) {
if (!state.ended) {
state.needReadable = true;
return 0;
} else
return state.length;
}
return n;
}
// you can override either this method, or the async _read(n) below.
Readable.prototype.read = function(n) {
var state = this._readableState;
state.calledRead = true;
var nOrig = n;
var ret;
if (typeof n !== 'number' || n > 0)
state.emittedReadable = false;
// if we're doing read(0) to trigger a readable event, but we
// already have a bunch of data in the buffer, then just trigger
// the 'readable' event and move on.
if (n === 0 &&
state.needReadable &&
(state.length >= state.highWaterMark || state.ended)) {
emitReadable(this);
return null;
}
n = howMuchToRead(n, state);
// if we've ended, and we're now clear, then finish it up.
if (n === 0 && state.ended) {
ret = null;
// In cases where the decoder did not receive enough data
// to produce a full chunk, then immediately received an
// EOF, state.buffer will contain [, ].
// howMuchToRead will see this and coerce the amount to
// read to zero (because it's looking at the length of the
// first in state.buffer), and we'll end up here.
//
// This can only happen via state.decoder -- no other venue
// exists for pushing a zero-length chunk into state.buffer
// and triggering this behavior. In this case, we return our
// remaining data and end the stream, if appropriate.
if (state.length > 0 && state.decoder) {
ret = fromList(n, state);
state.length -= ret.length;
}
if (state.length === 0)
endReadable(this);
return ret;
}
// All the actual chunk generation logic needs to be
// *below* the call to _read. The reason is that in certain
// synthetic stream cases, such as passthrough streams, _read
// may be a completely synchronous operation which may change
// the state of the read buffer, providing enough data when
// before there was *not* enough.
//
// So, the steps are:
// 1. Figure out what the state of things will be after we do
// a read from the buffer.
//
// 2. If that resulting state will trigger a _read, then call _read.
// Note that this may be asynchronous, or synchronous. Yes, it is
// deeply ugly to write APIs this way, but that still doesn't mean
// that the Readable class should behave improperly, as streams are
// designed to be sync/async agnostic.
// Take note if the _read call is sync or async (ie, if the read call
// has returned yet), so that we know whether or not it's safe to emit
// 'readable' etc.
//
// 3. Actually pull the requested chunks out of the buffer and return.
// if we need a readable event, then we need to do some reading.
var doRead = state.needReadable;
// if we currently have less than the highWaterMark, then also read some
if (state.length - n <= state.highwatermark)="" doread="true;" however,="" if="" we've="" ended,="" then="" there's="" no="" point,="" and="" we're="" already="" reading,="" it's="" unnecessary.="" (state.ended="" ||="" state.reading)="" (doread)="" {="" state.reading="true;" state.sync="true;" the="" length="" is="" currently="" zero,="" we="" *need*="" a="" readable="" event.="" (state.length="==" 0)="" state.needreadable="true;" call="" internal="" read="" method="" this._read(state.highwatermark);="" }="" _read="" called="" its="" callback="" synchronously,="" `reading`="" will="" be="" false,="" need="" to="" re-evaluate="" how="" much="" data="" can="" return="" user.="" (doread="" &&="" !state.reading)="" n="howMuchToRead(nOrig," state);="" (n=""> 0)
ret = fromList(n, state);
else
ret = null;
if (ret === null) {
state.needReadable = true;
n = 0;
}
state.length -= n;
// If we have nothing in the buffer, then we want to know
// as soon as we *do* get something into the buffer.
if (state.length === 0 && !state.ended)
state.needReadable = true;
// If we happened to read() exactly the remaining amount in the
// buffer, and the EOF has been seen at this point, then make sure
// that we emit 'end' on the very next tick.
if (state.ended && !state.endEmitted && state.length === 0)
endReadable(this);
return ret;
};
function chunkInvalid(state, chunk) {
var er = null;
if (!Buffer.isBuffer(chunk) &&
'string' !== typeof chunk &&
chunk !== null &&
chunk !== undefined &&
!state.objectMode) {
er = new TypeError('Invalid non-string/buffer chunk');
}
return er;
}
function onEofChunk(stream, state) {
if (state.decoder && !state.ended) {
var chunk = state.decoder.end();
if (chunk && chunk.length) {
state.buffer.push(chunk);
state.length += state.objectMode ? 1 : chunk.length;
}
}
state.ended = true;
// if we've ended and we have some data left, then emit
// 'readable' now to make sure it gets picked up.
if (state.length > 0)
emitReadable(stream);
else
endReadable(stream);
}
// Don't emit readable right away in sync mode, because this can trigger
// another read() call => stack overflow. This way, it might trigger
// a nextTick recursion warning, but that's not so bad.
function emitReadable(stream) {
var state = stream._readableState;
state.needReadable = false;
if (state.emittedReadable)
return;
state.emittedReadable = true;
if (state.sync)
process.nextTick(function() {
emitReadable_(stream);
});
else
emitReadable_(stream);
}
function emitReadable_(stream) {
stream.emit('readable');
}
// at this point, the user has presumably seen the 'readable' event,
// and called read() to consume some data. that may have triggered
// in turn another _read(n) call, in which case reading = true if
// it's in progress.
// However, if we're not ended, or reading, and the length < hwm,
// then go ahead and try to read some more preemptively.
function maybeReadMore(stream, state) {
if (!state.readingMore) {
state.readingMore = true;
process.nextTick(function() {
maybeReadMore_(stream, state);
});
}
}
function maybeReadMore_(stream, state) {
var len = state.length;
while (!state.reading && !state.flowing && !state.ended &&
state.length < state.highWaterMark) {
stream.read(0);
if (len === state.length)
// didn't get any data, stop spinning.
break;
else
len = state.length;
}
state.readingMore = false;
}
// abstract method. to be overridden in specific implementation classes.
// call cb(er, data) where data is <= n="" in="" length.="" for="" virtual="" (non-string,="" non-buffer)="" streams,="" "length"="" is="" somewhat="" arbitrary,="" and="" perhaps="" not="" very="" meaningful.="" readable.prototype._read="function(n)" {="" this.emit('error',="" new="" error('not="" implemented'));="" };="" readable.prototype.pipe="function(dest," pipeopts)="" var="" src="this;" state="this._readableState;" switch="" (state.pipescount)="" case="" 0:="" state.pipes="dest;" break;="" 1:="" dest];="" default:="" state.pipes.push(dest);="" }="" state.pipescount="" +="1;" doend="(!pipeOpts" ||="" pipeopts.end="" !="=" false)="" &&="" dest="" process.stdout="" process.stderr;="" endfn="doEnd" ?="" onend="" :="" cleanup;="" if="" (state.endemitted)="" process.nexttick(endfn);="" else="" src.once('end',="" endfn);="" dest.on('unpipe',="" onunpipe);="" function="" onunpipe(readable)="" (readable="" src)="" return;="" cleanup();="" onend()="" dest.end();="" when="" the="" drains,="" it="" reduces="" awaitdrain="" counter="" on="" source.="" this="" would="" be="" more="" elegant="" with="" a="" .once()="" handler="" flow(),="" but="" adding="" removing="" repeatedly="" too="" slow.="" ondrain="pipeOnDrain(src);" dest.on('drain',="" ondrain);="" cleanup()="" cleanup="" event="" handlers="" once="" pipe="" broken="" dest.removelistener('close',="" onclose);="" dest.removelistener('finish',="" onfinish);="" dest.removelistener('drain',="" dest.removelistener('error',="" onerror);="" dest.removelistener('unpipe',="" src.removelistener('end',="" onend);="" cleanup);="" reader="" waiting="" drain="" from="" specific="" writer,="" then="" cause="" to="" never="" start="" flowing="" again.="" so,="" awaiting="" drain,="" we="" just="" call="" now.="" don't="" know,="" assume="" that="" are="" one.="" (!dest._writablestate="" dest._writablestate.needdrain)="" ondrain();="" has="" an="" error,="" stop="" piping="" into="" it.="" however,="" suppress="" throwing="" behavior="" this.="" onerror(er)="" unpipe();="" (ee.listenercount(dest,="" 'error')="==" 0)="" dest.emit('error',="" er);="" brutally="" ugly="" hack="" make="" sure="" our="" error="" attached="" before="" any="" userland="" ones.="" do="" (!dest._events="" !dest._events.error)="" dest.on('error',="" (isarray(dest._events.error))="" dest._events.error.unshift(onerror);="" dest._events.error="[onerror," dest._events.error];="" both="" close="" finish="" should="" trigger="" unpipe,="" only="" once.="" onclose()="" dest.once('close',="" onfinish()="" dest.once('finish',="" unpipe()="" src.unpipe(dest);="" tell="" it's="" being="" piped="" dest.emit('pipe',="" src);="" flow="" hasn't="" been="" started="" already.="" (!state.flowing)="" waits="" readable="" events="" after="" all="" data="" gets="" sucked="" out="" flow.="" easier="" follow="" this.on('readable',="" pipeonreadable);="" state.flowing="true;" process.nexttick(function()="" flow(src);="" });="" return="" dest;="" pipeondrain(src)="" function()="" state.awaitdrain--;="" (state.awaitdrain="==" flow(src)="" chunk;="" state.awaitdrain="0;" write(dest,="" i,="" list)="" written="dest.write(chunk);" (false="==" written)="" state.awaitdrain++;="" while="" (state.pipescount="" null="" (chunk="src.read()))" 1)="" write(state.pipes,="" 0,="" null);="" foreach(state.pipes,="" write);="" src.emit('data',="" chunk);="" anyone="" needs="" have="" wait="" that.=""> 0)
return;
}
// if every destination was unpiped, either before entering this
// function, or in the while loop, then stop flowing.
//
// NB: This is a pretty rare edge case.
if (state.pipesCount === 0) {
state.flowing = false;
// if there were data event listeners added, then switch to old mode.
if (EE.listenerCount(src, 'data') > 0)
emitDataEvents(src);
return;
}
// at this point, no one needed a drain, so we just ran out of data
// on the next readable event, start it over again.
state.ranOut = true;
}
function pipeOnReadable() {
if (this._readableState.ranOut) {
this._readableState.ranOut = false;
flow(this);
}
}
Readable.prototype.unpipe = function(dest) {
var state = this._readableState;
// if we're not piping anywhere, then do nothing.
if (state.pipesCount === 0)
return this;
// just one destination. most common case.
if (state.pipesCount === 1) {
// passed in one, but it's not the right one.
if (dest && dest !== state.pipes)
return this;
if (!dest)
dest = state.pipes;
// got a match.
state.pipes = null;
state.pipesCount = 0;
this.removeListener('readable', pipeOnReadable);
state.flowing = false;
if (dest)
dest.emit('unpipe', this);
return this;
}
// slow case. multiple pipe destinations.
if (!dest) {
// remove all.
var dests = state.pipes;
var len = state.pipesCount;
state.pipes = null;
state.pipesCount = 0;
this.removeListener('readable', pipeOnReadable);
state.flowing = false;
for (var i = 0; i < len; i++)
dests[i].emit('unpipe', this);
return this;
}
// try to find the right one.
var i = indexOf(state.pipes, dest);
if (i === -1)
return this;
state.pipes.splice(i, 1);
state.pipesCount -= 1;
if (state.pipesCount === 1)
state.pipes = state.pipes[0];
dest.emit('unpipe', this);
return this;
};
// set up data events if they are asked for
// Ensure readable listeners eventually get something
Readable.prototype.on = function(ev, fn) {
var res = Stream.prototype.on.call(this, ev, fn);
if (ev === 'data' && !this._readableState.flowing)
emitDataEvents(this);
if (ev === 'readable' && this.readable) {
var state = this._readableState;
if (!state.readableListening) {
state.readableListening = true;
state.emittedReadable = false;
state.needReadable = true;
if (!state.reading) {
this.read(0);
} else if (state.length) {
emitReadable(this, state);
}
}
}
return res;
};
Readable.prototype.addListener = Readable.prototype.on;
// pause() and resume() are remnants of the legacy readable stream API
// If the user uses them, then switch into old mode.
Readable.prototype.resume = function() {
emitDataEvents(this);
this.read(0);
this.emit('resume');
};
Readable.prototype.pause = function() {
emitDataEvents(this, true);
this.emit('pause');
};
function emitDataEvents(stream, startPaused) {
var state = stream._readableState;
if (state.flowing) {
// https://github.com/isaacs/readable-stream/issues/16
throw new Error('Cannot switch to old mode now.');
}
var paused = startPaused || false;
var readable = false;
// convert to an old-style stream.
stream.readable = true;
stream.pipe = Stream.prototype.pipe;
stream.on = stream.addListener = Stream.prototype.on;
stream.on('readable', function() {
readable = true;
var c;
while (!paused && (null !== (c = stream.read())))
stream.emit('data', c);
if (c === null) {
readable = false;
stream._readableState.needReadable = true;
}
});
stream.pause = function() {
paused = true;
this.emit('pause');
};
stream.resume = function() {
paused = false;
if (readable)
process.nextTick(function() {
stream.emit('readable');
});
else
this.read(0);
this.emit('resume');
};
// now make it start, just in case it hadn't already.
stream.emit('readable');
}
// wrap an old-style stream as the async data source.
// This is *not* part of the readable stream interface.
// It is an ugly unfortunate mess of history.
Readable.prototype.wrap = function(stream) {
var state = this._readableState;
var paused = false;
var self = this;
stream.on('end', function() {
if (state.decoder && !state.ended) {
var chunk = state.decoder.end();
if (chunk && chunk.length)
self.push(chunk);
}
self.push(null);
});
stream.on('data', function(chunk) {
if (state.decoder)
chunk = state.decoder.write(chunk);
// don't skip over falsy values in objectMode
//if (state.objectMode && util.isNullOrUndefined(chunk))
if (state.objectMode && (chunk === null || chunk === undefined))
return;
else if (!state.objectMode && (!chunk || !chunk.length))
return;
var ret = self.push(chunk);
if (!ret) {
paused = true;
stream.pause();
}
});
// proxy all the other methods.
// important when wrapping filters and duplexes.
for (var i in stream) {
if (typeof stream[i] === 'function' &&
typeof this[i] === 'undefined') {
this[i] = function(method) { return function() {
return stream[method].apply(stream, arguments);
}}(i);
}
}
// proxy certain important events.
var events = ['error', 'close', 'destroy', 'pause', 'resume'];
forEach(events, function(ev) {
stream.on(ev, self.emit.bind(self, ev));
});
// when we try to consume some more bytes, simply unpause the
// underlying stream.
self._read = function(n) {
if (paused) {
paused = false;
stream.resume();
}
};
return self;
};
// exposed for testing purposes only.
Readable._fromList = fromList;
// Pluck off n bytes from an array of buffers.
// Length is the combined lengths of all the buffers in the list.
function fromList(n, state) {
var list = state.buffer;
var length = state.length;
var stringMode = !!state.decoder;
var objectMode = !!state.objectMode;
var ret;
// nothing in the list, definitely empty.
if (list.length === 0)
return null;
if (length === 0)
ret = null;
else if (objectMode)
ret = list.shift();
else if (!n || n >= length) {
// read it all, truncate the array.
if (stringMode)
ret = list.join('');
else
ret = Buffer.concat(list, length);
list.length = 0;
} else {
// read just some of it.
if (n < list[0].length) {
// just take a part of the first list item.
// slice is the same for buffers and strings.
var buf = list[0];
ret = buf.slice(0, n);
list[0] = buf.slice(n);
} else if (n === list[0].length) {
// first list is a perfect match
ret = list.shift();
} else {
// complex case.
// we have enough to cover it, but it spans past the first buffer.
if (stringMode)
ret = '';
else
ret = new Buffer(n);
var c = 0;
for (var i = 0, l = list.length; i < l && c < n; i++) {
var buf = list[0];
var cpy = Math.min(n - c, buf.length);
if (stringMode)
ret += buf.slice(0, cpy);
else
buf.copy(ret, c, 0, cpy);
if (cpy < buf.length)
list[0] = buf.slice(cpy);
else
list.shift();
c += cpy;
}
}
}
return ret;
}
function endReadable(stream) {
var state = stream._readableState;
// If we get here before consuming all the bytes, then that is a
// bug in node. Should never happen.
if (state.length > 0)
throw new Error('endReadable called on non-empty stream');
if (!state.endEmitted && state.calledRead) {
state.ended = true;
process.nextTick(function() {
// Check that we didn't get one last unshift.
if (!state.endEmitted && state.length === 0) {
state.endEmitted = true;
stream.readable = false;
stream.emit('end');
}
});
}
}
function forEach (xs, f) {
for (var i = 0, l = xs.length; i < l; i++) {
f(xs[i], i);
}
}
function indexOf (xs, x) {
for (var i = 0, l = xs.length; i < l; i++) {
if (xs[i] === x) return i;
}
return -1;
}
}).call(this,require('_process'))
},{"_process":104,"buffer":45,"core-util-is":150,"events":82,"inherits":204,"isarray":209,"stream":131,"string_decoder/":272}],282:[function(require,module,exports){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// a transform stream is a readable/writable stream where you do
// something with the data. Sometimes it's called a "filter",
// but that's not a great name for it, since that implies a thing where
// some bits pass through, and others are simply ignored. (That would
// be a valid example of a transform, of course.)
//
// While the output is causally related to the input, it's not a
// necessarily symmetric or synchronous transformation. For example,
// a zlib stream might take multiple plain-text writes(), and then
// emit a single compressed chunk some time in the future.
//
// Here's how this works:
//
// The Transform stream has all the aspects of the readable and writable
// stream classes. When you write(chunk), that calls _write(chunk,cb)
// internally, and returns false if there's a lot of pending writes
// buffered up. When you call read(), that calls _read(n) until
// there's enough pending readable data buffered up.
//
// In a transform stream, the written data is placed in a buffer. When
// _read(n) is called, it transforms the queued up data, calling the
// buffered _write cb's as it consumes chunks. If consuming a single
// written chunk would result in multiple output chunks, then the first
// outputted bit calls the readcb, and subsequent chunks just go into
// the read buffer, and will cause it to emit 'readable' if necessary.
//
// This way, back-pressure is actually determined by the reading side,
// since _read has to be called to start processing a new chunk. However,
// a pathological inflate type of transform can cause excessive buffering
// here. For example, imagine a stream where every byte of input is
// interpreted as an integer from 0-255, and then results in that many
// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
// 1kb of data being output. In this case, you could write a very small
// amount of input, and end up with a very large amount of output. In
// such a pathological inflating mechanism, there'd be no way to tell
// the system to stop doing the transform. A single 4MB write could
// cause the system to run out of memory.
//
// However, even in such a pathological case, only a single written chunk
// would be consumed, and then the rest would wait (un-transformed) until
// the results of the previous transformed chunk were consumed.
module.exports = Transform;
var Duplex = require('./_stream_duplex');
/**/
var util = require('core-util-is');
util.inherits = require('inherits');
/**/
util.inherits(Transform, Duplex);
function TransformState(options, stream) {
this.afterTransform = function(er, data) {
return afterTransform(stream, er, data);
};
this.needTransform = false;
this.transforming = false;
this.writecb = null;
this.writechunk = null;
}
function afterTransform(stream, er, data) {
var ts = stream._transformState;
ts.transforming = false;
var cb = ts.writecb;
if (!cb)
return stream.emit('error', new Error('no writecb in Transform class'));
ts.writechunk = null;
ts.writecb = null;
if (data !== null && data !== undefined)
stream.push(data);
if (cb)
cb(er);
var rs = stream._readableState;
rs.reading = false;
if (rs.needReadable || rs.length < rs.highWaterMark) {
stream._read(rs.highWaterMark);
}
}
function Transform(options) {
if (!(this instanceof Transform))
return new Transform(options);
Duplex.call(this, options);
var ts = this._transformState = new TransformState(options, this);
// when the writable side finishes, then flush out anything remaining.
var stream = this;
// start out asking for a readable event once data is transformed.
this._readableState.needReadable = true;
// we have implemented the _read method, and done the other things
// that Readable wants before the first _read call, so unset the
// sync guard flag.
this._readableState.sync = false;
this.once('finish', function() {
if ('function' === typeof this._flush)
this._flush(function(er) {
done(stream, er);
});
else
done(stream);
});
}
Transform.prototype.push = function(chunk, encoding) {
this._transformState.needTransform = false;
return Duplex.prototype.push.call(this, chunk, encoding);
};
// This is the part where you do stuff!
// override this function in implementation classes.
// 'chunk' is an input chunk.
//
// Call `push(newChunk)` to pass along transformed output
// to the readable side. You may call 'push' zero or more times.
//
// Call `cb(err)` when you are done with this chunk. If you pass
// an error, then that'll put the hurt on the whole operation. If you
// never call cb(), then you'll never get another chunk.
Transform.prototype._transform = function(chunk, encoding, cb) {
throw new Error('not implemented');
};
Transform.prototype._write = function(chunk, encoding, cb) {
var ts = this._transformState;
ts.writecb = cb;
ts.writechunk = chunk;
ts.writeencoding = encoding;
if (!ts.transforming) {
var rs = this._readableState;
if (ts.needTransform ||
rs.needReadable ||
rs.length < rs.highWaterMark)
this._read(rs.highWaterMark);
}
};
// Doesn't matter what the args are here.
// _transform does all the work.
// That we got here means that the readable side wants more data.
Transform.prototype._read = function(n) {
var ts = this._transformState;
if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
ts.transforming = true;
this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
} else {
// mark that we need a transform, so that any data that comes in
// will get processed, now that we've asked for it.
ts.needTransform = true;
}
};
function done(stream, er) {
if (er)
return stream.emit('error', er);
// if there's nothing in the write buffer, then that means
// that nothing more will ever be provided
var ws = stream._writableState;
var rs = stream._readableState;
var ts = stream._transformState;
if (ws.length)
throw new Error('calling transform done when ws.length != 0');
if (ts.transforming)
throw new Error('calling transform done when still transforming');
return stream.push(null);
}
},{"./_stream_duplex":280,"core-util-is":150,"inherits":204}],283:[function(require,module,exports){
(function (process){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// A bit simpler than readable streams.
// Implement an async ._write(chunk, cb), and it'll handle all
// the drain event emission and buffering.
module.exports = Writable;
/**/
var Buffer = require('buffer').Buffer;
/**/
Writable.WritableState = WritableState;
/**/
var util = require('core-util-is');
util.inherits = require('inherits');
/**/
var Stream = require('stream');
util.inherits(Writable, Stream);
function WriteReq(chunk, encoding, cb) {
this.chunk = chunk;
this.encoding = encoding;
this.callback = cb;
}
function WritableState(options, stream) {
options = options || {};
// the point at which write() starts returning false
// Note: 0 is a valid value, means that we always return false if
// the entire buffer is not flushed immediately on write()
var hwm = options.highWaterMark;
this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024;
// object stream flag to indicate whether or not this stream
// contains buffers or objects.
this.objectMode = !!options.objectMode;
// cast to ints.
this.highWaterMark = ~~this.highWaterMark;
this.needDrain = false;
// at the start of calling end()
this.ending = false;
// when end() has been called, and returned
this.ended = false;
// when 'finish' is emitted
this.finished = false;
// should we decode strings into buffers before passing to _write?
// this is here so that some node-core streams can optimize string
// handling at a lower level.
var noDecode = options.decodeStrings === false;
this.decodeStrings = !noDecode;
// Crypto is kind of old and crusty. Historically, its default string
// encoding is 'binary' so we have to make this configurable.
// Everything else in the universe uses 'utf8', though.
this.defaultEncoding = options.defaultEncoding || 'utf8';
// not an actual buffer we keep track of, but a measurement
// of how much we're waiting to get pushed to some underlying
// socket or file.
this.length = 0;
// a flag to see when we're in the middle of a write.
this.writing = false;
// a flag to be able to tell if the onwrite cb is called immediately,
// or on a later tick. We set this to true at first, becuase any
// actions that shouldn't happen until "later" should generally also
// not happen before the first write call.
this.sync = true;
// a flag to know if we're processing previously buffered items, which
// may call the _write() callback in the same tick, so that we don't
// end up in an overlapped onwrite situation.
this.bufferProcessing = false;
// the callback that's passed to _write(chunk,cb)
this.onwrite = function(er) {
onwrite(stream, er);
};
// the callback that the user supplies to write(chunk,encoding,cb)
this.writecb = null;
// the amount that is being written when _write is called.
this.writelen = 0;
this.buffer = [];
// True if the error was already emitted and should not be thrown again
this.errorEmitted = false;
}
function Writable(options) {
var Duplex = require('./_stream_duplex');
// Writable ctor is applied to Duplexes, though they're not
// instanceof Writable, they're instanceof Readable.
if (!(this instanceof Writable) && !(this instanceof Duplex))
return new Writable(options);
this._writableState = new WritableState(options, this);
// legacy.
this.writable = true;
Stream.call(this);
}
// Otherwise people can pipe Writable streams, which is just wrong.
Writable.prototype.pipe = function() {
this.emit('error', new Error('Cannot pipe. Not readable.'));
};
function writeAfterEnd(stream, state, cb) {
var er = new Error('write after end');
// TODO: defer error events consistently everywhere, not just the cb
stream.emit('error', er);
process.nextTick(function() {
cb(er);
});
}
// If we get something that is not a buffer, string, null, or undefined,
// and we're not in objectMode, then that's an error.
// Otherwise stream chunks are all considered to be of length=1, and the
// watermarks determine how many objects to keep in the buffer, rather than
// how many bytes or characters.
function validChunk(stream, state, chunk, cb) {
var valid = true;
if (!Buffer.isBuffer(chunk) &&
'string' !== typeof chunk &&
chunk !== null &&
chunk !== undefined &&
!state.objectMode) {
var er = new TypeError('Invalid non-string/buffer chunk');
stream.emit('error', er);
process.nextTick(function() {
cb(er);
});
valid = false;
}
return valid;
}
Writable.prototype.write = function(chunk, encoding, cb) {
var state = this._writableState;
var ret = false;
if (typeof encoding === 'function') {
cb = encoding;
encoding = null;
}
if (Buffer.isBuffer(chunk))
encoding = 'buffer';
else if (!encoding)
encoding = state.defaultEncoding;
if (typeof cb !== 'function')
cb = function() {};
if (state.ended)
writeAfterEnd(this, state, cb);
else if (validChunk(this, state, chunk, cb))
ret = writeOrBuffer(this, state, chunk, encoding, cb);
return ret;
};
function decodeChunk(state, chunk, encoding) {
if (!state.objectMode &&
state.decodeStrings !== false &&
typeof chunk === 'string') {
chunk = new Buffer(chunk, encoding);
}
return chunk;
}
// if we're already writing something, then just put this
// in the queue, and wait our turn. Otherwise, call _write
// If we return false, then we need a drain event, so set that flag.
function writeOrBuffer(stream, state, chunk, encoding, cb) {
chunk = decodeChunk(state, chunk, encoding);
if (Buffer.isBuffer(chunk))
encoding = 'buffer';
var len = state.objectMode ? 1 : chunk.length;
state.length += len;
var ret = state.length < state.highWaterMark;
// we must ensure that previous needDrain will not be reset to false.
if (!ret)
state.needDrain = true;
if (state.writing)
state.buffer.push(new WriteReq(chunk, encoding, cb));
else
doWrite(stream, state, len, chunk, encoding, cb);
return ret;
}
function doWrite(stream, state, len, chunk, encoding, cb) {
state.writelen = len;
state.writecb = cb;
state.writing = true;
state.sync = true;
stream._write(chunk, encoding, state.onwrite);
state.sync = false;
}
function onwriteError(stream, state, sync, er, cb) {
if (sync)
process.nextTick(function() {
cb(er);
});
else
cb(er);
stream._writableState.errorEmitted = true;
stream.emit('error', er);
}
function onwriteStateUpdate(state) {
state.writing = false;
state.writecb = null;
state.length -= state.writelen;
state.writelen = 0;
}
function onwrite(stream, er) {
var state = stream._writableState;
var sync = state.sync;
var cb = state.writecb;
onwriteStateUpdate(state);
if (er)
onwriteError(stream, state, sync, er, cb);
else {
// Check if we're actually ready to finish, but don't emit yet
var finished = needFinish(stream, state);
if (!finished && !state.bufferProcessing && state.buffer.length)
clearBuffer(stream, state);
if (sync) {
process.nextTick(function() {
afterWrite(stream, state, finished, cb);
});
} else {
afterWrite(stream, state, finished, cb);
}
}
}
function afterWrite(stream, state, finished, cb) {
if (!finished)
onwriteDrain(stream, state);
cb();
if (finished)
finishMaybe(stream, state);
}
// Must force callback to be called on nextTick, so that we don't
// emit 'drain' before the write() consumer gets the 'false' return
// value, and has a chance to attach a 'drain' listener.
function onwriteDrain(stream, state) {
if (state.length === 0 && state.needDrain) {
state.needDrain = false;
stream.emit('drain');
}
}
// if there's something in the buffer waiting, then process it
function clearBuffer(stream, state) {
state.bufferProcessing = true;
for (var c = 0; c < state.buffer.length; c++) {
var entry = state.buffer[c];
var chunk = entry.chunk;
var encoding = entry.encoding;
var cb = entry.callback;
var len = state.objectMode ? 1 : chunk.length;
doWrite(stream, state, len, chunk, encoding, cb);
// if we didn't call the onwrite immediately, then
// it means that we need to wait until it does.
// also, that means that the chunk and cb are currently
// being processed, so move the buffer counter past them.
if (state.writing) {
c++;
break;
}
}
state.bufferProcessing = false;
if (c < state.buffer.length)
state.buffer = state.buffer.slice(c);
else
state.buffer.length = 0;
}
Writable.prototype._write = function(chunk, encoding, cb) {
cb(new Error('not implemented'));
};
Writable.prototype.end = function(chunk, encoding, cb) {
var state = this._writableState;
if (typeof chunk === 'function') {
cb = chunk;
chunk = null;
encoding = null;
} else if (typeof encoding === 'function') {
cb = encoding;
encoding = null;
}
if (typeof chunk !== 'undefined' && chunk !== null)
this.write(chunk, encoding);
// ignore unnecessary end() calls.
if (!state.ending && !state.finished)
endWritable(this, state, cb);
};
function needFinish(stream, state) {
return (state.ending &&
state.length === 0 &&
!state.finished &&
!state.writing);
}
function finishMaybe(stream, state) {
var need = needFinish(stream, state);
if (need) {
state.finished = true;
stream.emit('finish');
}
return need;
}
function endWritable(stream, state, cb) {
state.ending = true;
finishMaybe(stream, state);
if (cb) {
if (state.finished)
process.nextTick(cb);
else
stream.once('finish', cb);
}
state.ended = true;
}
}).call(this,require('_process'))
},{"./_stream_duplex":280,"_process":104,"buffer":45,"core-util-is":150,"inherits":204,"stream":131}],284:[function(require,module,exports){
arguments[4][120][0].apply(exports,arguments)
},{"./lib/_stream_transform.js":282,"dup":120}],285:[function(require,module,exports){
(function (process){
var Transform = require('readable-stream/transform')
, inherits = require('util').inherits
, xtend = require('xtend')
function DestroyableTransform(opts) {
Transform.call(this, opts)
this._destroyed = false
}
inherits(DestroyableTransform, Transform)
DestroyableTransform.prototype.destroy = function(err) {
if (this._destroyed) return
this._destroyed = true
var self = this
process.nextTick(function() {
if (err)
self.emit('error', err)
self.emit('close')
})
}
// a noop _transform function
function noop (chunk, enc, callback) {
callback(null, chunk)
}
// create a new export function, used by both the main export and
// the .ctor export, contains common logic for dealing with arguments
function through2 (construct) {
return function (options, transform, flush) {
if (typeof options == 'function') {
flush = transform
transform = options
options = {}
}
if (typeof transform != 'function')
transform = noop
if (typeof flush != 'function')
flush = null
return construct(options, transform, flush)
}
}
// main export, just make me a transform stream!
module.exports = through2(function (options, transform, flush) {
var t2 = new DestroyableTransform(options)
t2._transform = transform
if (flush)
t2._flush = flush
return t2
})
// make me a reusable prototype that I can `new`, or implicitly `new`
// with a constructor call
module.exports.ctor = through2(function (options, transform, flush) {
function Through2 (override) {
if (!(this instanceof Through2))
return new Through2(override)
this.options = xtend(options, override)
DestroyableTransform.call(this, this.options)
}
inherits(Through2, DestroyableTransform)
Through2.prototype._transform = transform
if (flush)
Through2.prototype._flush = flush
return Through2
})
module.exports.obj = through2(function (options, transform, flush) {
var t2 = new DestroyableTransform(xtend({ objectMode: true, highWaterMark: 16 }, options))
t2._transform = transform
if (flush)
t2._flush = flush
return t2
})
}).call(this,require('_process'))
},{"_process":104,"readable-stream/transform":284,"util":135,"xtend":330}],286:[function(require,module,exports){
exports = module.exports = trim;
function trim(str){
return str.replace(/^\s*|\s*$/g, '');
}
exports.left = function(str){
return str.replace(/^\s*/, '');
};
exports.right = function(str){
return str.replace(/\s*$/, '');
};
},{}],287:[function(require,module,exports){
(function (global){
/**
* Module exports.
*/
module.exports = deprecate;
/**
* Mark that a method should not be used.
* Returns a modified function which warns once by default.
*
* If `localStorage.noDeprecation = true` is set, then it is a no-op.
*
* If `localStorage.throwDeprecation = true` is set, then deprecated functions
* will throw an Error when invoked.
*
* If `localStorage.traceDeprecation = true` is set, then deprecated functions
* will invoke `console.trace()` instead of `console.error()`.
*
* @param {Function} fn - the function to deprecate
* @param {String} msg - the string to print to the console when `fn` is invoked
* @returns {Function} a new "deprecated" version of `fn`
* @api public
*/
function deprecate (fn, msg) {
if (config('noDeprecation')) {
return fn;
}
var warned = false;
function deprecated() {
if (!warned) {
if (config('throwDeprecation')) {
throw new Error(msg);
} else if (config('traceDeprecation')) {
console.trace(msg);
} else {
console.warn(msg);
}
warned = true;
}
return fn.apply(this, arguments);
}
return deprecated;
}
/**
* Checks `localStorage` for boolean values for the given `name`.
*
* @param {String} name
* @returns {Boolean}
* @api private
*/
function config (name) {
// accessing global.localStorage can trigger a DOMException in sandboxed iframes
try {
if (!global.localStorage) return false;
} catch (_) {
return false;
}
var val = global.localStorage[name];
if (null == val) return false;
return String(val).toLowerCase() === 'true';
}
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{}],288:[function(require,module,exports){
arguments[4][264][0].apply(exports,arguments)
},{"dup":264}],289:[function(require,module,exports){
arguments[4][265][0].apply(exports,arguments)
},{"dup":265}],290:[function(require,module,exports){
arguments[4][266][0].apply(exports,arguments)
},{"./decode.js":288,"./encode.js":289,"./length.js":291,"dup":266}],291:[function(require,module,exports){
var N1 = Math.pow(2, 7)
var N2 = Math.pow(2, 14)
var N3 = Math.pow(2, 21)
var N4 = Math.pow(2, 28)
var N5 = Math.pow(2, 35)
var N6 = Math.pow(2, 42)
var N7 = Math.pow(2, 49)
var N8 = Math.pow(2, 56)
var N9 = Math.pow(2, 63)
module.exports = function (value) {
return (
value < N1 ? 1
: value < N2 ? 2
: value < N3 ? 3
: value < N4 ? 4
: value < N5 ? 5
: value < N6 ? 6
: value < N7 ? 7
: value < N8 ? 8
: value < N9 ? 9
: 10
)
}
},{}],292:[function(require,module,exports){
var createElement = require("./vdom/create-element.js")
module.exports = createElement
},{"./vdom/create-element.js":298}],293:[function(require,module,exports){
var diff = require("./vtree/diff.js")
module.exports = diff
},{"./vtree/diff.js":318}],294:[function(require,module,exports){
var h = require("./virtual-hyperscript/index.js")
module.exports = h
},{"./virtual-hyperscript/index.js":305}],295:[function(require,module,exports){
var diff = require("./diff.js")
var patch = require("./patch.js")
var h = require("./h.js")
var create = require("./create-element.js")
var VNode = require('./vnode/vnode.js')
var VText = require('./vnode/vtext.js')
module.exports = {
diff: diff,
patch: patch,
h: h,
create: create,
VNode: VNode,
VText: VText
}
},{"./create-element.js":292,"./diff.js":293,"./h.js":294,"./patch.js":296,"./vnode/vnode.js":314,"./vnode/vtext.js":316}],296:[function(require,module,exports){
var patch = require("./vdom/patch.js")
module.exports = patch
},{"./vdom/patch.js":301}],297:[function(require,module,exports){
var isObject = require("is-object")
var isHook = require("../vnode/is-vhook.js")
module.exports = applyProperties
function applyProperties(node, props, previous) {
for (var propName in props) {
var propValue = props[propName]
if (propValue === undefined) {
removeProperty(node, propName, propValue, previous);
} else if (isHook(propValue)) {
removeProperty(node, propName, propValue, previous)
if (propValue.hook) {
propValue.hook(node,
propName,
previous ? previous[propName] : undefined)
}
} else {
if (isObject(propValue)) {
patchObject(node, props, previous, propName, propValue);
} else {
node[propName] = propValue
}
}
}
}
function removeProperty(node, propName, propValue, previous) {
if (previous) {
var previousValue = previous[propName]
if (!isHook(previousValue)) {
if (propName === "attributes") {
for (var attrName in previousValue) {
node.removeAttribute(attrName)
}
} else if (propName === "style") {
for (var i in previousValue) {
node.style[i] = ""
}
} else if (typeof previousValue === "string") {
node[propName] = ""
} else {
node[propName] = null
}
} else if (previousValue.unhook) {
previousValue.unhook(node, propName, propValue)
}
}
}
function patchObject(node, props, previous, propName, propValue) {
var previousValue = previous ? previous[propName] : undefined
// Set attributes
if (propName === "attributes") {
for (var attrName in propValue) {
var attrValue = propValue[attrName]
if (attrValue === undefined) {
node.removeAttribute(attrName)
} else {
node.setAttribute(attrName, attrValue)
}
}
return
}
if(previousValue && isObject(previousValue) &&
getPrototype(previousValue) !== getPrototype(propValue)) {
node[propName] = propValue
return
}
if (!isObject(node[propName])) {
node[propName] = {}
}
var replacer = propName === "style" ? "" : undefined
for (var k in propValue) {
var value = propValue[k]
node[propName][k] = (value === undefined) ? replacer : value
}
}
function getPrototype(value) {
if (Object.getPrototypeOf) {
return Object.getPrototypeOf(value)
} else if (value.__proto__) {
return value.__proto__
} else if (value.constructor) {
return value.constructor.prototype
}
}
},{"../vnode/is-vhook.js":309,"is-object":206}],298:[function(require,module,exports){
var document = require("global/document")
var applyProperties = require("./apply-properties")
var isVNode = require("../vnode/is-vnode.js")
var isVText = require("../vnode/is-vtext.js")
var isWidget = require("../vnode/is-widget.js")
var handleThunk = require("../vnode/handle-thunk.js")
module.exports = createElement
function createElement(vnode, opts) {
var doc = opts ? opts.document || document : document
var warn = opts ? opts.warn : null
vnode = handleThunk(vnode).a
if (isWidget(vnode)) {
return vnode.init()
} else if (isVText(vnode)) {
return doc.createTextNode(vnode.text)
} else if (!isVNode(vnode)) {
if (warn) {
warn("Item is not a valid virtual dom node", vnode)
}
return null
}
var node = (vnode.namespace === null) ?
doc.createElement(vnode.tagName) :
doc.createElementNS(vnode.namespace, vnode.tagName)
var props = vnode.properties
applyProperties(node, props)
var children = vnode.children
for (var i = 0; i < children.length; i++) {
var childNode = createElement(children[i], opts)
if (childNode) {
node.appendChild(childNode)
}
}
return node
}
},{"../vnode/handle-thunk.js":307,"../vnode/is-vnode.js":310,"../vnode/is-vtext.js":311,"../vnode/is-widget.js":312,"./apply-properties":297,"global/document":185}],299:[function(require,module,exports){
// Maps a virtual DOM tree onto a real DOM tree in an efficient manner.
// We don't want to read all of the DOM nodes in the tree so we use
// the in-order tree indexing to eliminate recursion down certain branches.
// We only recurse into a DOM node if we know that it contains a child of
// interest.
var noChild = {}
module.exports = domIndex
function domIndex(rootNode, tree, indices, nodes) {
if (!indices || indices.length === 0) {
return {}
} else {
indices.sort(ascending)
return recurse(rootNode, tree, indices, nodes, 0)
}
}
function recurse(rootNode, tree, indices, nodes, rootIndex) {
nodes = nodes || {}
if (rootNode) {
if (indexInRange(indices, rootIndex, rootIndex)) {
nodes[rootIndex] = rootNode
}
var vChildren = tree.children
if (vChildren) {
var childNodes = rootNode.childNodes
for (var i = 0; i < tree.children.length; i++) {
rootIndex += 1
var vChild = vChildren[i] || noChild
var nextIndex = rootIndex + (vChild.count || 0)
// skip recursion down the tree if there are no nodes down here
if (indexInRange(indices, rootIndex, nextIndex)) {
recurse(childNodes[i], vChild, indices, nodes, rootIndex)
}
rootIndex = nextIndex
}
}
}
return nodes
}
// Binary search for an index in the interval [left, right]
function indexInRange(indices, left, right) {
if (indices.length === 0) {
return false
}
var minIndex = 0
var maxIndex = indices.length - 1
var currentIndex
var currentItem
while (minIndex <= maxindex)="" {="" currentindex="((maxIndex" +="" minindex)="" 2)="">> 0
currentItem = indices[currentIndex]
if (minIndex === maxIndex) {
return currentItem >= left && currentItem <= 1="" right="" }="" else="" if="" (currentitem="" <="" left)="" {="" minindex="currentIndex" +=""> right) {
maxIndex = currentIndex - 1
} else {
return true
}
}
return false;
}
function ascending(a, b) {
return a > b ? 1 : -1
}
},{}],300:[function(require,module,exports){
var applyProperties = require("./apply-properties")
var isWidget = require("../vnode/is-widget.js")
var VPatch = require("../vnode/vpatch.js")
var updateWidget = require("./update-widget")
module.exports = applyPatch
function applyPatch(vpatch, domNode, renderOptions) {
var type = vpatch.type
var vNode = vpatch.vNode
var patch = vpatch.patch
switch (type) {
case VPatch.REMOVE:
return removeNode(domNode, vNode)
case VPatch.INSERT:
return insertNode(domNode, patch, renderOptions)
case VPatch.VTEXT:
return stringPatch(domNode, vNode, patch, renderOptions)
case VPatch.WIDGET:
return widgetPatch(domNode, vNode, patch, renderOptions)
case VPatch.VNODE:
return vNodePatch(domNode, vNode, patch, renderOptions)
case VPatch.ORDER:
reorderChildren(domNode, patch)
return domNode
case VPatch.PROPS:
applyProperties(domNode, patch, vNode.properties)
return domNode
case VPatch.THUNK:
return replaceRoot(domNode,
renderOptions.patch(domNode, patch, renderOptions))
default:
return domNode
}
}
function removeNode(domNode, vNode) {
var parentNode = domNode.parentNode
if (parentNode) {
parentNode.removeChild(domNode)
}
destroyWidget(domNode, vNode);
return null
}
function insertNode(parentNode, vNode, renderOptions) {
var newNode = renderOptions.render(vNode, renderOptions)
if (parentNode) {
parentNode.appendChild(newNode)
}
return parentNode
}
function stringPatch(domNode, leftVNode, vText, renderOptions) {
var newNode
if (domNode.nodeType === 3) {
domNode.replaceData(0, domNode.length, vText.text)
newNode = domNode
} else {
var parentNode = domNode.parentNode
newNode = renderOptions.render(vText, renderOptions)
if (parentNode && newNode !== domNode) {
parentNode.replaceChild(newNode, domNode)
}
}
return newNode
}
function widgetPatch(domNode, leftVNode, widget, renderOptions) {
var updating = updateWidget(leftVNode, widget)
var newNode
if (updating) {
newNode = widget.update(leftVNode, domNode) || domNode
} else {
newNode = renderOptions.render(widget, renderOptions)
}
var parentNode = domNode.parentNode
if (parentNode && newNode !== domNode) {
parentNode.replaceChild(newNode, domNode)
}
if (!updating) {
destroyWidget(domNode, leftVNode)
}
return newNode
}
function vNodePatch(domNode, leftVNode, vNode, renderOptions) {
var parentNode = domNode.parentNode
var newNode = renderOptions.render(vNode, renderOptions)
if (parentNode && newNode !== domNode) {
parentNode.replaceChild(newNode, domNode)
}
return newNode
}
function destroyWidget(domNode, w) {
if (typeof w.destroy === "function" && isWidget(w)) {
w.destroy(domNode)
}
}
function reorderChildren(domNode, moves) {
var childNodes = domNode.childNodes
var keyMap = {}
var node
var remove
var insert
for (var i = 0; i < moves.removes.length; i++) {
remove = moves.removes[i]
node = childNodes[remove.from]
if (remove.key) {
keyMap[remove.key] = node
}
domNode.removeChild(node)
}
var length = childNodes.length
for (var j = 0; j < moves.inserts.length; j++) {
insert = moves.inserts[j]
node = keyMap[insert.key]
// this is the weirdest bug i've ever seen in webkit
domNode.insertBefore(node, insert.to >= length++ ? null : childNodes[insert.to])
}
}
function replaceRoot(oldRoot, newRoot) {
if (oldRoot && newRoot && oldRoot !== newRoot && oldRoot.parentNode) {
oldRoot.parentNode.replaceChild(newRoot, oldRoot)
}
return newRoot;
}
},{"../vnode/is-widget.js":312,"../vnode/vpatch.js":315,"./apply-properties":297,"./update-widget":302}],301:[function(require,module,exports){
var document = require("global/document")
var isArray = require("x-is-array")
var render = require("./create-element")
var domIndex = require("./dom-index")
var patchOp = require("./patch-op")
module.exports = patch
function patch(rootNode, patches, renderOptions) {
renderOptions = renderOptions || {}
renderOptions.patch = renderOptions.patch && renderOptions.patch !== patch
? renderOptions.patch
: patchRecursive
renderOptions.render = renderOptions.render || render
return renderOptions.patch(rootNode, patches, renderOptions)
}
function patchRecursive(rootNode, patches, renderOptions) {
var indices = patchIndices(patches)
if (indices.length === 0) {
return rootNode
}
var index = domIndex(rootNode, patches.a, indices)
var ownerDocument = rootNode.ownerDocument
if (!renderOptions.document && ownerDocument !== document) {
renderOptions.document = ownerDocument
}
for (var i = 0; i < indices.length; i++) {
var nodeIndex = indices[i]
rootNode = applyPatch(rootNode,
index[nodeIndex],
patches[nodeIndex],
renderOptions)
}
return rootNode
}
function applyPatch(rootNode, domNode, patchList, renderOptions) {
if (!domNode) {
return rootNode
}
var newNode
if (isArray(patchList)) {
for (var i = 0; i < patchList.length; i++) {
newNode = patchOp(patchList[i], domNode, renderOptions)
if (domNode === rootNode) {
rootNode = newNode
}
}
} else {
newNode = patchOp(patchList, domNode, renderOptions)
if (domNode === rootNode) {
rootNode = newNode
}
}
return rootNode
}
function patchIndices(patches) {
var indices = []
for (var key in patches) {
if (key !== "a") {
indices.push(Number(key))
}
}
return indices
}
},{"./create-element":298,"./dom-index":299,"./patch-op":300,"global/document":185,"x-is-array":327}],302:[function(require,module,exports){
var isWidget = require("../vnode/is-widget.js")
module.exports = updateWidget
function updateWidget(a, b) {
if (isWidget(a) && isWidget(b)) {
if ("name" in a && "name" in b) {
return a.id === b.id
} else {
return a.init === b.init
}
}
return false
}
},{"../vnode/is-widget.js":312}],303:[function(require,module,exports){
'use strict';
var EvStore = require('ev-store');
module.exports = EvHook;
function EvHook(value) {
if (!(this instanceof EvHook)) {
return new EvHook(value);
}
this.value = value;
}
EvHook.prototype.hook = function (node, propertyName) {
var es = EvStore(node);
var propName = propertyName.substr(3);
es[propName] = this.value;
};
EvHook.prototype.unhook = function(node, propertyName) {
var es = EvStore(node);
var propName = propertyName.substr(3);
es[propName] = undefined;
};
},{"ev-store":170}],304:[function(require,module,exports){
'use strict';
module.exports = SoftSetHook;
function SoftSetHook(value) {
if (!(this instanceof SoftSetHook)) {
return new SoftSetHook(value);
}
this.value = value;
}
SoftSetHook.prototype.hook = function (node, propertyName) {
if (node[propertyName] !== this.value) {
node[propertyName] = this.value;
}
};
},{}],305:[function(require,module,exports){
'use strict';
var isArray = require('x-is-array');
var VNode = require('../vnode/vnode.js');
var VText = require('../vnode/vtext.js');
var isVNode = require('../vnode/is-vnode');
var isVText = require('../vnode/is-vtext');
var isWidget = require('../vnode/is-widget');
var isHook = require('../vnode/is-vhook');
var isVThunk = require('../vnode/is-thunk');
var parseTag = require('./parse-tag.js');
var softSetHook = require('./hooks/soft-set-hook.js');
var evHook = require('./hooks/ev-hook.js');
module.exports = h;
function h(tagName, properties, children) {
var childNodes = [];
var tag, props, key, namespace;
if (!children && isChildren(properties)) {
children = properties;
props = {};
}
props = props || properties || {};
tag = parseTag(tagName, props);
// support keys
if (props.hasOwnProperty('key')) {
key = props.key;
props.key = undefined;
}
// support namespace
if (props.hasOwnProperty('namespace')) {
namespace = props.namespace;
props.namespace = undefined;
}
// fix cursor bug
if (tag === 'INPUT' &&
!namespace &&
props.hasOwnProperty('value') &&
props.value !== undefined &&
!isHook(props.value)
) {
props.value = softSetHook(props.value);
}
transformProperties(props);
if (children !== undefined && children !== null) {
addChild(children, childNodes, tag, props);
}
return new VNode(tag, props, childNodes, key, namespace);
}
function addChild(c, childNodes, tag, props) {
if (typeof c === 'string') {
childNodes.push(new VText(c));
} else if (typeof c === 'number') {
childNodes.push(new VText(String(c)));
} else if (isChild(c)) {
childNodes.push(c);
} else if (isArray(c)) {
for (var i = 0; i < c.length; i++) {
addChild(c[i], childNodes, tag, props);
}
} else if (c === null || c === undefined) {
return;
} else {
throw UnexpectedVirtualElement({
foreignObject: c,
parentVnode: {
tagName: tag,
properties: props
}
});
}
}
function transformProperties(props) {
for (var propName in props) {
if (props.hasOwnProperty(propName)) {
var value = props[propName];
if (isHook(value)) {
continue;
}
if (propName.substr(0, 3) === 'ev-') {
// add ev-foo support
props[propName] = evHook(value);
}
}
}
}
function isChild(x) {
return isVNode(x) || isVText(x) || isWidget(x) || isVThunk(x);
}
function isChildren(x) {
return typeof x === 'string' || isArray(x) || isChild(x);
}
function UnexpectedVirtualElement(data) {
var err = new Error();
err.type = 'virtual-hyperscript.unexpected.virtual-element';
err.message = 'Unexpected virtual child passed to h().\n' +
'Expected a VNode / Vthunk / VWidget / string but:\n' +
'got:\n' +
errorString(data.foreignObject) +
'.\n' +
'The parent vnode is:\n' +
errorString(data.parentVnode)
'\n' +
'Suggested fix: change your `h(..., [ ... ])` callsite.';
err.foreignObject = data.foreignObject;
err.parentVnode = data.parentVnode;
return err;
}
function errorString(obj) {
try {
return JSON.stringify(obj, null, ' ');
} catch (e) {
return String(obj);
}
}
},{"../vnode/is-thunk":308,"../vnode/is-vhook":309,"../vnode/is-vnode":310,"../vnode/is-vtext":311,"../vnode/is-widget":312,"../vnode/vnode.js":314,"../vnode/vtext.js":316,"./hooks/ev-hook.js":303,"./hooks/soft-set-hook.js":304,"./parse-tag.js":306,"x-is-array":327}],306:[function(require,module,exports){
'use strict';
var split = require('browser-split');
var classIdSplit = /([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/;
var notClassId = /^\.|#/;
module.exports = parseTag;
function parseTag(tag, props) {
if (!tag) {
return 'DIV';
}
var noId = !(props.hasOwnProperty('id'));
var tagParts = split(tag, classIdSplit);
var tagName = null;
if (notClassId.test(tagParts[1])) {
tagName = 'DIV';
}
var classes, part, type, i;
for (i = 0; i < tagParts.length; i++) {
part = tagParts[i];
if (!part) {
continue;
}
type = part.charAt(0);
if (!tagName) {
tagName = part;
} else if (type === '.') {
classes = classes || [];
classes.push(part.substring(1, part.length));
} else if (type === '#' && noId) {
props.id = part.substring(1, part.length);
}
}
if (classes) {
if (props.className) {
classes.push(props.className);
}
props.className = classes.join(' ');
}
return props.namespace ? tagName : tagName.toUpperCase();
}
},{"browser-split":146}],307:[function(require,module,exports){
var isVNode = require("./is-vnode")
var isVText = require("./is-vtext")
var isWidget = require("./is-widget")
var isThunk = require("./is-thunk")
module.exports = handleThunk
function handleThunk(a, b) {
var renderedA = a
var renderedB = b
if (isThunk(b)) {
renderedB = renderThunk(b, a)
}
if (isThunk(a)) {
renderedA = renderThunk(a, null)
}
return {
a: renderedA,
b: renderedB
}
}
function renderThunk(thunk, previous) {
var renderedThunk = thunk.vnode
if (!renderedThunk) {
renderedThunk = thunk.vnode = thunk.render(previous)
}
if (!(isVNode(renderedThunk) ||
isVText(renderedThunk) ||
isWidget(renderedThunk))) {
throw new Error("thunk did not return a valid node");
}
return renderedThunk
}
},{"./is-thunk":308,"./is-vnode":310,"./is-vtext":311,"./is-widget":312}],308:[function(require,module,exports){
module.exports = isThunk
function isThunk(t) {
return t && t.type === "Thunk"
}
},{}],309:[function(require,module,exports){
module.exports = isHook
function isHook(hook) {
return hook &&
(typeof hook.hook === "function" && !hook.hasOwnProperty("hook") ||
typeof hook.unhook === "function" && !hook.hasOwnProperty("unhook"))
}
},{}],310:[function(require,module,exports){
var version = require("./version")
module.exports = isVirtualNode
function isVirtualNode(x) {
return x && x.type === "VirtualNode" && x.version === version
}
},{"./version":313}],311:[function(require,module,exports){
var version = require("./version")
module.exports = isVirtualText
function isVirtualText(x) {
return x && x.type === "VirtualText" && x.version === version
}
},{"./version":313}],312:[function(require,module,exports){
module.exports = isWidget
function isWidget(w) {
return w && w.type === "Widget"
}
},{}],313:[function(require,module,exports){
module.exports = "2"
},{}],314:[function(require,module,exports){
var version = require("./version")
var isVNode = require("./is-vnode")
var isWidget = require("./is-widget")
var isThunk = require("./is-thunk")
var isVHook = require("./is-vhook")
module.exports = VirtualNode
var noProperties = {}
var noChildren = []
function VirtualNode(tagName, properties, children, key, namespace) {
this.tagName = tagName
this.properties = properties || noProperties
this.children = children || noChildren
this.key = key != null ? String(key) : undefined
this.namespace = (typeof namespace === "string") ? namespace : null
var count = (children && children.length) || 0
var descendants = 0
var hasWidgets = false
var hasThunks = false
var descendantHooks = false
var hooks
for (var propName in properties) {
if (properties.hasOwnProperty(propName)) {
var property = properties[propName]
if (isVHook(property) && property.unhook) {
if (!hooks) {
hooks = {}
}
hooks[propName] = property
}
}
}
for (var i = 0; i < count; i++) {
var child = children[i]
if (isVNode(child)) {
descendants += child.count || 0
if (!hasWidgets && child.hasWidgets) {
hasWidgets = true
}
if (!hasThunks && child.hasThunks) {
hasThunks = true
}
if (!descendantHooks && (child.hooks || child.descendantHooks)) {
descendantHooks = true
}
} else if (!hasWidgets && isWidget(child)) {
if (typeof child.destroy === "function") {
hasWidgets = true
}
} else if (!hasThunks && isThunk(child)) {
hasThunks = true;
}
}
this.count = count + descendants
this.hasWidgets = hasWidgets
this.hasThunks = hasThunks
this.hooks = hooks
this.descendantHooks = descendantHooks
}
VirtualNode.prototype.version = version
VirtualNode.prototype.type = "VirtualNode"
},{"./is-thunk":308,"./is-vhook":309,"./is-vnode":310,"./is-widget":312,"./version":313}],315:[function(require,module,exports){
var version = require("./version")
VirtualPatch.NONE = 0
VirtualPatch.VTEXT = 1
VirtualPatch.VNODE = 2
VirtualPatch.WIDGET = 3
VirtualPatch.PROPS = 4
VirtualPatch.ORDER = 5
VirtualPatch.INSERT = 6
VirtualPatch.REMOVE = 7
VirtualPatch.THUNK = 8
module.exports = VirtualPatch
function VirtualPatch(type, vNode, patch) {
this.type = Number(type)
this.vNode = vNode
this.patch = patch
}
VirtualPatch.prototype.version = version
VirtualPatch.prototype.type = "VirtualPatch"
},{"./version":313}],316:[function(require,module,exports){
var version = require("./version")
module.exports = VirtualText
function VirtualText(text) {
this.text = String(text)
}
VirtualText.prototype.version = version
VirtualText.prototype.type = "VirtualText"
},{"./version":313}],317:[function(require,module,exports){
var isObject = require("is-object")
var isHook = require("../vnode/is-vhook")
module.exports = diffProps
function diffProps(a, b) {
var diff
for (var aKey in a) {
if (!(aKey in b)) {
diff = diff || {}
diff[aKey] = undefined
}
var aValue = a[aKey]
var bValue = b[aKey]
if (aValue === bValue) {
continue
} else if (isObject(aValue) && isObject(bValue)) {
if (getPrototype(bValue) !== getPrototype(aValue)) {
diff = diff || {}
diff[aKey] = bValue
} else if (isHook(bValue)) {
diff = diff || {}
diff[aKey] = bValue
} else {
var objectDiff = diffProps(aValue, bValue)
if (objectDiff) {
diff = diff || {}
diff[aKey] = objectDiff
}
}
} else {
diff = diff || {}
diff[aKey] = bValue
}
}
for (var bKey in b) {
if (!(bKey in a)) {
diff = diff || {}
diff[bKey] = b[bKey]
}
}
return diff
}
function getPrototype(value) {
if (Object.getPrototypeOf) {
return Object.getPrototypeOf(value)
} else if (value.__proto__) {
return value.__proto__
} else if (value.constructor) {
return value.constructor.prototype
}
}
},{"../vnode/is-vhook":309,"is-object":206}],318:[function(require,module,exports){
var isArray = require("x-is-array")
var VPatch = require("../vnode/vpatch")
var isVNode = require("../vnode/is-vnode")
var isVText = require("../vnode/is-vtext")
var isWidget = require("../vnode/is-widget")
var isThunk = require("../vnode/is-thunk")
var handleThunk = require("../vnode/handle-thunk")
var diffProps = require("./diff-props")
module.exports = diff
function diff(a, b) {
var patch = { a: a }
walk(a, b, patch, 0)
return patch
}
function walk(a, b, patch, index) {
if (a === b) {
return
}
var apply = patch[index]
var applyClear = false
if (isThunk(a) || isThunk(b)) {
thunks(a, b, patch, index)
} else if (b == null) {
// If a is a widget we will add a remove patch for it
// Otherwise any child widgets/hooks must be destroyed.
// This prevents adding two remove patches for a widget.
if (!isWidget(a)) {
clearState(a, patch, index)
apply = patch[index]
}
apply = appendPatch(apply, new VPatch(VPatch.REMOVE, a, b))
} else if (isVNode(b)) {
if (isVNode(a)) {
if (a.tagName === b.tagName &&
a.namespace === b.namespace &&
a.key === b.key) {
var propsPatch = diffProps(a.properties, b.properties)
if (propsPatch) {
apply = appendPatch(apply,
new VPatch(VPatch.PROPS, a, propsPatch))
}
apply = diffChildren(a, b, patch, apply, index)
} else {
apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b))
applyClear = true
}
} else {
apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b))
applyClear = true
}
} else if (isVText(b)) {
if (!isVText(a)) {
apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b))
applyClear = true
} else if (a.text !== b.text) {
apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b))
}
} else if (isWidget(b)) {
if (!isWidget(a)) {
applyClear = true
}
apply = appendPatch(apply, new VPatch(VPatch.WIDGET, a, b))
}
if (apply) {
patch[index] = apply
}
if (applyClear) {
clearState(a, patch, index)
}
}
function diffChildren(a, b, patch, apply, index) {
var aChildren = a.children
var orderedSet = reorder(aChildren, b.children)
var bChildren = orderedSet.children
var aLen = aChildren.length
var bLen = bChildren.length
var len = aLen > bLen ? aLen : bLen
for (var i = 0; i < len; i++) {
var leftNode = aChildren[i]
var rightNode = bChildren[i]
index += 1
if (!leftNode) {
if (rightNode) {
// Excess nodes in b need to be added
apply = appendPatch(apply,
new VPatch(VPatch.INSERT, null, rightNode))
}
} else {
walk(leftNode, rightNode, patch, index)
}
if (isVNode(leftNode) && leftNode.count) {
index += leftNode.count
}
}
if (orderedSet.moves) {
// Reorder nodes last
apply = appendPatch(apply, new VPatch(
VPatch.ORDER,
a,
orderedSet.moves
))
}
return apply
}
function clearState(vNode, patch, index) {
// TODO: Make this a single walk, not two
unhook(vNode, patch, index)
destroyWidgets(vNode, patch, index)
}
// Patch records for all destroyed widgets must be added because we need
// a DOM node reference for the destroy function
function destroyWidgets(vNode, patch, index) {
if (isWidget(vNode)) {
if (typeof vNode.destroy === "function") {
patch[index] = appendPatch(
patch[index],
new VPatch(VPatch.REMOVE, vNode, null)
)
}
} else if (isVNode(vNode) && (vNode.hasWidgets || vNode.hasThunks)) {
var children = vNode.children
var len = children.length
for (var i = 0; i < len; i++) {
var child = children[i]
index += 1
destroyWidgets(child, patch, index)
if (isVNode(child) && child.count) {
index += child.count
}
}
} else if (isThunk(vNode)) {
thunks(vNode, null, patch, index)
}
}
// Create a sub-patch for thunks
function thunks(a, b, patch, index) {
var nodes = handleThunk(a, b)
var thunkPatch = diff(nodes.a, nodes.b)
if (hasPatches(thunkPatch)) {
patch[index] = new VPatch(VPatch.THUNK, null, thunkPatch)
}
}
function hasPatches(patch) {
for (var index in patch) {
if (index !== "a") {
return true
}
}
return false
}
// Execute hooks when two nodes are identical
function unhook(vNode, patch, index) {
if (isVNode(vNode)) {
if (vNode.hooks) {
patch[index] = appendPatch(
patch[index],
new VPatch(
VPatch.PROPS,
vNode,
undefinedKeys(vNode.hooks)
)
)
}
if (vNode.descendantHooks || vNode.hasThunks) {
var children = vNode.children
var len = children.length
for (var i = 0; i < len; i++) {
var child = children[i]
index += 1
unhook(child, patch, index)
if (isVNode(child) && child.count) {
index += child.count
}
}
}
} else if (isThunk(vNode)) {
thunks(vNode, null, patch, index)
}
}
function undefinedKeys(obj) {
var result = {}
for (var key in obj) {
result[key] = undefined
}
return result
}
// List diff, naive left to right reordering
function reorder(aChildren, bChildren) {
// O(M) time, O(M) memory
var bChildIndex = keyIndex(bChildren)
var bKeys = bChildIndex.keys
var bFree = bChildIndex.free
if (bFree.length === bChildren.length) {
return {
children: bChildren,
moves: null
}
}
// O(N) time, O(N) memory
var aChildIndex = keyIndex(aChildren)
var aKeys = aChildIndex.keys
var aFree = aChildIndex.free
if (aFree.length === aChildren.length) {
return {
children: bChildren,
moves: null
}
}
// O(MAX(N, M)) memory
var newChildren = []
var freeIndex = 0
var freeCount = bFree.length
var deletedItems = 0
// Iterate through a and match a node in b
// O(N) time,
for (var i = 0 ; i < aChildren.length; i++) {
var aItem = aChildren[i]
var itemIndex
if (aItem.key) {
if (bKeys.hasOwnProperty(aItem.key)) {
// Match up the old keys
itemIndex = bKeys[aItem.key]
newChildren.push(bChildren[itemIndex])
} else {
// Remove old keyed items
itemIndex = i - deletedItems++
newChildren.push(null)
}
} else {
// Match the item in a with the next free item in b
if (freeIndex < freeCount) {
itemIndex = bFree[freeIndex++]
newChildren.push(bChildren[itemIndex])
} else {
// There are no free items in b to match with
// the free items in a, so the extra free nodes
// are deleted.
itemIndex = i - deletedItems++
newChildren.push(null)
}
}
}
var lastFreeIndex = freeIndex >= bFree.length ?
bChildren.length :
bFree[freeIndex]
// Iterate through b and append any new keys
// O(M) time
for (var j = 0; j < bChildren.length; j++) {
var newItem = bChildren[j]
if (newItem.key) {
if (!aKeys.hasOwnProperty(newItem.key)) {
// Add any new keyed items
// We are adding new items to the end and then sorting them
// in place. In future we should insert new items in place.
newChildren.push(newItem)
}
} else if (j >= lastFreeIndex) {
// Add any leftover non-keyed items
newChildren.push(newItem)
}
}
var simulate = newChildren.slice()
var simulateIndex = 0
var removes = []
var inserts = []
var simulateItem
for (var k = 0; k < bChildren.length;) {
var wantedItem = bChildren[k]
simulateItem = simulate[simulateIndex]
// remove items
while (simulateItem === null && simulate.length) {
removes.push(remove(simulate, simulateIndex, null))
simulateItem = simulate[simulateIndex]
}
if (!simulateItem || simulateItem.key !== wantedItem.key) {
// if we need a key in this position...
if (wantedItem.key) {
if (simulateItem && simulateItem.key) {
// if an insert doesn't put this key in place, it needs to move
if (bKeys[simulateItem.key] !== k + 1) {
removes.push(remove(simulate, simulateIndex, simulateItem.key))
simulateItem = simulate[simulateIndex]
// if the remove didn't put the wanted item in place, we need to insert it
if (!simulateItem || simulateItem.key !== wantedItem.key) {
inserts.push({key: wantedItem.key, to: k})
}
// items are matching, so skip ahead
else {
simulateIndex++
}
}
else {
inserts.push({key: wantedItem.key, to: k})
}
}
else {
inserts.push({key: wantedItem.key, to: k})
}
k++
}
// a key in simulate has no matching wanted key, remove it
else if (simulateItem && simulateItem.key) {
removes.push(remove(simulate, simulateIndex, simulateItem.key))
}
}
else {
simulateIndex++
k++
}
}
// remove all the remaining nodes from simulate
while(simulateIndex < simulate.length) {
simulateItem = simulate[simulateIndex]
removes.push(remove(simulate, simulateIndex, simulateItem && simulateItem.key))
}
// If the only moves we have are deletes then we can just
// let the delete patch remove these items.
if (removes.length === deletedItems && !inserts.length) {
return {
children: newChildren,
moves: null
}
}
return {
children: newChildren,
moves: {
removes: removes,
inserts: inserts
}
}
}
function remove(arr, index, key) {
arr.splice(index, 1)
return {
from: index,
key: key
}
}
function keyIndex(children) {
var keys = {}
var free = []
var length = children.length
for (var i = 0; i < length; i++) {
var child = children[i]
if (child.key) {
keys[child.key] = i
} else {
free.push(i)
}
}
return {
keys: keys, // A hash of key name to index
free: free // An array of unkeyed item indices
}
}
function appendPatch(apply, patch) {
if (apply) {
if (isArray(apply)) {
apply.push(patch)
} else {
apply = [apply, patch]
}
return apply
} else {
return patch
}
}
},{"../vnode/handle-thunk":307,"../vnode/is-thunk":308,"../vnode/is-vnode":310,"../vnode/is-vtext":311,"../vnode/is-widget":312,"../vnode/vpatch":315,"./diff-props":317,"x-is-array":327}],319:[function(require,module,exports){
var SimplePeer = require('simple-peer')
var events = require('events')
var through = require('through2')
var cuid = require('cuid')
var once = require('once')
var debug = require('debug')('webrtc-swarm')
module.exports = function (hub, opts) {
if (!opts) opts = {}
var wrap = opts.wrap || function (data) { return data }
var unwrap = opts.unwrap || function (data) { return data }
var swarm = new events.EventEmitter()
var remotes = {}
var me = opts.uuid || cuid()
debug('my uuid:', me)
swarm.maxPeers = opts.maxPeers || Infinity
swarm.peers = []
var setup = function (peer, id) {
peer.on('connect', function () {
debug('connected to peer', id)
swarm.peers.push(peer)
swarm.emit('peer', peer, id)
swarm.emit('connect', peer, id)
})
var onclose = once(function (err) {
debug('disconnected from peer', id, err)
if (remotes[id] === peer) delete remotes[id]
var i = swarm.peers.indexOf(peer)
if (i > -1) swarm.peers.splice(i, 1)
swarm.emit('disconnect', peer, id)
})
var signals = []
var sending = false
var kick = function () {
if (sending || !signals.length) return
sending = true
var data = {from: me, signal: signals.shift()}
data = wrap(data, id)
hub.broadcast(id, data, function () {
sending = false
kick()
})
}
peer.on('signal', function (sig) {
signals.push(sig)
kick()
})
peer.on('error', onclose)
peer.once('close', onclose)
}
hub.subscribe('all').pipe(through.obj(function (data, enc, cb) {
data = unwrap(data, 'all')
if (!data) return cb()
debug('/all', data)
if (data.from === me) {
debug('skipping self', data.from)
return cb()
}
if (data.type === 'connect') {
if (swarm.peers.length >= swarm.maxPeers) {
debug('skipping because maxPeers is met', data.from)
return cb()
}
if (remotes[data.from]) {
debug('skipping existing remote', data.from)
return cb()
}
debug('connecting to new peer (as initiator)', data.from)
var peer = new SimplePeer({
wrtc: opts.wrtc,
initiator: true,
config: opts.config
})
setup(peer, data.from)
remotes[data.from] = peer
}
cb()
}))
var connect = function () {
if (swarm.peers.length >= swarm.maxPeers) return
var data = {type: 'connect', from: me}
data = wrap(data, 'all')
hub.broadcast('all', data, function () {
setTimeout(connect, Math.floor(Math.random() * 2000) + (swarm.peers.length ? 13000 : 3000))
})
}
hub.subscribe(me).once('open', connect).pipe(through.obj(function (data, enc, cb) {
data = unwrap(data, me)
if (!data) return cb()
var peer = remotes[data.from]
if (!peer) {
if (!data.signal || data.signal.type !== 'offer') {
debug('skipping non-offer', data)
return cb()
}
debug('connecting to new peer (as not initiator)', data.from)
peer = remotes[data.from] = new SimplePeer({
wrtc: opts.wrtc,
config: opts.config
})
setup(peer, data.from)
}
debug('signalling', data.from, data.signal)
peer.signal(data.signal)
cb()
}))
return swarm
}
},{"cuid":151,"debug":152,"events":82,"once":240,"simple-peer":268,"through2":325}],320:[function(require,module,exports){
arguments[4][113][0].apply(exports,arguments)
},{"./_stream_readable":321,"./_stream_writable":323,"core-util-is":150,"dup":113,"inherits":204,"process-nextick-args":243}],321:[function(require,module,exports){
(function (process){
'use strict';
module.exports = Readable;
/**/
var processNextTick = require('process-nextick-args');
/**/
/**/
var isArray = require('isarray');
/**/
/**/
var Buffer = require('buffer').Buffer;
/**/
Readable.ReadableState = ReadableState;
var EE = require('events');
/**/
var EElistenerCount = function(emitter, type) {
return emitter.listeners(type).length;
};
/**/
/**/
var Stream;
(function (){try{
Stream = require('st' + 'ream');
}catch(_){}finally{
if (!Stream)
Stream = require('events').EventEmitter;
}}())
/**/
var Buffer = require('buffer').Buffer;
/**/
var util = require('core-util-is');
util.inherits = require('inherits');
/**/
/**/
var debugUtil = require('util');
var debug;
if (debugUtil && debugUtil.debuglog) {
debug = debugUtil.debuglog('stream');
} else {
debug = function () {};
}
/**/
var StringDecoder;
util.inherits(Readable, Stream);
var Duplex;
function ReadableState(options, stream) {
Duplex = Duplex || require('./_stream_duplex');
options = options || {};
// object stream flag. Used to make read(n) ignore n and to
// make all the buffer merging and length checks go away
this.objectMode = !!options.objectMode;
if (stream instanceof Duplex)
this.objectMode = this.objectMode || !!options.readableObjectMode;
// the point at which it stops calling _read() to fill the buffer
// Note: 0 is a valid value, means "don't call _read preemptively ever"
var hwm = options.highWaterMark;
var defaultHwm = this.objectMode ? 16 : 16 * 1024;
this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
// cast to ints.
this.highWaterMark = ~~this.highWaterMark;
this.buffer = [];
this.length = 0;
this.pipes = null;
this.pipesCount = 0;
this.flowing = null;
this.ended = false;
this.endEmitted = false;
this.reading = false;
// a flag to be able to tell if the onwrite cb is called immediately,
// or on a later tick. We set this to true at first, because any
// actions that shouldn't happen until "later" should generally also
// not happen before the first write call.
this.sync = true;
// whenever we return null, then we set a flag to say
// that we're awaiting a 'readable' event emission.
this.needReadable = false;
this.emittedReadable = false;
this.readableListening = false;
// Crypto is kind of old and crusty. Historically, its default string
// encoding is 'binary' so we have to make this configurable.
// Everything else in the universe uses 'utf8', though.
this.defaultEncoding = options.defaultEncoding || 'utf8';
// when piping, we only care about 'readable' events that happen
// after read()ing all the bytes and not getting any pushback.
this.ranOut = false;
// the number of writers that are awaiting a drain event in .pipe()s
this.awaitDrain = 0;
// if true, a maybeReadMore has been scheduled
this.readingMore = false;
this.decoder = null;
this.encoding = null;
if (options.encoding) {
if (!StringDecoder)
StringDecoder = require('string_decoder/').StringDecoder;
this.decoder = new StringDecoder(options.encoding);
this.encoding = options.encoding;
}
}
var Duplex;
function Readable(options) {
Duplex = Duplex || require('./_stream_duplex');
if (!(this instanceof Readable))
return new Readable(options);
this._readableState = new ReadableState(options, this);
// legacy
this.readable = true;
if (options && typeof options.read === 'function')
this._read = options.read;
Stream.call(this);
}
// Manually shove something into the read() buffer.
// This returns true if the highWaterMark has not been hit yet,
// similar to how Writable.write() returns true if you should
// write() some more.
Readable.prototype.push = function(chunk, encoding) {
var state = this._readableState;
if (!state.objectMode && typeof chunk === 'string') {
encoding = encoding || state.defaultEncoding;
if (encoding !== state.encoding) {
chunk = new Buffer(chunk, encoding);
encoding = '';
}
}
return readableAddChunk(this, state, chunk, encoding, false);
};
// Unshift should *always* be something directly out of read()
Readable.prototype.unshift = function(chunk) {
var state = this._readableState;
return readableAddChunk(this, state, chunk, '', true);
};
Readable.prototype.isPaused = function() {
return this._readableState.flowing === false;
};
function readableAddChunk(stream, state, chunk, encoding, addToFront) {
var er = chunkInvalid(state, chunk);
if (er) {
stream.emit('error', er);
} else if (chunk === null) {
state.reading = false;
onEofChunk(stream, state);
} else if (state.objectMode || chunk && chunk.length > 0) {
if (state.ended && !addToFront) {
var e = new Error('stream.push() after EOF');
stream.emit('error', e);
} else if (state.endEmitted && addToFront) {
var e = new Error('stream.unshift() after end event');
stream.emit('error', e);
} else {
if (state.decoder && !addToFront && !encoding)
chunk = state.decoder.write(chunk);
if (!addToFront)
state.reading = false;
// if we want the data now, just emit it.
if (state.flowing && state.length === 0 && !state.sync) {
stream.emit('data', chunk);
stream.read(0);
} else {
// update the buffer info.
state.length += state.objectMode ? 1 : chunk.length;
if (addToFront)
state.buffer.unshift(chunk);
else
state.buffer.push(chunk);
if (state.needReadable)
emitReadable(stream);
}
maybeReadMore(stream, state);
}
} else if (!addToFront) {
state.reading = false;
}
return needMoreData(state);
}
// if it's past the high water mark, we can push in some more.
// Also, if we have no data yet, we can stand some
// more bytes. This is to work around cases where hwm=0,
// such as the repl. Also, if the push() triggered a
// readable event, and the user called read(largeNumber) such that
// needReadable was set, then we ought to push more, so that another
// 'readable' event will be triggered.
function needMoreData(state) {
return !state.ended &&
(state.needReadable ||
state.length < state.highWaterMark ||
state.length === 0);
}
// backwards compatibility.
Readable.prototype.setEncoding = function(enc) {
if (!StringDecoder)
StringDecoder = require('string_decoder/').StringDecoder;
this._readableState.decoder = new StringDecoder(enc);
this._readableState.encoding = enc;
return this;
};
// Don't raise the hwm > 8MB
var MAX_HWM = 0x800000;
function computeNewHighWaterMark(n) {
if (n >= MAX_HWM) {
n = MAX_HWM;
} else {
// Get the next highest power of 2
n--;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
n++;
}
return n;
}
function howMuchToRead(n, state) {
if (state.length === 0 && state.ended)
return 0;
if (state.objectMode)
return n === 0 ? 0 : 1;
if (n === null || isNaN(n)) {
// only flow one buffer at a time
if (state.flowing && state.buffer.length)
return state.buffer[0].length;
else
return state.length;
}
if (n <= 0)="" return="" 0;="" if="" we're="" asking="" for="" more="" than="" the="" target="" buffer="" level,="" then="" raise="" water="" mark.="" bump="" up="" to="" next="" highest="" power="" of="" 2,="" prevent="" increasing="" it="" excessively="" in="" tiny="" amounts.="" (n=""> state.highWaterMark)
state.highWaterMark = computeNewHighWaterMark(n);
// don't have that much. return null, unless we've ended.
if (n > state.length) {
if (!state.ended) {
state.needReadable = true;
return 0;
} else {
return state.length;
}
}
return n;
}
// you can override either this method, or the async _read(n) below.
Readable.prototype.read = function(n) {
debug('read', n);
var state = this._readableState;
var nOrig = n;
if (typeof n !== 'number' || n > 0)
state.emittedReadable = false;
// if we're doing read(0) to trigger a readable event, but we
// already have a bunch of data in the buffer, then just trigger
// the 'readable' event and move on.
if (n === 0 &&
state.needReadable &&
(state.length >= state.highWaterMark || state.ended)) {
debug('read: emitReadable', state.length, state.ended);
if (state.length === 0 && state.ended)
endReadable(this);
else
emitReadable(this);
return null;
}
n = howMuchToRead(n, state);
// if we've ended, and we're now clear, then finish it up.
if (n === 0 && state.ended) {
if (state.length === 0)
endReadable(this);
return null;
}
// All the actual chunk generation logic needs to be
// *below* the call to _read. The reason is that in certain
// synthetic stream cases, such as passthrough streams, _read
// may be a completely synchronous operation which may change
// the state of the read buffer, providing enough data when
// before there was *not* enough.
//
// So, the steps are:
// 1. Figure out what the state of things will be after we do
// a read from the buffer.
//
// 2. If that resulting state will trigger a _read, then call _read.
// Note that this may be asynchronous, or synchronous. Yes, it is
// deeply ugly to write APIs this way, but that still doesn't mean
// that the Readable class should behave improperly, as streams are
// designed to be sync/async agnostic.
// Take note if the _read call is sync or async (ie, if the read call
// has returned yet), so that we know whether or not it's safe to emit
// 'readable' etc.
//
// 3. Actually pull the requested chunks out of the buffer and return.
// if we need a readable event, then we need to do some reading.
var doRead = state.needReadable;
debug('need readable', doRead);
// if we currently have less than the highWaterMark, then also read some
if (state.length === 0 || state.length - n < state.highWaterMark) {
doRead = true;
debug('length less than watermark', doRead);
}
// however, if we've ended, then there's no point, and if we're already
// reading, then it's unnecessary.
if (state.ended || state.reading) {
doRead = false;
debug('reading or ended', doRead);
}
if (doRead) {
debug('do read');
state.reading = true;
state.sync = true;
// if the length is currently zero, then we *need* a readable event.
if (state.length === 0)
state.needReadable = true;
// call internal read method
this._read(state.highWaterMark);
state.sync = false;
}
// If _read pushed data synchronously, then `reading` will be false,
// and we need to re-evaluate how much data we can return to the user.
if (doRead && !state.reading)
n = howMuchToRead(nOrig, state);
var ret;
if (n > 0)
ret = fromList(n, state);
else
ret = null;
if (ret === null) {
state.needReadable = true;
n = 0;
}
state.length -= n;
// If we have nothing in the buffer, then we want to know
// as soon as we *do* get something into the buffer.
if (state.length === 0 && !state.ended)
state.needReadable = true;
// If we tried to read() past the EOF, then emit end on the next tick.
if (nOrig !== n && state.ended && state.length === 0)
endReadable(this);
if (ret !== null)
this.emit('data', ret);
return ret;
};
function chunkInvalid(state, chunk) {
var er = null;
if (!(Buffer.isBuffer(chunk)) &&
typeof chunk !== 'string' &&
chunk !== null &&
chunk !== undefined &&
!state.objectMode) {
er = new TypeError('Invalid non-string/buffer chunk');
}
return er;
}
function onEofChunk(stream, state) {
if (state.ended) return;
if (state.decoder) {
var chunk = state.decoder.end();
if (chunk && chunk.length) {
state.buffer.push(chunk);
state.length += state.objectMode ? 1 : chunk.length;
}
}
state.ended = true;
// emit 'readable' now to make sure it gets picked up.
emitReadable(stream);
}
// Don't emit readable right away in sync mode, because this can trigger
// another read() call => stack overflow. This way, it might trigger
// a nextTick recursion warning, but that's not so bad.
function emitReadable(stream) {
var state = stream._readableState;
state.needReadable = false;
if (!state.emittedReadable) {
debug('emitReadable', state.flowing);
state.emittedReadable = true;
if (state.sync)
processNextTick(emitReadable_, stream);
else
emitReadable_(stream);
}
}
function emitReadable_(stream) {
debug('emit readable');
stream.emit('readable');
flow(stream);
}
// at this point, the user has presumably seen the 'readable' event,
// and called read() to consume some data. that may have triggered
// in turn another _read(n) call, in which case reading = true if
// it's in progress.
// However, if we're not ended, or reading, and the length < hwm,
// then go ahead and try to read some more preemptively.
function maybeReadMore(stream, state) {
if (!state.readingMore) {
state.readingMore = true;
processNextTick(maybeReadMore_, stream, state);
}
}
function maybeReadMore_(stream, state) {
var len = state.length;
while (!state.reading && !state.flowing && !state.ended &&
state.length < state.highWaterMark) {
debug('maybeReadMore read 0');
stream.read(0);
if (len === state.length)
// didn't get any data, stop spinning.
break;
else
len = state.length;
}
state.readingMore = false;
}
// abstract method. to be overridden in specific implementation classes.
// call cb(er, data) where data is <= 0="" 1="" n="" in="" length.="" for="" virtual="" (non-string,="" non-buffer)="" streams,="" "length"="" is="" somewhat="" arbitrary,="" and="" perhaps="" not="" very="" meaningful.="" readable.prototype._read="function(n)" {="" this.emit('error',="" new="" error('not="" implemented'));="" };="" readable.prototype.pipe="function(dest," pipeopts)="" var="" src="this;" state="this._readableState;" switch="" (state.pipescount)="" case="" 0:="" state.pipes="dest;" break;="" 1:="" dest];="" default:="" state.pipes.push(dest);="" }="" state.pipescount="" +="1;" debug('pipe="" count="%d" opts="%j'," state.pipescount,="" pipeopts);="" doend="(!pipeOpts" ||="" pipeopts.end="" !="=" false)="" &&="" dest="" process.stdout="" process.stderr;="" endfn="doEnd" ?="" onend="" :="" cleanup;="" if="" (state.endemitted)="" processnexttick(endfn);="" else="" src.once('end',="" endfn);="" dest.on('unpipe',="" onunpipe);="" function="" onunpipe(readable)="" debug('onunpipe');="" (readable="==" src)="" cleanup();="" onend()="" debug('onend');="" dest.end();="" when="" the="" drains,="" it="" reduces="" awaitdrain="" counter="" on="" source.="" this="" would="" be="" more="" elegant="" with="" a="" .once()="" handler="" flow(),="" but="" adding="" removing="" repeatedly="" too="" slow.="" ondrain="pipeOnDrain(src);" dest.on('drain',="" ondrain);="" cleanedup="false;" cleanup()="" debug('cleanup');="" cleanup="" event="" handlers="" once="" pipe="" broken="" dest.removelistener('close',="" onclose);="" dest.removelistener('finish',="" onfinish);="" dest.removelistener('drain',="" dest.removelistener('error',="" onerror);="" dest.removelistener('unpipe',="" src.removelistener('end',="" onend);="" cleanup);="" src.removelistener('data',="" ondata);="" reader="" waiting="" drain="" from="" specific="" writer,="" then="" cause="" to="" never="" start="" flowing="" again.="" so,="" awaiting="" drain,="" we="" just="" call="" now.="" don't="" know,="" assume="" that="" are="" one.="" (state.awaitdrain="" (!dest._writablestate="" dest._writablestate.needdrain))="" ondrain();="" src.on('data',="" ondata(chunk)="" debug('ondata');="" ret="dest.write(chunk);" (false="==" ret)="" user="" unpiped="" during="" `dest.write()`,="" possible="" get="" stuck="" permanently="" paused="" write="" also="" returned="" false.="" (state.pipescount="==" state.pipes[0]="==" src.listenercount('data')="==" !cleanedup)="" debug('false="" response,="" pause',="" src._readablestate.awaitdrain);="" src._readablestate.awaitdrain++;="" src.pause();="" has="" an="" error,="" stop="" piping="" into="" it.="" however,="" suppress="" throwing="" behavior="" this.="" onerror(er)="" debug('onerror',="" er);="" unpipe();="" (eelistenercount(dest,="" 'error')="==" 0)="" dest.emit('error',="" brutally="" ugly="" hack="" make="" sure="" our="" error="" attached="" before="" any="" userland="" ones.="" do="" (!dest._events="" !dest._events.error)="" dest.on('error',="" (isarray(dest._events.error))="" dest._events.error.unshift(onerror);="" dest._events.error="[onerror," dest._events.error];="" both="" close="" finish="" should="" trigger="" unpipe,="" only="" once.="" onclose()="" dest.once('close',="" onfinish()="" debug('onfinish');="" dest.once('finish',="" unpipe()="" debug('unpipe');="" src.unpipe(dest);="" tell="" it's="" being="" piped="" dest.emit('pipe',="" src);="" flow="" hasn't="" been="" started="" already.="" (!state.flowing)="" resume');="" src.resume();="" return="" dest;="" pipeondrain(src)="" function()="" debug('pipeondrain',="" state.awaitdrain);="" (state.awaitdrain)="" state.awaitdrain--;="" eelistenercount(src,="" 'data'))="" state.flowing="true;" flow(src);="" readable.prototype.unpipe="function(dest)" we're="" anywhere,="" nothing.="" this;="" one="" destination.="" most="" common="" case.="" 1)="" passed="" one,="" right="" (dest="" state.pipes)="" (!dest)="" got="" match.="" (dest)="" dest.emit('unpipe',="" this);="" slow="" multiple destinations.="" remove="" all.="" dests="state.pipes;" len="state.pipesCount;" (var="" i="0;" <="" len;="" i++)="" dests[i].emit('unpipe',="" try="" find="" dest);="" (i="==" -1)="" state.pipes.splice(i,="" 1);="" -="1;" set="" up="" data="" events="" they="" asked="" ensure="" readable="" listeners="" eventually="" something="" readable.prototype.on="function(ev," fn)="" res="Stream.prototype.on.call(this," ev,="" fn);="" listening="" data,="" explicitly="" paused,="" resume="" of="" next="" tick.="" (ev="==" 'data'="" false="" this._readablestate.flowing)="" this.resume();="" 'readable'="" this.readable)="" (!state.readablelistening)="" state.readablelistening="true;" state.emittedreadable="false;" state.needreadable="true;" (!state.reading)="" processnexttick(nreadingnexttick,="" (state.length)="" emitreadable(this,="" state);="" res;="" readable.prototype.addlistener="Readable.prototype.on;" nreadingnexttick(self)="" debug('readable="" nexttick="" read="" 0');="" self.read(0);="" pause()="" resume()="" remnants="" legacy="" stream="" api="" uses="" them,="" old="" mode.="" readable.prototype.resume="function()" debug('resume');="" resume(this,="" resume(stream,="" state)="" (!state.resumescheduled)="" state.resumescheduled="true;" processnexttick(resume_,="" stream,="" resume_(stream,="" debug('resume="" stream.read(0);="" stream.emit('resume');="" flow(stream);="" (state.flowing="" !state.reading)="" readable.prototype.pause="function()" debug('call="" pause="" this._readablestate.flowing);="" debug('pause');="" this._readablestate.flowing="false;" this.emit('pause');="" flow(stream)="" debug('flow',="" state.flowing);="" (state.flowing)="" chunk="stream.read();" while="" (null="" wrap="" old-style="" as="" async *not*="" part="" interface.="" unfortunate="" mess="" history.="" readable.prototype.wrap="function(stream)" self="this;" stream.on('end',="" debug('wrapped="" end');="" (state.decoder="" !state.ended)="" (chunk="" chunk.length)="" self.push(chunk);="" self.push(null);="" });="" stream.on('data',="" function(chunk)="" data');="" (state.decoder)="" skip="" over="" falsy="" values="" objectmode="" (state.objectmode="" null="" undefined))="" return;="" (!state.objectmode="" (!chunk="" !chunk.length))="" (!ret)="" stream.pause();="" proxy="" all="" other="" methods.="" important="" wrapping="" filters="" duplexes.="" stream)="" (this[i]="==" undefined="" typeof="" stream[i]="==" 'function')="" this[i]="function(method)" stream[method].apply(stream,="" arguments);="" }(i);="" certain="" events.="" 'close',="" 'destroy',="" 'pause',="" 'resume'];="" foreach(events,="" function(ev)="" stream.on(ev,="" self.emit.bind(self,="" ev));="" consume="" some="" bytes,="" simply="" unpause="" underlying="" stream.="" self._read="function(n)" _read',="" n);="" (paused)="" stream.resume();="" self;="" exposed="" testing="" purposes="" only.="" readable._fromlist="fromList;" pluck="" off="" bytes="" array="" buffers.="" length="" combined="" lengths="" buffers="" list.="" fromlist(n,="" list="state.buffer;" stringmode="!!state.decoder;" ret;="" nothing="" list,="" definitely="" empty.="" (list.length="==" null;="" (length="==" (objectmode)="" (!n="">= length) {
// read it all, truncate the array.
if (stringMode)
ret = list.join('');
else if (list.length === 1)
ret = list[0];
else
ret = Buffer.concat(list, length);
list.length = 0;
} else {
// read just some of it.
if (n < list[0].length) {
// just take a part of the first list item.
// slice is the same for buffers and strings.
var buf = list[0];
ret = buf.slice(0, n);
list[0] = buf.slice(n);
} else if (n === list[0].length) {
// first list is a perfect match
ret = list.shift();
} else {
// complex case.
// we have enough to cover it, but it spans past the first buffer.
if (stringMode)
ret = '';
else
ret = new Buffer(n);
var c = 0;
for (var i = 0, l = list.length; i < l && c < n; i++) {
var buf = list[0];
var cpy = Math.min(n - c, buf.length);
if (stringMode)
ret += buf.slice(0, cpy);
else
buf.copy(ret, c, 0, cpy);
if (cpy < buf.length)
list[0] = buf.slice(cpy);
else
list.shift();
c += cpy;
}
}
}
return ret;
}
function endReadable(stream) {
var state = stream._readableState;
// If we get here before consuming all the bytes, then that is a
// bug in node. Should never happen.
if (state.length > 0)
throw new Error('endReadable called on non-empty stream');
if (!state.endEmitted) {
state.ended = true;
processNextTick(endReadableNT, state, stream);
}
}
function endReadableNT(state, stream) {
// Check that we didn't get one last unshift.
if (!state.endEmitted && state.length === 0) {
state.endEmitted = true;
stream.readable = false;
stream.emit('end');
}
}
function forEach (xs, f) {
for (var i = 0, l = xs.length; i < l; i++) {
f(xs[i], i);
}
}
function indexOf (xs, x) {
for (var i = 0, l = xs.length; i < l; i++) {
if (xs[i] === x) return i;
}
return -1;
}
}).call(this,require('_process'))
},{"./_stream_duplex":320,"_process":104,"buffer":45,"core-util-is":150,"events":82,"inherits":204,"isarray":209,"process-nextick-args":243,"string_decoder/":272,"util":19}],322:[function(require,module,exports){
arguments[4][116][0].apply(exports,arguments)
},{"./_stream_duplex":320,"core-util-is":150,"dup":116,"inherits":204}],323:[function(require,module,exports){
arguments[4][117][0].apply(exports,arguments)
},{"./_stream_duplex":320,"buffer":45,"core-util-is":150,"dup":117,"events":82,"inherits":204,"process-nextick-args":243,"util-deprecate":287}],324:[function(require,module,exports){
arguments[4][120][0].apply(exports,arguments)
},{"./lib/_stream_transform.js":322,"dup":120}],325:[function(require,module,exports){
(function (process){
var Transform = require('readable-stream/transform')
, inherits = require('util').inherits
, xtend = require('xtend')
function DestroyableTransform(opts) {
Transform.call(this, opts)
this._destroyed = false
}
inherits(DestroyableTransform, Transform)
DestroyableTransform.prototype.destroy = function(err) {
if (this._destroyed) return
this._destroyed = true
var self = this
process.nextTick(function() {
if (err)
self.emit('error', err)
self.emit('close')
})
}
// a noop _transform function
function noop (chunk, enc, callback) {
callback(null, chunk)
}
// create a new export function, used by both the main export and
// the .ctor export, contains common logic for dealing with arguments
function through2 (construct) {
return function (options, transform, flush) {
if (typeof options == 'function') {
flush = transform
transform = options
options = {}
}
if (typeof transform != 'function')
transform = noop
if (typeof flush != 'function')
flush = null
return construct(options, transform, flush)
}
}
// main export, just make me a transform stream!
module.exports = through2(function (options, transform, flush) {
var t2 = new DestroyableTransform(options)
t2._transform = transform
if (flush)
t2._flush = flush
return t2
})
// make me a reusable prototype that I can `new`, or implicitly `new`
// with a constructor call
module.exports.ctor = through2(function (options, transform, flush) {
function Through2 (override) {
if (!(this instanceof Through2))
return new Through2(override)
this.options = xtend(options, override)
DestroyableTransform.call(this, this.options)
}
inherits(Through2, DestroyableTransform)
Through2.prototype._transform = transform
if (flush)
Through2.prototype._flush = flush
return Through2
})
module.exports.obj = through2(function (options, transform, flush) {
var t2 = new DestroyableTransform(xtend({ objectMode: true, highWaterMark: 16 }, options))
t2._transform = transform
if (flush)
t2._flush = flush
return t2
})
}).call(this,require('_process'))
},{"_process":104,"readable-stream/transform":324,"util":135,"xtend":330}],326:[function(require,module,exports){
// Returns a wrapper function that returns a wrapped callback
// The wrapper function should do some stuff, and return a
// presumably different callback function.
// This makes sure that own properties are retained, so that
// decorations and such are not lost along the way.
module.exports = wrappy
function wrappy (fn, cb) {
if (fn && cb) return wrappy(fn)(cb)
if (typeof fn !== 'function')
throw new TypeError('need wrapper function')
Object.keys(fn).forEach(function (k) {
wrapper[k] = fn[k]
})
return wrapper
function wrapper() {
var args = new Array(arguments.length)
for (var i = 0; i < args.length; i++) {
args[i] = arguments[i]
}
var ret = fn.apply(this, args)
var cb = args[args.length-1]
if (typeof ret === 'function' && ret !== cb) {
Object.keys(cb).forEach(function (k) {
ret[k] = cb[k]
})
}
return ret
}
}
},{}],327:[function(require,module,exports){
var nativeIsArray = Array.isArray
var toString = Object.prototype.toString
module.exports = nativeIsArray || isArray
function isArray(obj) {
return toString.call(obj) === "[object Array]"
}
},{}],328:[function(require,module,exports){
"use strict";
var window = require("global/window")
var once = require("once")
var isFunction = require("is-function")
var parseHeaders = require("parse-headers")
var xtend = require("xtend")
module.exports = createXHR
createXHR.XMLHttpRequest = window.XMLHttpRequest || noop
createXHR.XDomainRequest = "withCredentials" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest
forEachArray(["get", "put", "post", "patch", "head", "delete"], function(method) {
createXHR[method === "delete" ? "del" : method] = function(uri, options, callback) {
options = initParams(uri, options, callback)
options.method = method.toUpperCase()
return _createXHR(options)
}
})
function forEachArray(array, iterator) {
for (var i = 0; i < array.length; i++) {
iterator(array[i])
}
}
function isEmpty(obj){
for(var i in obj){
if(obj.hasOwnProperty(i)) return false
}
return true
}
function initParams(uri, options, callback) {
var params = uri
if (isFunction(options)) {
callback = options
if (typeof uri === "string") {
params = {uri:uri}
}
} else {
params = xtend(options, {uri: uri})
}
params.callback = callback
return params
}
function createXHR(uri, options, callback) {
options = initParams(uri, options, callback)
return _createXHR(options)
}
function _createXHR(options) {
var callback = options.callback
if(typeof callback === "undefined"){
throw new Error("callback argument missing")
}
callback = once(callback)
function readystatechange() {
if (xhr.readyState === 4) {
loadFunc()
}
}
function getBody() {
// Chrome with requestType=blob throws errors arround when even testing access to responseText
var body = undefined
if (xhr.response) {
body = xhr.response
} else if (xhr.responseType === "text" || !xhr.responseType) {
body = xhr.responseText || xhr.responseXML
}
if (isJson) {
try {
body = JSON.parse(body)
} catch (e) {}
}
return body
}
var failureResponse = {
body: undefined,
headers: {},
statusCode: 0,
method: method,
url: uri,
rawRequest: xhr
}
function errorFunc(evt) {
clearTimeout(timeoutTimer)
if(!(evt instanceof Error)){
evt = new Error("" + (evt || "Unknown XMLHttpRequest Error") )
}
evt.statusCode = 0
callback(evt, failureResponse)
}
// will load the data & process the response in a special response object
function loadFunc() {
if (aborted) return
var status
clearTimeout(timeoutTimer)
if(options.useXDR && xhr.status===undefined) {
//IE8 CORS GET successful response doesn't have a status field, but body is fine
status = 200
} else {
status = (xhr.status === 1223 ? 204 : xhr.status)
}
var response = failureResponse
var err = null
if (status !== 0){
response = {
body: getBody(),
statusCode: status,
method: method,
headers: {},
url: uri,
rawRequest: xhr
}
if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE
response.headers = parseHeaders(xhr.getAllResponseHeaders())
}
} else {
err = new Error("Internal XMLHttpRequest Error")
}
callback(err, response, response.body)
}
var xhr = options.xhr || null
if (!xhr) {
if (options.cors || options.useXDR) {
xhr = new createXHR.XDomainRequest()
}else{
xhr = new createXHR.XMLHttpRequest()
}
}
var key
var aborted
var uri = xhr.url = options.uri || options.url
var method = xhr.method = options.method || "GET"
var body = options.body || options.data || null
var headers = xhr.headers = options.headers || {}
var sync = !!options.sync
var isJson = false
var timeoutTimer
if ("json" in options) {
isJson = true
headers["accept"] || headers["Accept"] || (headers["Accept"] = "application/json") //Don't override existing accept header declared by user
if (method !== "GET" && method !== "HEAD") {
headers["content-type"] || headers["Content-Type"] || (headers["Content-Type"] = "application/json") //Don't override existing accept header declared by user
body = JSON.stringify(options.json)
}
}
xhr.onreadystatechange = readystatechange
xhr.onload = loadFunc
xhr.onerror = errorFunc
// IE9 must have onprogress be set to a unique function.
xhr.onprogress = function () {
// IE must die
}
xhr.ontimeout = errorFunc
xhr.open(method, uri, !sync, options.username, options.password)
//has to be after open
if(!sync) {
xhr.withCredentials = !!options.withCredentials
}
// Cannot set timeout with sync request
// not setting timeout on the xhr object, because of old webkits etc. not handling that correctly
// both npm's request and jquery 1.x use this kind of timeout, so this is being consistent
if (!sync && options.timeout > 0 ) {
timeoutTimer = setTimeout(function(){
aborted=true//IE9 may still call readystatechange
xhr.abort("timeout")
var e = new Error("XMLHttpRequest timeout")
e.code = "ETIMEDOUT"
errorFunc(e)
}, options.timeout )
}
if (xhr.setRequestHeader) {
for(key in headers){
if(headers.hasOwnProperty(key)){
xhr.setRequestHeader(key, headers[key])
}
}
} else if (options.headers && !isEmpty(options.headers)) {
throw new Error("Headers cannot be set on an XDomainRequest object")
}
if ("responseType" in options) {
xhr.responseType = options.responseType
}
if ("beforeSend" in options &&
typeof options.beforeSend === "function"
) {
options.beforeSend(xhr)
}
xhr.send(body)
return xhr
}
function noop() {}
},{"global/window":186,"is-function":205,"once":329,"parse-headers":241,"xtend":330}],329:[function(require,module,exports){
module.exports = once
once.proto = once(function () {
Object.defineProperty(Function.prototype, 'once', {
value: function () {
return once(this)
},
configurable: true
})
})
function once (fn) {
var called = false
return function () {
if (called) return
called = true
return fn.apply(this, arguments)
}
}
},{}],330:[function(require,module,exports){
module.exports = extend
var hasOwnProperty = Object.prototype.hasOwnProperty;
function extend() {
var target = {}
for (var i = 0; i < arguments.length; i++) {
var source = arguments[i]
for (var key in source) {
if (hasOwnProperty.call(source, key)) {
target[key] = source[key]
}
}
}
return target
}
},{}],331:[function(require,module,exports){
module.exports = extend
var hasOwnProperty = Object.prototype.hasOwnProperty;
function extend(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i]
for (var key in source) {
if (hasOwnProperty.call(source, key)) {
target[key] = source[key]
}
}
}
return target
}
},{}]},{},[137])
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9saWIvX2VtcHR5LmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9hcGkuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9iYXNlL2J1ZmZlci5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2Jhc2UvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9iYXNlL25vZGUuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9iYXNlL3JlcG9ydGVyLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvY29uc3RhbnRzL2Rlci5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2NvbnN0YW50cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2RlY29kZXJzL2Rlci5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2RlY29kZXJzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvZGVjb2RlcnMvcGVtLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvZW5jb2RlcnMvZGVyLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvZW5jb2RlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9lbmNvZGVycy9wZW0uanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2xpYi9iNjQuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYm4uanMvbGliL2JuLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3JhbmQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvYWVzLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2F1dGhDaXBoZXIuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvYnJvd3Nlci5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9kZWNyeXB0ZXIuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvZW5jcnlwdGVyLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2doYXNoLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2NiYy5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9jZmIuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY2ZiMS5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9jZmI4LmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2N0ci5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9lY2IuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvb2ZiLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL3N0cmVhbUNpcGhlci5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWNpcGhlci9icm93c2VyLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktZGVzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktZGVzL21vZGVzLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktcnNhL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnbi9hbGdvcy5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vYnJvd3Nlci5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vY3VydmVzLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnbi9zaWduLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnbi92ZXJpZnkuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnVmZmVyLXhvci9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnVmZmVyL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2NpcGhlci1iYXNlL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2NvcmUtdXRpbC1pcy9saWIvdXRpbC5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9jcmVhdGUtZWNkaC9icm93c2VyLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2NyZWF0ZS1oYXNoL2Jyb3dzZXIuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvY3JlYXRlLWhhc2gvaGVscGVycy5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9jcmVhdGUtaGFzaC9tZDUuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvY3JlYXRlLWhtYWMvYnJvd3Nlci5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9jcnlwdG8tYnJvd3NlcmlmeS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy9jYmMuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvY2lwaGVyLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Rlcy5qcy9saWIvZGVzL2Rlcy5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy9lZGUuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvdXRpbHMuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvZGlmZmllLWhlbGxtYW4vYnJvd3Nlci5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9kaWZmaWUtaGVsbG1hbi9saWIvZGguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvZGlmZmllLWhlbGxtYW4vbGliL2dlbmVyYXRlUHJpbWUuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvZGlmZmllLWhlbGxtYW4vbGliL3ByaW1lcy5qc29uIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvYmFzZS5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvZWR3YXJkcy5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL21vbnQuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL3Nob3J0LmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZXMuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VjL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9lYy9rZXkuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VjL3NpZ25hdHVyZS5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWRkc2EvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VkZHNhL2tleS5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWRkc2Evc2lnbmF0dXJlLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9obWFjLWRyYmcuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL3ByZWNvbXB1dGVkL3NlY3AyNTZrMS5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvdXRpbHMuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvZWxsaXB0aWMvcGFja2FnZS5qc29uIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvZXZwX2J5dGVzdG9rZXkvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL2NvbW1vbi5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL2htYWMuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9yaXBlbWQuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2luZGV4b2YvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9pcy1idWZmZXIvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9taWxsZXItcmFiaW4vbGliL21yLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL21pbmltYWxpc3RpYy1hc3NlcnQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcGFyc2UtYXNuMS9hZXNpZC5qc29uIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3BhcnNlLWFzbjEvYXNuMS5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXJzZS1hc24xL2ZpeFByb2MuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcGFyc2UtYXNuMS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcGJrZGYyL2Jyb3dzZXIuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy1uZXh0aWNrLWFyZ3MvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1YmxpYy1lbmNyeXB0L2Jyb3dzZXIuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvbWdmLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1YmxpYy1lbmNyeXB0L3ByaXZhdGVEZWNyeXB0LmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1YmxpYy1lbmNyeXB0L3B1YmxpY0VuY3J5cHQuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvd2l0aFB1YmxpYy5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC94b3IuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmFuZG9tYnl0ZXMvYnJvd3Nlci5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZHVwbGV4LmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcGFzc3Rocm91Z2guanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL3JlYWRhYmxlLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS90cmFuc2Zvcm0uanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL3dyaXRhYmxlLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JpcGVtZDE2MC9saWIvcmlwZW1kMTYwLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3NoYS5qcy9oYXNoLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3NoYS5qcy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9zaGEuanMvc2hhLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3NoYS5qcy9zaGExLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3NoYS5qcy9zaGEyMjQuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvc2hhLmpzL3NoYTI1Ni5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9zaGEuanMvc2hhMzg0LmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3NoYS5qcy9zaGE1MTIuanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvc3RyaW5nX2RlY29kZXIvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8ubnZtLWZpc2gvdjUuNC4xL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXRpbC1kZXByZWNhdGUvYnJvd3Nlci5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy91dGlsL3N1cHBvcnQvaXNCdWZmZXJCcm93c2VyLmpzIiwiLi4vLi4vLi4vLi4vLm52bS1maXNoL3Y1LjQuMS9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIsIi4uLy4uLy4uLy4uLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy92bS1icm93c2VyaWZ5L2luZGV4LmpzIiwiaW5kZXguanMiLCJrZXlzLmpzb24iLCJub2RlX21vZHVsZXMvYWJzdHJhY3QtbGV2ZWxkb3duL2Fic3RyYWN0LWNoYWluZWQtYmF0Y2guanMiLCJub2RlX21vZHVsZXMvYWJzdHJhY3QtbGV2ZWxkb3duL2Fic3RyYWN0LWl0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2Fic3RyYWN0LWxldmVsZG93bi9hYnN0cmFjdC1sZXZlbGRvd24uanMiLCJub2RlX21vZHVsZXMvYWJzdHJhY3QtbGV2ZWxkb3duL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Fic3RyYWN0LWxldmVsZG93bi9pcy1sZXZlbGRvd24uanMiLCJub2RlX21vZHVsZXMvYWZ0ZXItYWxsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JpdGZpZWxkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXItc3BsaXQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnVmZmVyLWVxdWFscy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW1lbGl6ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaGxvcmlkZS9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtdXRpbC1pcy9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9jdWlkL2Rpc3QvYnJvd3Nlci1jdWlkLmpzIiwibm9kZV9tb2R1bGVzL2RlYnVnL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvZGVidWcvZGVidWcuanMiLCJub2RlX21vZHVsZXMvZGVmZXJyZWQtbGV2ZWxkb3duL2RlZmVycmVkLWl0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2RlZmVycmVkLWxldmVsZG93bi9kZWZlcnJlZC1sZXZlbGRvd24uanMiLCJub2RlX21vZHVsZXMvZGVmaW5lZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kdXBsZXhpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZHVwbGV4aWZ5L25vZGVfbW9kdWxlcy9lbmQtb2Ytc3RyZWFtL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2R1cGxleGlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2VuZC1vZi1zdHJlYW0vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZXJybm8vY3VzdG9tLmpzIiwibm9kZV9tb2R1bGVzL2Vycm5vL2Vycm5vLmpzIiwibm9kZV9tb2R1bGVzL2Vycm5vL25vZGVfbW9kdWxlcy9wcnIvcHJyLmpzIiwibm9kZV9tb2R1bGVzL2Vycm9yL3R5cGVkLmpzIiwibm9kZV9tb2R1bGVzL2V2LXN0b3JlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2V2ZW50LXNvdXJjZS1zdHJlYW0vYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9mb3ItZWFjaC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mcmFtZWQtaGFzaC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mcm9tMi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mcm9tMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2Z1bmN0aW9uYWwtcmVkLWJsYWNrLXRyZWUvcmJ0cmVlLmpzIiwibm9kZV9tb2R1bGVzL2dlbmVyYXRlLWZ1bmN0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2dlbmVyYXRlLW9iamVjdC1wcm9wZXJ0eS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9nZXQtYnJvd3Nlci1ydGMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZ2xvYmFsL2RvY3VtZW50LmpzIiwibm9kZV9tb2R1bGVzL2dsb2JhbC93aW5kb3cuanMiLCJub2RlX21vZHVsZXMvaGF0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2h5cGVybG9nLXNvZGl1bS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oeXBlcmxvZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oeXBlcmxvZy9saWIvZW5jb2RlLmpzIiwibm9kZV9tb2R1bGVzL2h5cGVybG9nL2xpYi9oYXNoLmpzIiwibm9kZV9tb2R1bGVzL2h5cGVybG9nL2xpYi9tZXNzYWdlcy5qcyIsIm5vZGVfbW9kdWxlcy9oeXBlcmxvZy9saWIvcHJvdG9jb2wuanMiLCJub2RlX21vZHVsZXMvaHlwZXJsb2cvbGliL3JlcGxpY2F0ZS5qcyIsIm5vZGVfbW9kdWxlcy9oeXBlcmxvZy9saWIvc29ydGVkLXF1ZXVlLmpzIiwibm9kZV9tb2R1bGVzL2h5cGVybG9nL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcmVhZGFibGUuanMiLCJub2RlX21vZHVsZXMvaHlwZXJsb2cvbm9kZV9tb2R1bGVzL3Rocm91Z2gyL3Rocm91Z2gyLmpzIiwibm9kZV9tb2R1bGVzL2luZGl2aWR1YWwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaW5kaXZpZHVhbC9vbmUtdmVyc2lvbi5qcyIsIm5vZGVfbW9kdWxlcy9pcy1mdW5jdGlvbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pcy1vYmplY3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaXMtcHJvcGVydHkvaXMtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvaXMtdHlwZWRhcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sZW5ndGgtcHJlZml4ZWQtc3RyZWFtL2RlY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9sZW5ndGgtcHJlZml4ZWQtc3RyZWFtL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9sZW5ndGgtcHJlZml4ZWQtc3RyZWFtL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2xlbmd0aC1wcmVmaXhlZC1zdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9sZXZlbC1jb2RlYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sZXZlbC1jb2RlYy9saWIvZW5jb2RpbmdzLmpzIiwibm9kZV9tb2R1bGVzL2xldmVsLWVudW1lcmF0ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sZXZlbC1lcnJvcnMvZXJyb3JzLmpzIiwibm9kZV9tb2R1bGVzL2xldmVsLWl0ZXJhdG9yLXN0cmVhbS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sZXZlbC1sb2dzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2xldmVsLWxvZ3Mvbm9kZV9tb2R1bGVzL2Zyb20yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2xldmVsdXAvbGliL2JhdGNoLmpzIiwibm9kZV9tb2R1bGVzL2xldmVsdXAvbGliL2xldmVsdXAuanMiLCJub2RlX21vZHVsZXMvbGV2ZWx1cC9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9sZXZlbHVwL3BhY2thZ2UuanNvbiIsIm5vZGVfbW9kdWxlcy9sZXhpY29ncmFwaGljLWludGVnZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbGlic29kaXVtLXdyYXBwZXJzL2Rpc3QvbW9kdWxlcy9saWJzb2RpdW0td3JhcHBlcnMuanMiLCJub2RlX21vZHVsZXMvbGlic29kaXVtL2Rpc3QvbW9kdWxlcy9saWJzb2RpdW0uanMiLCJub2RlX21vZHVsZXMvbWFpbi1sb29wL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21lbWRiL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21lbWRvd24vbWVtZG93bi5qcyIsIm5vZGVfbW9kdWxlcy9tZW1kb3duL25vZGVfbW9kdWxlcy9sdGd0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21zL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL211dGV4aWZ5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL25ldHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvb25jZS9vbmNlLmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlLWhlYWRlcnMvcGFyc2UtaGVhZGVycy5qcyIsIm5vZGVfbW9kdWxlcy9wZXJmb3JtYW5jZS1ub3cvbGliL3BlcmZvcm1hbmNlLW5vdy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzLW5leHRpY2stYXJncy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wcm90b2NvbC1idWZmZXJzLXNjaGVtYS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wcm90b2NvbC1idWZmZXJzLXNjaGVtYS9wYXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9wcm90b2NvbC1idWZmZXJzLXNjaGVtYS9zdHJpbmdpZnkuanMiLCJub2RlX21vZHVsZXMvcHJvdG9jb2wtYnVmZmVycy1zY2hlbWEvdG9rZW5pemUuanMiLCJub2RlX21vZHVsZXMvcHJvdG9jb2wtYnVmZmVycy9jb21waWxlLmpzIiwibm9kZV9tb2R1bGVzL3Byb3RvY29sLWJ1ZmZlcnMvZW5jb2RpbmdzLmpzIiwibm9kZV9tb2R1bGVzL3Byb3RvY29sLWJ1ZmZlcnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcHVtcC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yYWYvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9yZWFkYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9zaGEuanMvaGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9zaGEuanMvc2hhMjU2LmpzIiwibm9kZV9tb2R1bGVzL3NpZ25hbGh1Yi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zaWduZWQtdmFyaW50L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NpZ25lZC12YXJpbnQvbm9kZV9tb2R1bGVzL3ZhcmludC9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvc2lnbmVkLXZhcmludC9ub2RlX21vZHVsZXMvdmFyaW50L2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9zaWduZWQtdmFyaW50L25vZGVfbW9kdWxlcy92YXJpbnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc2lnbmVkLXZhcmludC9ub2RlX21vZHVsZXMvdmFyaW50L2xlbmd0aC5qcyIsIm5vZGVfbW9kdWxlcy9zaW1wbGUtcGVlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zb2RpdW0tYnJvd3NlcmlmeS9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3N0cmVhbS1jb2xsZWN0b3IvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3RyaW5nLXRlbXBsYXRlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3N3YXJtbG9nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3N3YXJtbG9nL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcmVhZGFibGUuanMiLCJub2RlX21vZHVsZXMvc3dhcm1sb2cvbm9kZV9tb2R1bGVzL3Rocm91Z2gyL3Rocm91Z2gyLmpzIiwibm9kZV9tb2R1bGVzL3Rocm91Z2gyL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fZHVwbGV4LmpzIiwibm9kZV9tb2R1bGVzL3Rocm91Z2gyL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcmVhZGFibGUuanMiLCJub2RlX21vZHVsZXMvdGhyb3VnaDIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvdGhyb3VnaDIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy90aHJvdWdoMi90aHJvdWdoMi5qcyIsIm5vZGVfbW9kdWxlcy90cmltL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvdmFyaW50L2xlbmd0aC5qcyIsIm5vZGVfbW9kdWxlcy92aXJ0dWFsLWRvbS9jcmVhdGUtZWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy92aXJ0dWFsLWRvbS9kaWZmLmpzIiwibm9kZV9tb2R1bGVzL3ZpcnR1YWwtZG9tL2guanMiLCJub2RlX21vZHVsZXMvdmlydHVhbC1kb20vaW5kZXguanMiLCJub2RlX21vZHVsZXMvdmlydHVhbC1kb20vcGF0Y2guanMiLCJub2RlX21vZHVsZXMvdmlydHVhbC1kb20vdmRvbS9hcHBseS1wcm9wZXJ0aWVzLmpzIiwibm9kZV9tb2R1bGVzL3ZpcnR1YWwtZG9tL3Zkb20vY3JlYXRlLWVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvdmlydHVhbC1kb20vdmRvbS9kb20taW5kZXguanMiLCJub2RlX21vZHVsZXMvdmlydHVhbC1kb20vdmRvbS9wYXRjaC1vcC5qcyIsIm5vZGVfbW9kdWxlcy92aXJ0dWFsLWRvbS92ZG9tL3BhdGNoLmpzIiwibm9kZV9tb2R1bGVzL3ZpcnR1YWwtZG9tL3Zkb20vdXBkYXRlLXdpZGdldC5qcyIsIm5vZGVfbW9kdWxlcy92aXJ0dWFsLWRvbS92aXJ0dWFsLWh5cGVyc2NyaXB0L2hvb2tzL2V2LWhvb2suanMiLCJub2RlX21vZHVsZXMvdmlydHVhbC1kb20vdmlydHVhbC1oeXBlcnNjcmlwdC9ob29rcy9zb2Z0LXNldC1ob29rLmpzIiwibm9kZV9tb2R1bGVzL3ZpcnR1YWwtZG9tL3ZpcnR1YWwtaHlwZXJzY3JpcHQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdmlydHVhbC1kb20vdmlydHVhbC1oeXBlcnNjcmlwdC9wYXJzZS10YWcuanMiLCJub2RlX21vZHVsZXMvdmlydHVhbC1kb20vdm5vZGUvaGFuZGxlLXRodW5rLmpzIiwibm9kZV9tb2R1bGVzL3ZpcnR1YWwtZG9tL3Zub2RlL2lzLXRodW5rLmpzIiwibm9kZV9tb2R1bGVzL3ZpcnR1YWwtZG9tL3Zub2RlL2lzLXZob29rLmpzIiwibm9kZV9tb2R1bGVzL3ZpcnR1YWwtZG9tL3Zub2RlL2lzLXZub2RlLmpzIiwibm9kZV9tb2R1bGVzL3ZpcnR1YWwtZG9tL3Zub2RlL2lzLXZ0ZXh0LmpzIiwibm9kZV9tb2R1bGVzL3ZpcnR1YWwtZG9tL3Zub2RlL2lzLXdpZGdldC5qcyIsIm5vZGVfbW9kdWxlcy92aXJ0dWFsLWRvbS92bm9kZS92ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL3ZpcnR1YWwtZG9tL3Zub2RlL3Zub2RlLmpzIiwibm9kZV9tb2R1bGVzL3ZpcnR1YWwtZG9tL3Zub2RlL3ZwYXRjaC5qcyIsIm5vZGVfbW9kdWxlcy92aXJ0dWFsLWRvbS92bm9kZS92dGV4dC5qcyIsIm5vZGVfbW9kdWxlcy92aXJ0dWFsLWRvbS92dHJlZS9kaWZmLXByb3BzLmpzIiwibm9kZV9tb2R1bGVzL3ZpcnR1YWwtZG9tL3Z0cmVlL2RpZmYuanMiLCJub2RlX21vZHVsZXMvd2VicnRjLXN3YXJtL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3dlYnJ0Yy1zd2FybS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3dlYnJ0Yy1zd2FybS9ub2RlX21vZHVsZXMvdGhyb3VnaDIvdGhyb3VnaDIuanMiLCJub2RlX21vZHVsZXMvd3JhcHB5L3dyYXBweS5qcyIsIm5vZGVfbW9kdWxlcy94LWlzLWFycmF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3hoci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy94aHIvbm9kZV9tb2R1bGVzL29uY2Uvb25jZS5qcyIsIm5vZGVfbW9kdWxlcy94dGVuZC9pbW11dGFibGUuanMiLCJub2RlX21vZHVsZXMveHRlbmQvbXV0YWJsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0bkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25VQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDajFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDakxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNqR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDeklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMxSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN6TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM5NkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMzR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3BEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDaFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNwS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNzRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNXdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMxU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGpCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3JIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDM0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbkNBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQy84QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2poQkE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBOztBQ0RBO0FBQ0E7OztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2xOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNwR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7OztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBOzs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMzR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2xPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUMvOEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDelRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FDLzhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbitCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN1VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7O0FDLzhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNoR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDOUJBO0FBQ0E7QUFDQTs7Ozs7OztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FDLzhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDL1lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3pwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDaFBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDOWZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNsU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDaEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN2N0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDak5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDN2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ25oQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQy84QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3Q5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2xOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNsWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNoR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM2FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7QUMvOEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIiLCJ2YXIgYXNuMSA9IGV4cG9ydHM7XG5cbmFzbjEuYmlnbnVtID0gcmVxdWlyZSgnYm4uanMnKTtcblxuYXNuMS5kZWZpbmUgPSByZXF1aXJlKCcuL2FzbjEvYXBpJykuZGVmaW5lO1xuYXNuMS5iYXNlID0gcmVxdWlyZSgnLi9hc24xL2Jhc2UnKTtcbmFzbjEuY29uc3RhbnRzID0gcmVxdWlyZSgnLi9hc24xL2NvbnN0YW50cycpO1xuYXNuMS5kZWNvZGVycyA9IHJlcXVpcmUoJy4vYXNuMS9kZWNvZGVycycpO1xuYXNuMS5lbmNvZGVycyA9IHJlcXVpcmUoJy4vYXNuMS9lbmNvZGVycycpO1xuIiwidmFyIGFzbjEgPSByZXF1aXJlKCcuLi9hc24xJyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG52YXIgYXBpID0gZXhwb3J0cztcblxuYXBpLmRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZShuYW1lLCBib2R5KSB7XG4gIHJldHVybiBuZXcgRW50aXR5KG5hbWUsIGJvZHkpO1xufTtcblxuZnVuY3Rpb24gRW50aXR5KG5hbWUsIGJvZHkpIHtcbiAgdGhpcy5uYW1lID0gbmFtZTtcbiAgdGhpcy5ib2R5ID0gYm9keTtcblxuICB0aGlzLmRlY29kZXJzID0ge307XG4gIHRoaXMuZW5jb2RlcnMgPSB7fTtcbn07XG5cbkVudGl0eS5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkID0gZnVuY3Rpb24gY3JlYXRlTmFtZWQoYmFzZSkge1xuICB2YXIgbmFtZWQ7XG4gIHRyeSB7XG4gICAgbmFtZWQgPSByZXF1aXJlKCd2bScpLnJ1bkluVGhpc0NvbnRleHQoXG4gICAgICAnKGZ1bmN0aW9uICcgKyB0aGlzLm5hbWUgKyAnKGVudGl0eSkge1xcbicgK1xuICAgICAgJyAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XFxuJyArXG4gICAgICAnfSknXG4gICAgKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIG5hbWVkID0gZnVuY3Rpb24gKGVudGl0eSkge1xuICAgICAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XG4gICAgfTtcbiAgfVxuICBpbmhlcml0cyhuYW1lZCwgYmFzZSk7XG4gIG5hbWVkLnByb3RvdHlwZS5faW5pdE5hbWVkID0gZnVuY3Rpb24gaW5pdG5hbWVkKGVudGl0eSkge1xuICAgIGJhc2UuY2FsbCh0aGlzLCBlbnRpdHkpO1xuICB9O1xuXG4gIHJldHVybiBuZXcgbmFtZWQodGhpcyk7XG59O1xuXG5FbnRpdHkucHJvdG90eXBlLl9nZXREZWNvZGVyID0gZnVuY3Rpb24gX2dldERlY29kZXIoZW5jKSB7XG4gIC8vIExhemlseSBjcmVhdGUgZGVjb2RlclxuICBpZiAoIXRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkoZW5jKSlcbiAgICB0aGlzLmRlY29kZXJzW2VuY10gPSB0aGlzLl9jcmVhdGVOYW1lZChhc24xLmRlY29kZXJzW2VuY10pO1xuICByZXR1cm4gdGhpcy5kZWNvZGVyc1tlbmNdO1xufTtcblxuRW50aXR5LnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoZGF0YSwgZW5jLCBvcHRpb25zKSB7XG4gIHJldHVybiB0aGlzLl9nZXREZWNvZGVyKGVuYykuZGVjb2RlKGRhdGEsIG9wdGlvbnMpO1xufTtcblxuRW50aXR5LnByb3RvdHlwZS5fZ2V0RW5jb2RlciA9IGZ1bmN0aW9uIF9nZXRFbmNvZGVyKGVuYykge1xuICAvLyBMYXppbHkgY3JlYXRlIGVuY29kZXJcbiAgaWYgKCF0aGlzLmVuY29kZXJzLmhhc093blByb3BlcnR5KGVuYykpXG4gICAgdGhpcy5lbmNvZGVyc1tlbmNdID0gdGhpcy5fY3JlYXRlTmFtZWQoYXNuMS5lbmNvZGVyc1tlbmNdKTtcbiAgcmV0dXJuIHRoaXMuZW5jb2RlcnNbZW5jXTtcbn07XG5cbkVudGl0eS5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGRhdGEsIGVuYywgLyogaW50ZXJuYWwgKi8gcmVwb3J0ZXIpIHtcbiAgcmV0dXJuIHRoaXMuX2dldEVuY29kZXIoZW5jKS5lbmNvZGUoZGF0YSwgcmVwb3J0ZXIpO1xufTtcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG52YXIgUmVwb3J0ZXIgPSByZXF1aXJlKCcuLi9iYXNlJykuUmVwb3J0ZXI7XG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuXG5mdW5jdGlvbiBEZWNvZGVyQnVmZmVyKGJhc2UsIG9wdGlvbnMpIHtcbiAgUmVwb3J0ZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYmFzZSkpIHtcbiAgICB0aGlzLmVycm9yKCdJbnB1dCBub3QgQnVmZmVyJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5iYXNlID0gYmFzZTtcbiAgdGhpcy5vZmZzZXQgPSAwO1xuICB0aGlzLmxlbmd0aCA9IGJhc2UubGVuZ3RoO1xufVxuaW5oZXJpdHMoRGVjb2RlckJ1ZmZlciwgUmVwb3J0ZXIpO1xuZXhwb3J0cy5EZWNvZGVyQnVmZmVyID0gRGVjb2RlckJ1ZmZlcjtcblxuRGVjb2RlckJ1ZmZlci5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uIHNhdmUoKSB7XG4gIHJldHVybiB7IG9mZnNldDogdGhpcy5vZmZzZXQsIHJlcG9ydGVyOiBSZXBvcnRlci5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpIH07XG59O1xuXG5EZWNvZGVyQnVmZmVyLnByb3RvdHlwZS5yZXN0b3JlID0gZnVuY3Rpb24gcmVzdG9yZShzYXZlKSB7XG4gIC8vIFJldHVybiBza2lwcGVkIGRhdGFcbiAgdmFyIHJlcyA9IG5ldyBEZWNvZGVyQnVmZmVyKHRoaXMuYmFzZSk7XG4gIHJlcy5vZmZzZXQgPSBzYXZlLm9mZnNldDtcbiAgcmVzLmxlbmd0aCA9IHRoaXMub2Zmc2V0O1xuXG4gIHRoaXMub2Zmc2V0ID0gc2F2ZS5vZmZzZXQ7XG4gIFJlcG9ydGVyLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcywgc2F2ZS5yZXBvcnRlcik7XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cbkRlY29kZXJCdWZmZXIucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiBpc0VtcHR5KCkge1xuICByZXR1cm4gdGhpcy5vZmZzZXQgPT09IHRoaXMubGVuZ3RoO1xufTtcblxuRGVjb2RlckJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4KGZhaWwpIHtcbiAgaWYgKHRoaXMub2Zmc2V0ICsgMSA8PSB0aGlzLmxlbmd0aClcbiAgICByZXR1cm4gdGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCB0cnVlKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmVycm9yKGZhaWwgfHwgJ0RlY29kZXJCdWZmZXIgb3ZlcnJ1bicpO1xufVxuXG5EZWNvZGVyQnVmZmVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24gc2tpcChieXRlcywgZmFpbCkge1xuICBpZiAoISh0aGlzLm9mZnNldCArIGJ5dGVzIDw9IHRoaXMubGVuZ3RoKSlcbiAgICByZXR1cm4gdGhpcy5lcnJvcihmYWlsIHx8ICdEZWNvZGVyQnVmZmVyIG92ZXJydW4nKTtcblxuICB2YXIgcmVzID0gbmV3IERlY29kZXJCdWZmZXIodGhpcy5iYXNlKTtcblxuICAvLyBTaGFyZSByZXBvcnRlciBzdGF0ZVxuICByZXMuX3JlcG9ydGVyU3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHJlcy5vZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgcmVzLmxlbmd0aCA9IHRoaXMub2Zmc2V0ICsgYnl0ZXM7XG4gIHRoaXMub2Zmc2V0ICs9IGJ5dGVzO1xuICByZXR1cm4gcmVzO1xufVxuXG5EZWNvZGVyQnVmZmVyLnByb3RvdHlwZS5yYXcgPSBmdW5jdGlvbiByYXcoc2F2ZSkge1xuICByZXR1cm4gdGhpcy5iYXNlLnNsaWNlKHNhdmUgPyBzYXZlLm9mZnNldCA6IHRoaXMub2Zmc2V0LCB0aGlzLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIEVuY29kZXJCdWZmZXIodmFsdWUsIHJlcG9ydGVyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgIGlmICghKGl0ZW0gaW5zdGFuY2VvZiBFbmNvZGVyQnVmZmVyKSlcbiAgICAgICAgaXRlbSA9IG5ldyBFbmNvZGVyQnVmZmVyKGl0ZW0sIHJlcG9ydGVyKTtcbiAgICAgIHRoaXMubGVuZ3RoICs9IGl0ZW0ubGVuZ3RoO1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfSwgdGhpcyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIGlmICghKDAgPD0gdmFsdWUgJiYgdmFsdWUgPD0gMHhmZikpXG4gICAgICByZXR1cm4gcmVwb3J0ZXIuZXJyb3IoJ25vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWUnKTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5sZW5ndGggPSAxO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5sZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVwb3J0ZXIuZXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGU6ICcgKyB0eXBlb2YgdmFsdWUpO1xuICB9XG59XG5leHBvcnRzLkVuY29kZXJCdWZmZXIgPSBFbmNvZGVyQnVmZmVyO1xuXG5FbmNvZGVyQnVmZmVyLnByb3RvdHlwZS5qb2luID0gZnVuY3Rpb24gam9pbihvdXQsIG9mZnNldCkge1xuICBpZiAoIW91dClcbiAgICBvdXQgPSBuZXcgQnVmZmVyKHRoaXMubGVuZ3RoKTtcbiAgaWYgKCFvZmZzZXQpXG4gICAgb2Zmc2V0ID0gMDtcblxuICBpZiAodGhpcy5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuIG91dDtcblxuICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgIHRoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgICBpdGVtLmpvaW4ob3V0LCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IGl0ZW0ubGVuZ3RoO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICBvdXRbb2Zmc2V0XSA9IHRoaXMudmFsdWU7XG4gICAgZWxzZSBpZiAodHlwZW9mIHRoaXMudmFsdWUgPT09ICdzdHJpbmcnKVxuICAgICAgb3V0LndyaXRlKHRoaXMudmFsdWUsIG9mZnNldCk7XG4gICAgZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKHRoaXMudmFsdWUpKVxuICAgICAgdGhpcy52YWx1ZS5jb3B5KG91dCwgb2Zmc2V0KTtcbiAgICBvZmZzZXQgKz0gdGhpcy5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufTtcbiIsInZhciBiYXNlID0gZXhwb3J0cztcblxuYmFzZS5SZXBvcnRlciA9IHJlcXVpcmUoJy4vcmVwb3J0ZXInKS5SZXBvcnRlcjtcbmJhc2UuRGVjb2RlckJ1ZmZlciA9IHJlcXVpcmUoJy4vYnVmZmVyJykuRGVjb2RlckJ1ZmZlcjtcbmJhc2UuRW5jb2RlckJ1ZmZlciA9IHJlcXVpcmUoJy4vYnVmZmVyJykuRW5jb2RlckJ1ZmZlcjtcbmJhc2UuTm9kZSA9IHJlcXVpcmUoJy4vbm9kZScpO1xuIiwidmFyIFJlcG9ydGVyID0gcmVxdWlyZSgnLi4vYmFzZScpLlJlcG9ydGVyO1xudmFyIEVuY29kZXJCdWZmZXIgPSByZXF1aXJlKCcuLi9iYXNlJykuRW5jb2RlckJ1ZmZlcjtcbnZhciBEZWNvZGVyQnVmZmVyID0gcmVxdWlyZSgnLi4vYmFzZScpLkRlY29kZXJCdWZmZXI7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG4vLyBTdXBwb3J0ZWQgdGFnc1xudmFyIHRhZ3MgPSBbXG4gICdzZXEnLCAnc2Vxb2YnLCAnc2V0JywgJ3NldG9mJywgJ29jdHN0cicsICdiaXRzdHInLCAnb2JqaWQnLCAnYm9vbCcsXG4gICdnZW50aW1lJywgJ3V0Y3RpbWUnLCAnbnVsbF8nLCAnZW51bScsICdpbnQnLCAnaWE1c3RyJywgJ3V0ZjhzdHInLCAnYm1wc3RyJyxcbiAgJ251bXN0cicsICdwcmludHN0cidcbl07XG5cbi8vIFB1YmxpYyBtZXRob2RzIGxpc3RcbnZhciBtZXRob2RzID0gW1xuICAna2V5JywgJ29iaicsICd1c2UnLCAnb3B0aW9uYWwnLCAnZXhwbGljaXQnLCAnaW1wbGljaXQnLCAnZGVmJywgJ2Nob2ljZScsXG4gICdhbnknLCAnY29udGFpbnMnXG5dLmNvbmNhdCh0YWdzKTtcblxuLy8gT3ZlcnJpZGVkIG1ldGhvZHMgbGlzdFxudmFyIG92ZXJyaWRlZCA9IFtcbiAgJ19wZWVrVGFnJywgJ19kZWNvZGVUYWcnLCAnX3VzZScsXG4gICdfZGVjb2RlU3RyJywgJ19kZWNvZGVPYmppZCcsICdfZGVjb2RlVGltZScsXG4gICdfZGVjb2RlTnVsbCcsICdfZGVjb2RlSW50JywgJ19kZWNvZGVCb29sJywgJ19kZWNvZGVMaXN0JyxcblxuICAnX2VuY29kZUNvbXBvc2l0ZScsICdfZW5jb2RlU3RyJywgJ19lbmNvZGVPYmppZCcsICdfZW5jb2RlVGltZScsXG4gICdfZW5jb2RlTnVsbCcsICdfZW5jb2RlSW50JywgJ19lbmNvZGVCb29sJ1xuXTtcblxuZnVuY3Rpb24gTm9kZShlbmMsIHBhcmVudCkge1xuICB2YXIgc3RhdGUgPSB7fTtcbiAgdGhpcy5fYmFzZVN0YXRlID0gc3RhdGU7XG5cbiAgc3RhdGUuZW5jID0gZW5jO1xuXG4gIHN0YXRlLnBhcmVudCA9IHBhcmVudCB8fCBudWxsO1xuICBzdGF0ZS5jaGlsZHJlbiA9IG51bGw7XG5cbiAgLy8gU3RhdGVcbiAgc3RhdGUudGFnID0gbnVsbDtcbiAgc3RhdGUuYXJncyA9IG51bGw7XG4gIHN0YXRlLnJldmVyc2VBcmdzID0gbnVsbDtcbiAgc3RhdGUuY2hvaWNlID0gbnVsbDtcbiAgc3RhdGUub3B0aW9uYWwgPSBmYWxzZTtcbiAgc3RhdGUuYW55ID0gZmFsc2U7XG4gIHN0YXRlLm9iaiA9IGZhbHNlO1xuICBzdGF0ZS51c2UgPSBudWxsO1xuICBzdGF0ZS51c2VEZWNvZGVyID0gbnVsbDtcbiAgc3RhdGUua2V5ID0gbnVsbDtcbiAgc3RhdGVbJ2RlZmF1bHQnXSA9IG51bGw7XG4gIHN0YXRlLmV4cGxpY2l0ID0gbnVsbDtcbiAgc3RhdGUuaW1wbGljaXQgPSBudWxsO1xuICBzdGF0ZS5jb250YWlucyA9IG51bGw7XG5cbiAgLy8gU2hvdWxkIGNyZWF0ZSBuZXcgaW5zdGFuY2Ugb24gZWFjaCBtZXRob2RcbiAgaWYgKCFzdGF0ZS5wYXJlbnQpIHtcbiAgICBzdGF0ZS5jaGlsZHJlbiA9IFtdO1xuICAgIHRoaXMuX3dyYXAoKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBOb2RlO1xuXG52YXIgc3RhdGVQcm9wcyA9IFtcbiAgJ2VuYycsICdwYXJlbnQnLCAnY2hpbGRyZW4nLCAndGFnJywgJ2FyZ3MnLCAncmV2ZXJzZUFyZ3MnLCAnY2hvaWNlJyxcbiAgJ29wdGlvbmFsJywgJ2FueScsICdvYmonLCAndXNlJywgJ2FsdGVyZWRVc2UnLCAna2V5JywgJ2RlZmF1bHQnLCAnZXhwbGljaXQnLFxuICAnaW1wbGljaXQnXG5dO1xuXG5Ob2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uIGNsb25lKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gIHZhciBjc3RhdGUgPSB7fTtcbiAgc3RhdGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcbiAgICBjc3RhdGVbcHJvcF0gPSBzdGF0ZVtwcm9wXTtcbiAgfSk7XG4gIHZhciByZXMgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihjc3RhdGUucGFyZW50KTtcbiAgcmVzLl9iYXNlU3RhdGUgPSBjc3RhdGU7XG4gIHJldHVybiByZXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fd3JhcCA9IGZ1bmN0aW9uIHdyYXAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgbWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIHRoaXNbbWV0aG9kXSA9IGZ1bmN0aW9uIF93cmFwcGVkTWV0aG9kKCkge1xuICAgICAgdmFyIGNsb25lID0gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7XG4gICAgICBzdGF0ZS5jaGlsZHJlbi5wdXNoKGNsb25lKTtcbiAgICAgIHJldHVybiBjbG9uZVttZXRob2RdLmFwcGx5KGNsb25lLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH0sIHRoaXMpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGJvZHkpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS5wYXJlbnQgPT09IG51bGwpO1xuICBib2R5LmNhbGwodGhpcyk7XG5cbiAgLy8gRmlsdGVyIGNoaWxkcmVuXG4gIHN0YXRlLmNoaWxkcmVuID0gc3RhdGUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkLl9iYXNlU3RhdGUucGFyZW50ID09PSB0aGlzO1xuICB9LCB0aGlzKTtcbiAgYXNzZXJ0LmVxdWFsKHN0YXRlLmNoaWxkcmVuLmxlbmd0aCwgMSwgJ1Jvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCcpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX3VzZUFyZ3MgPSBmdW5jdGlvbiB1c2VBcmdzKGFyZ3MpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIC8vIEZpbHRlciBjaGlsZHJlbiBhbmQgYXJnc1xuICB2YXIgY2hpbGRyZW4gPSBhcmdzLmZpbHRlcihmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gYXJnIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcjtcbiAgfSwgdGhpcyk7XG4gIGFyZ3MgPSBhcmdzLmZpbHRlcihmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gIShhcmcgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSwgdGhpcyk7XG5cbiAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPT0gMCkge1xuICAgIGFzc2VydChzdGF0ZS5jaGlsZHJlbiA9PT0gbnVsbCk7XG4gICAgc3RhdGUuY2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgIC8vIFJlcGxhY2UgcGFyZW50IHRvIG1haW50YWluIGJhY2t3YXJkIGxpbmtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICBjaGlsZC5fYmFzZVN0YXRlLnBhcmVudCA9IHRoaXM7XG4gICAgfSwgdGhpcyk7XG4gIH1cbiAgaWYgKGFyZ3MubGVuZ3RoICE9PSAwKSB7XG4gICAgYXNzZXJ0KHN0YXRlLmFyZ3MgPT09IG51bGwpO1xuICAgIHN0YXRlLmFyZ3MgPSBhcmdzO1xuICAgIHN0YXRlLnJldmVyc2VBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24oYXJnKSB7XG4gICAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ29iamVjdCcgfHwgYXJnLmNvbnN0cnVjdG9yICE9PSBPYmplY3QpXG4gICAgICAgIHJldHVybiBhcmc7XG5cbiAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKGFyZykuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKGtleSA9PSAoa2V5IHwgMCkpXG4gICAgICAgICAga2V5IHw9IDA7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFyZ1trZXldO1xuICAgICAgICByZXNbdmFsdWVdID0ga2V5O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xuICB9XG59O1xuXG4vL1xuLy8gT3ZlcnJpZGVkIG1ldGhvZHNcbi8vXG5cbm92ZXJyaWRlZC5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICBOb2RlLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gX292ZXJyaWRlZCgpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1ldGhvZCArICcgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogJyArIHN0YXRlLmVuYyk7XG4gIH07XG59KTtcblxuLy9cbi8vIFB1YmxpYyBtZXRob2RzXG4vL1xuXG50YWdzLmZvckVhY2goZnVuY3Rpb24odGFnKSB7XG4gIE5vZGUucHJvdG90eXBlW3RhZ10gPSBmdW5jdGlvbiBfdGFnTWV0aG9kKCkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICBhc3NlcnQoc3RhdGUudGFnID09PSBudWxsKTtcbiAgICBzdGF0ZS50YWcgPSB0YWc7XG5cbiAgICB0aGlzLl91c2VBcmdzKGFyZ3MpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG59KTtcblxuTm9kZS5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGl0ZW0pIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS51c2UgPT09IG51bGwpO1xuICBzdGF0ZS51c2UgPSBpdGVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUub3B0aW9uYWwgPSBmdW5jdGlvbiBvcHRpb25hbCgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIHN0YXRlLm9wdGlvbmFsID0gdHJ1ZTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbk5vZGUucHJvdG90eXBlLmRlZiA9IGZ1bmN0aW9uIGRlZih2YWwpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZVsnZGVmYXVsdCddID09PSBudWxsKTtcbiAgc3RhdGVbJ2RlZmF1bHQnXSA9IHZhbDtcbiAgc3RhdGUub3B0aW9uYWwgPSB0cnVlO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuZXhwbGljaXQgPSBmdW5jdGlvbiBleHBsaWNpdChudW0pIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS5leHBsaWNpdCA9PT0gbnVsbCAmJiBzdGF0ZS5pbXBsaWNpdCA9PT0gbnVsbCk7XG4gIHN0YXRlLmV4cGxpY2l0ID0gbnVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuaW1wbGljaXQgPSBmdW5jdGlvbiBpbXBsaWNpdChudW0pIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS5leHBsaWNpdCA9PT0gbnVsbCAmJiBzdGF0ZS5pbXBsaWNpdCA9PT0gbnVsbCk7XG4gIHN0YXRlLmltcGxpY2l0ID0gbnVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUub2JqID0gZnVuY3Rpb24gb2JqKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICBzdGF0ZS5vYmogPSB0cnVlO1xuXG4gIGlmIChhcmdzLmxlbmd0aCAhPT0gMClcbiAgICB0aGlzLl91c2VBcmdzKGFyZ3MpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUua2V5ID0gZnVuY3Rpb24ga2V5KG5ld0tleSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgYXNzZXJ0KHN0YXRlLmtleSA9PT0gbnVsbCk7XG4gIHN0YXRlLmtleSA9IG5ld0tleTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbk5vZGUucHJvdG90eXBlLmFueSA9IGZ1bmN0aW9uIGFueSgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIHN0YXRlLmFueSA9IHRydWU7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5jaG9pY2UgPSBmdW5jdGlvbiBjaG9pY2Uob2JqKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBhc3NlcnQoc3RhdGUuY2hvaWNlID09PSBudWxsKTtcbiAgc3RhdGUuY2hvaWNlID0gb2JqO1xuICB0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmpba2V5XTtcbiAgfSkpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiBjb250YWlucyhpdGVtKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBhc3NlcnQoc3RhdGUudXNlID09PSBudWxsKTtcbiAgc3RhdGUuY29udGFpbnMgPSBpdGVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIERlY29kaW5nXG4vL1xuXG5Ob2RlLnByb3RvdHlwZS5fZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICAvLyBEZWNvZGUgcm9vdCBub2RlXG4gIGlmIChzdGF0ZS5wYXJlbnQgPT09IG51bGwpXG4gICAgcmV0dXJuIGlucHV0LndyYXBSZXN1bHQoc3RhdGUuY2hpbGRyZW5bMF0uX2RlY29kZShpbnB1dCkpO1xuXG4gIHZhciByZXN1bHQgPSBzdGF0ZVsnZGVmYXVsdCddO1xuICB2YXIgcHJlc2VudCA9IHRydWU7XG5cbiAgdmFyIHByZXZLZXk7XG4gIGlmIChzdGF0ZS5rZXkgIT09IG51bGwpXG4gICAgcHJldktleSA9IGlucHV0LmVudGVyS2V5KHN0YXRlLmtleSk7XG5cbiAgLy8gQ2hlY2sgaWYgdGFnIGlzIHRoZXJlXG4gIGlmIChzdGF0ZS5vcHRpb25hbCkge1xuICAgIHZhciB0YWcgPSBudWxsO1xuICAgIGlmIChzdGF0ZS5leHBsaWNpdCAhPT0gbnVsbClcbiAgICAgIHRhZyA9IHN0YXRlLmV4cGxpY2l0O1xuICAgIGVsc2UgaWYgKHN0YXRlLmltcGxpY2l0ICE9PSBudWxsKVxuICAgICAgdGFnID0gc3RhdGUuaW1wbGljaXQ7XG4gICAgZWxzZSBpZiAoc3RhdGUudGFnICE9PSBudWxsKVxuICAgICAgdGFnID0gc3RhdGUudGFnO1xuXG4gICAgaWYgKHRhZyA9PT0gbnVsbCAmJiAhc3RhdGUuYW55KSB7XG4gICAgICAvLyBUcmlhbCBhbmQgRXJyb3JcbiAgICAgIHZhciBzYXZlID0gaW5wdXQuc2F2ZSgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHN0YXRlLmNob2ljZSA9PT0gbnVsbClcbiAgICAgICAgICB0aGlzLl9kZWNvZGVHZW5lcmljKHN0YXRlLnRhZywgaW5wdXQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhpcy5fZGVjb2RlQ2hvaWNlKGlucHV0KTtcbiAgICAgICAgcHJlc2VudCA9IHRydWU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHByZXNlbnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlucHV0LnJlc3RvcmUoc2F2ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZXNlbnQgPSB0aGlzLl9wZWVrVGFnKGlucHV0LCB0YWcsIHN0YXRlLmFueSk7XG5cbiAgICAgIGlmIChpbnB1dC5pc0Vycm9yKHByZXNlbnQpKVxuICAgICAgICByZXR1cm4gcHJlc2VudDtcbiAgICB9XG4gIH1cblxuICAvLyBQdXNoIG9iamVjdCBvbiBzdGFja1xuICB2YXIgcHJldk9iajtcbiAgaWYgKHN0YXRlLm9iaiAmJiBwcmVzZW50KVxuICAgIHByZXZPYmogPSBpbnB1dC5lbnRlck9iamVjdCgpO1xuXG4gIGlmIChwcmVzZW50KSB7XG4gICAgLy8gVW53cmFwIGV4cGxpY2l0IHZhbHVlc1xuICAgIGlmIChzdGF0ZS5leHBsaWNpdCAhPT0gbnVsbCkge1xuICAgICAgdmFyIGV4cGxpY2l0ID0gdGhpcy5fZGVjb2RlVGFnKGlucHV0LCBzdGF0ZS5leHBsaWNpdCk7XG4gICAgICBpZiAoaW5wdXQuaXNFcnJvcihleHBsaWNpdCkpXG4gICAgICAgIHJldHVybiBleHBsaWNpdDtcbiAgICAgIGlucHV0ID0gZXhwbGljaXQ7XG4gICAgfVxuXG4gICAgLy8gVW53cmFwIGltcGxpY2l0IGFuZCBub3JtYWwgdmFsdWVzXG4gICAgaWYgKHN0YXRlLnVzZSA9PT0gbnVsbCAmJiBzdGF0ZS5jaG9pY2UgPT09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0ZS5hbnkpXG4gICAgICAgIHZhciBzYXZlID0gaW5wdXQuc2F2ZSgpO1xuICAgICAgdmFyIGJvZHkgPSB0aGlzLl9kZWNvZGVUYWcoXG4gICAgICAgIGlucHV0LFxuICAgICAgICBzdGF0ZS5pbXBsaWNpdCAhPT0gbnVsbCA/IHN0YXRlLmltcGxpY2l0IDogc3RhdGUudGFnLFxuICAgICAgICBzdGF0ZS5hbnlcbiAgICAgICk7XG4gICAgICBpZiAoaW5wdXQuaXNFcnJvcihib2R5KSlcbiAgICAgICAgcmV0dXJuIGJvZHk7XG5cbiAgICAgIGlmIChzdGF0ZS5hbnkpXG4gICAgICAgIHJlc3VsdCA9IGlucHV0LnJhdyhzYXZlKTtcbiAgICAgIGVsc2VcbiAgICAgICAgaW5wdXQgPSBib2R5O1xuICAgIH1cblxuICAgIC8vIFNlbGVjdCBwcm9wZXIgbWV0aG9kIGZvciB0YWdcbiAgICBpZiAoc3RhdGUuYW55KVxuICAgICAgcmVzdWx0ID0gcmVzdWx0O1xuICAgIGVsc2UgaWYgKHN0YXRlLmNob2ljZSA9PT0gbnVsbClcbiAgICAgIHJlc3VsdCA9IHRoaXMuX2RlY29kZUdlbmVyaWMoc3RhdGUudGFnLCBpbnB1dCk7XG4gICAgZWxzZVxuICAgICAgcmVzdWx0ID0gdGhpcy5fZGVjb2RlQ2hvaWNlKGlucHV0KTtcblxuICAgIGlmIChpbnB1dC5pc0Vycm9yKHJlc3VsdCkpXG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgLy8gRGVjb2RlIGNoaWxkcmVuXG4gICAgaWYgKCFzdGF0ZS5hbnkgJiYgc3RhdGUuY2hvaWNlID09PSBudWxsICYmIHN0YXRlLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICB2YXIgZmFpbCA9IHN0YXRlLmNoaWxkcmVuLnNvbWUoZnVuY3Rpb24gZGVjb2RlQ2hpbGRyZW4oY2hpbGQpIHtcbiAgICAgICAgLy8gTk9URTogV2UgYXJlIGlnbm9yaW5nIGVycm9ycyBoZXJlLCB0byBsZXQgcGFyc2VyIGNvbnRpbnVlIHdpdGggb3RoZXJcbiAgICAgICAgLy8gcGFydHMgb2YgZW5jb2RlZCBkYXRhXG4gICAgICAgIGNoaWxkLl9kZWNvZGUoaW5wdXQpO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmFpbClcbiAgICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG5cbiAgICAvLyBEZWNvZGUgY29udGFpbmVkL2VuY29kZWQgYnkgc2NoZW1hLCBvbmx5IGluIGJpdCBvciBvY3RldCBzdHJpbmdzXG4gICAgaWYgKHN0YXRlLmNvbnRhaW5zICYmIChzdGF0ZS50YWcgPT09ICdvY3RzdHInIHx8IHN0YXRlLnRhZyA9PT0gJ2JpdHN0cicpKSB7XG4gICAgICB2YXIgZGF0YSA9IG5ldyBEZWNvZGVyQnVmZmVyKHJlc3VsdCk7XG4gICAgICByZXN1bHQgPSB0aGlzLl9nZXRVc2Uoc3RhdGUuY29udGFpbnMsIGlucHV0Ll9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShkYXRhKTtcbiAgICB9XG4gIH1cblxuICAvLyBQb3Agb2JqZWN0XG4gIGlmIChzdGF0ZS5vYmogJiYgcHJlc2VudClcbiAgICByZXN1bHQgPSBpbnB1dC5sZWF2ZU9iamVjdChwcmV2T2JqKTtcblxuICAvLyBTZXQga2V5XG4gIGlmIChzdGF0ZS5rZXkgIT09IG51bGwgJiYgKHJlc3VsdCAhPT0gbnVsbCB8fCBwcmVzZW50ID09PSB0cnVlKSlcbiAgICBpbnB1dC5sZWF2ZUtleShwcmV2S2V5LCBzdGF0ZS5rZXksIHJlc3VsdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9kZWNvZGVHZW5lcmljID0gZnVuY3Rpb24gZGVjb2RlR2VuZXJpYyh0YWcsIGlucHV0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBpZiAodGFnID09PSAnc2VxJyB8fCB0YWcgPT09ICdzZXQnKVxuICAgIHJldHVybiBudWxsO1xuICBpZiAodGFnID09PSAnc2Vxb2YnIHx8IHRhZyA9PT0gJ3NldG9mJylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlTGlzdChpbnB1dCwgdGFnLCBzdGF0ZS5hcmdzWzBdKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2N0c3RyJyB8fCB0YWcgPT09ICdiaXRzdHInKVxuICAgIHJldHVybiB0aGlzLl9kZWNvZGVTdHIoaW5wdXQsIHRhZyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ2lhNXN0cicgfHwgdGFnID09PSAndXRmOHN0cicgfHwgdGFnID09PSAnYm1wc3RyJylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlU3RyKGlucHV0LCB0YWcpO1xuICBlbHNlIGlmICh0YWcgPT09ICdudW1zdHInIHx8IHRhZyA9PT0gJ3ByaW50c3RyJylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlU3RyKGlucHV0LCB0YWcpO1xuICBlbHNlIGlmICh0YWcgPT09ICdvYmppZCcgJiYgc3RhdGUuYXJncylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlT2JqaWQoaW5wdXQsIHN0YXRlLmFyZ3NbMF0sIHN0YXRlLmFyZ3NbMV0pO1xuICBlbHNlIGlmICh0YWcgPT09ICdvYmppZCcpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZU9iamlkKGlucHV0LCBudWxsLCBudWxsKTtcbiAgZWxzZSBpZiAodGFnID09PSAnZ2VudGltZScgfHwgdGFnID09PSAndXRjdGltZScpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZVRpbWUoaW5wdXQsIHRhZyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ251bGxfJylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlTnVsbChpbnB1dCk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ2Jvb2wnKVxuICAgIHJldHVybiB0aGlzLl9kZWNvZGVCb29sKGlucHV0KTtcbiAgZWxzZSBpZiAodGFnID09PSAnaW50JyB8fCB0YWcgPT09ICdlbnVtJylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlSW50KGlucHV0LCBzdGF0ZS5hcmdzICYmIHN0YXRlLmFyZ3NbMF0pO1xuICBlbHNlIGlmIChzdGF0ZS51c2UgIT09IG51bGwpXG4gICAgcmV0dXJuIHRoaXMuX2dldFVzZShzdGF0ZS51c2UsIGlucHV0Ll9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShpbnB1dCk7XG4gIGVsc2VcbiAgICByZXR1cm4gaW5wdXQuZXJyb3IoJ3Vua25vd24gdGFnOiAnICsgdGFnKTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9nZXRVc2UgPSBmdW5jdGlvbiBfZ2V0VXNlKGVudGl0eSwgb2JqKSB7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICAvLyBDcmVhdGUgYWx0ZXJlZCB1c2UgZGVjb2RlciBpZiBpbXBsaWNpdCBpcyBzZXRcbiAgc3RhdGUudXNlRGVjb2RlciA9IHRoaXMuX3VzZShlbnRpdHksIG9iaik7XG4gIGFzc2VydChzdGF0ZS51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50ID09PSBudWxsKTtcbiAgc3RhdGUudXNlRGVjb2RlciA9IHN0YXRlLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblswXTtcbiAgaWYgKHN0YXRlLmltcGxpY2l0ICE9PSBzdGF0ZS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQpIHtcbiAgICBzdGF0ZS51c2VEZWNvZGVyID0gc3RhdGUudXNlRGVjb2Rlci5jbG9uZSgpO1xuICAgIHN0YXRlLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCA9IHN0YXRlLmltcGxpY2l0O1xuICB9XG4gIHJldHVybiBzdGF0ZS51c2VEZWNvZGVyO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2RlY29kZUNob2ljZSA9IGZ1bmN0aW9uIGRlY29kZUNob2ljZShpbnB1dCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gIHZhciByZXN1bHQgPSBudWxsO1xuICB2YXIgbWF0Y2ggPSBmYWxzZTtcblxuICBPYmplY3Qua2V5cyhzdGF0ZS5jaG9pY2UpLnNvbWUoZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIHNhdmUgPSBpbnB1dC5zYXZlKCk7XG4gICAgdmFyIG5vZGUgPSBzdGF0ZS5jaG9pY2Vba2V5XTtcbiAgICB0cnkge1xuICAgICAgdmFyIHZhbHVlID0gbm9kZS5fZGVjb2RlKGlucHV0KTtcbiAgICAgIGlmIChpbnB1dC5pc0Vycm9yKHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICByZXN1bHQgPSB7IHR5cGU6IGtleSwgdmFsdWU6IHZhbHVlIH07XG4gICAgICBtYXRjaCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaW5wdXQucmVzdG9yZShzYXZlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sIHRoaXMpO1xuXG4gIGlmICghbWF0Y2gpXG4gICAgcmV0dXJuIGlucHV0LmVycm9yKCdDaG9pY2Ugbm90IG1hdGNoZWQnKTtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy9cbi8vIEVuY29kaW5nXG4vL1xuXG5Ob2RlLnByb3RvdHlwZS5fY3JlYXRlRW5jb2RlckJ1ZmZlciA9IGZ1bmN0aW9uIGNyZWF0ZUVuY29kZXJCdWZmZXIoZGF0YSkge1xuICByZXR1cm4gbmV3IEVuY29kZXJCdWZmZXIoZGF0YSwgdGhpcy5yZXBvcnRlcik7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGRhdGEsIHJlcG9ydGVyLCBwYXJlbnQpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICBpZiAoc3RhdGVbJ2RlZmF1bHQnXSAhPT0gbnVsbCAmJiBzdGF0ZVsnZGVmYXVsdCddID09PSBkYXRhKVxuICAgIHJldHVybjtcblxuICB2YXIgcmVzdWx0ID0gdGhpcy5fZW5jb2RlVmFsdWUoZGF0YSwgcmVwb3J0ZXIsIHBhcmVudCk7XG4gIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm47XG5cbiAgaWYgKHRoaXMuX3NraXBEZWZhdWx0KHJlc3VsdCwgcmVwb3J0ZXIsIHBhcmVudCkpXG4gICAgcmV0dXJuO1xuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fZW5jb2RlVmFsdWUgPSBmdW5jdGlvbiBlbmNvZGUoZGF0YSwgcmVwb3J0ZXIsIHBhcmVudCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgLy8gRGVjb2RlIHJvb3Qgbm9kZVxuICBpZiAoc3RhdGUucGFyZW50ID09PSBudWxsKVxuICAgIHJldHVybiBzdGF0ZS5jaGlsZHJlblswXS5fZW5jb2RlKGRhdGEsIHJlcG9ydGVyIHx8IG5ldyBSZXBvcnRlcigpKTtcblxuICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgdmFyIHByZXNlbnQgPSB0cnVlO1xuXG4gIC8vIFNldCByZXBvcnRlciB0byBzaGFyZSBpdCB3aXRoIGEgY2hpbGQgY2xhc3NcbiAgdGhpcy5yZXBvcnRlciA9IHJlcG9ydGVyO1xuXG4gIC8vIENoZWNrIGlmIGRhdGEgaXMgdGhlcmVcbiAgaWYgKHN0YXRlLm9wdGlvbmFsICYmIGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChzdGF0ZVsnZGVmYXVsdCddICE9PSBudWxsKVxuICAgICAgZGF0YSA9IHN0YXRlWydkZWZhdWx0J11cbiAgICBlbHNlXG4gICAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3IgZXJyb3IgcmVwb3J0aW5nXG4gIHZhciBwcmV2S2V5O1xuXG4gIC8vIEVuY29kZSBjaGlsZHJlbiBmaXJzdFxuICB2YXIgY29udGVudCA9IG51bGw7XG4gIHZhciBwcmltaXRpdmUgPSBmYWxzZTtcbiAgaWYgKHN0YXRlLmFueSkge1xuICAgIC8vIEFueXRoaW5nIHRoYXQgd2FzIGdpdmVuIGlzIHRyYW5zbGF0ZWQgdG8gYnVmZmVyXG4gICAgcmVzdWx0ID0gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihkYXRhKTtcbiAgfSBlbHNlIGlmIChzdGF0ZS5jaG9pY2UpIHtcbiAgICByZXN1bHQgPSB0aGlzLl9lbmNvZGVDaG9pY2UoZGF0YSwgcmVwb3J0ZXIpO1xuICB9IGVsc2UgaWYgKHN0YXRlLmNvbnRhaW5zKSB7XG4gICAgY29udGVudCA9IHRoaXMuX2dldFVzZShzdGF0ZS5jb250YWlucywgcGFyZW50KS5fZW5jb2RlKGRhdGEsIHJlcG9ydGVyKTtcbiAgICBwcmltaXRpdmUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHN0YXRlLmNoaWxkcmVuKSB7XG4gICAgY29udGVudCA9IHN0YXRlLmNoaWxkcmVuLm1hcChmdW5jdGlvbihjaGlsZCkge1xuICAgICAgaWYgKGNoaWxkLl9iYXNlU3RhdGUudGFnID09PSAnbnVsbF8nKVxuICAgICAgICByZXR1cm4gY2hpbGQuX2VuY29kZShudWxsLCByZXBvcnRlciwgZGF0YSk7XG5cbiAgICAgIGlmIChjaGlsZC5fYmFzZVN0YXRlLmtleSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdDaGlsZCBzaG91bGQgaGF2ZSBhIGtleScpO1xuICAgICAgdmFyIHByZXZLZXkgPSByZXBvcnRlci5lbnRlcktleShjaGlsZC5fYmFzZVN0YXRlLmtleSk7XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpXG4gICAgICAgIHJldHVybiByZXBvcnRlci5lcnJvcignQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Jyk7XG5cbiAgICAgIHZhciByZXMgPSBjaGlsZC5fZW5jb2RlKGRhdGFbY2hpbGQuX2Jhc2VTdGF0ZS5rZXldLCByZXBvcnRlciwgZGF0YSk7XG4gICAgICByZXBvcnRlci5sZWF2ZUtleShwcmV2S2V5KTtcblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LCB0aGlzKS5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9KTtcbiAgICBjb250ZW50ID0gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihjb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoc3RhdGUudGFnID09PSAnc2Vxb2YnIHx8IHN0YXRlLnRhZyA9PT0gJ3NldG9mJykge1xuICAgICAgLy8gVE9ETyhpbmR1dG55KTogdGhpcyBzaG91bGQgYmUgdGhyb3duIG9uIERTTCBsZXZlbFxuICAgICAgaWYgKCEoc3RhdGUuYXJncyAmJiBzdGF0ZS5hcmdzLmxlbmd0aCA9PT0gMSkpXG4gICAgICAgIHJldHVybiByZXBvcnRlci5lcnJvcignVG9vIG1hbnkgYXJncyBmb3IgOiAnICsgc3RhdGUudGFnKTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKVxuICAgICAgICByZXR1cm4gcmVwb3J0ZXIuZXJyb3IoJ3NlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXknKTtcblxuICAgICAgdmFyIGNoaWxkID0gdGhpcy5jbG9uZSgpO1xuICAgICAgY2hpbGQuX2Jhc2VTdGF0ZS5pbXBsaWNpdCA9IG51bGw7XG4gICAgICBjb250ZW50ID0gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihkYXRhLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VXNlKHN0YXRlLmFyZ3NbMF0sIGRhdGEpLl9lbmNvZGUoaXRlbSwgcmVwb3J0ZXIpO1xuICAgICAgfSwgY2hpbGQpKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLnVzZSAhPT0gbnVsbCkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5fZ2V0VXNlKHN0YXRlLnVzZSwgcGFyZW50KS5fZW5jb2RlKGRhdGEsIHJlcG9ydGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudCA9IHRoaXMuX2VuY29kZVByaW1pdGl2ZShzdGF0ZS50YWcsIGRhdGEpO1xuICAgICAgcHJpbWl0aXZlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBFbmNvZGUgZGF0YSBpdHNlbGZcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCFzdGF0ZS5hbnkgJiYgc3RhdGUuY2hvaWNlID09PSBudWxsKSB7XG4gICAgdmFyIHRhZyA9IHN0YXRlLmltcGxpY2l0ICE9PSBudWxsID8gc3RhdGUuaW1wbGljaXQgOiBzdGF0ZS50YWc7XG4gICAgdmFyIGNscyA9IHN0YXRlLmltcGxpY2l0ID09PSBudWxsID8gJ3VuaXZlcnNhbCcgOiAnY29udGV4dCc7XG5cbiAgICBpZiAodGFnID09PSBudWxsKSB7XG4gICAgICBpZiAoc3RhdGUudXNlID09PSBudWxsKVxuICAgICAgICByZXBvcnRlci5lcnJvcignVGFnIGNvdWxkIGJlIG9tbWl0ZWQgb25seSBmb3IgLnVzZSgpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGF0ZS51c2UgPT09IG51bGwpXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2VuY29kZUNvbXBvc2l0ZSh0YWcsIHByaW1pdGl2ZSwgY2xzLCBjb250ZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBXcmFwIGluIGV4cGxpY2l0XG4gIGlmIChzdGF0ZS5leHBsaWNpdCAhPT0gbnVsbClcbiAgICByZXN1bHQgPSB0aGlzLl9lbmNvZGVDb21wb3NpdGUoc3RhdGUuZXhwbGljaXQsIGZhbHNlLCAnY29udGV4dCcsIHJlc3VsdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9lbmNvZGVDaG9pY2UgPSBmdW5jdGlvbiBlbmNvZGVDaG9pY2UoZGF0YSwgcmVwb3J0ZXIpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIHZhciBub2RlID0gc3RhdGUuY2hvaWNlW2RhdGEudHlwZV07XG4gIGlmICghbm9kZSkge1xuICAgIGFzc2VydChcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGRhdGEudHlwZSArICcgbm90IGZvdW5kIGluICcgK1xuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc3RhdGUuY2hvaWNlKSkpO1xuICB9XG4gIHJldHVybiBub2RlLl9lbmNvZGUoZGF0YS52YWx1ZSwgcmVwb3J0ZXIpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZSA9IGZ1bmN0aW9uIGVuY29kZVByaW1pdGl2ZSh0YWcsIGRhdGEpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGlmICh0YWcgPT09ICdvY3RzdHInIHx8IHRhZyA9PT0gJ2JpdHN0cicgfHwgdGFnID09PSAnaWE1c3RyJylcbiAgICByZXR1cm4gdGhpcy5fZW5jb2RlU3RyKGRhdGEsIHRhZyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ3V0ZjhzdHInIHx8IHRhZyA9PT0gJ2JtcHN0cicpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZVN0cihkYXRhLCB0YWcpO1xuICBlbHNlIGlmICh0YWcgPT09ICdudW1zdHInIHx8IHRhZyA9PT0gJ3ByaW50c3RyJylcbiAgICByZXR1cm4gdGhpcy5fZW5jb2RlU3RyKGRhdGEsIHRhZyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ29iamlkJyAmJiBzdGF0ZS5hcmdzKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVPYmppZChkYXRhLCBzdGF0ZS5yZXZlcnNlQXJnc1swXSwgc3RhdGUuYXJnc1sxXSk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ29iamlkJylcbiAgICByZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoZGF0YSwgbnVsbCwgbnVsbCk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ2dlbnRpbWUnIHx8IHRhZyA9PT0gJ3V0Y3RpbWUnKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVUaW1lKGRhdGEsIHRhZyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ251bGxfJylcbiAgICByZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO1xuICBlbHNlIGlmICh0YWcgPT09ICdpbnQnIHx8IHRhZyA9PT0gJ2VudW0nKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVJbnQoZGF0YSwgc3RhdGUuYXJncyAmJiBzdGF0ZS5yZXZlcnNlQXJnc1swXSk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ2Jvb2wnKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVCb29sKGRhdGEpO1xuICBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB0YWc6ICcgKyB0YWcpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2lzTnVtc3RyID0gZnVuY3Rpb24gaXNOdW1zdHIoc3RyKSB7XG4gIHJldHVybiAvXlswLTkgXSokLy50ZXN0KHN0cik7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5faXNQcmludHN0ciA9IGZ1bmN0aW9uIGlzUHJpbnRzdHIoc3RyKSB7XG4gIHJldHVybiAvXltBLVphLXowLTkgJ1xcKFxcKVxcKyxcXC1cXC5cXC86PVxcP10qJC8udGVzdChzdHIpO1xufTtcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmZ1bmN0aW9uIFJlcG9ydGVyKG9wdGlvbnMpIHtcbiAgdGhpcy5fcmVwb3J0ZXJTdGF0ZSA9IHtcbiAgICBvYmo6IG51bGwsXG4gICAgcGF0aDogW10sXG4gICAgb3B0aW9uczogb3B0aW9ucyB8fCB7fSxcbiAgICBlcnJvcnM6IFtdXG4gIH07XG59XG5leHBvcnRzLlJlcG9ydGVyID0gUmVwb3J0ZXI7XG5cblJlcG9ydGVyLnByb3RvdHlwZS5pc0Vycm9yID0gZnVuY3Rpb24gaXNFcnJvcihvYmopIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIFJlcG9ydGVyRXJyb3I7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uIHNhdmUoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG5cbiAgcmV0dXJuIHsgb2JqOiBzdGF0ZS5vYmosIHBhdGhMZW46IHN0YXRlLnBhdGgubGVuZ3RoIH07XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUucmVzdG9yZSA9IGZ1bmN0aW9uIHJlc3RvcmUoZGF0YSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHN0YXRlLm9iaiA9IGRhdGEub2JqO1xuICBzdGF0ZS5wYXRoID0gc3RhdGUucGF0aC5zbGljZSgwLCBkYXRhLnBhdGhMZW4pO1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLmVudGVyS2V5ID0gZnVuY3Rpb24gZW50ZXJLZXkoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaChrZXkpO1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLmxlYXZlS2V5ID0gZnVuY3Rpb24gbGVhdmVLZXkoaW5kZXgsIGtleSwgdmFsdWUpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcblxuICBzdGF0ZS5wYXRoID0gc3RhdGUucGF0aC5zbGljZSgwLCBpbmRleCAtIDEpO1xuICBpZiAoc3RhdGUub2JqICE9PSBudWxsKVxuICAgIHN0YXRlLm9ialtrZXldID0gdmFsdWU7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUuZW50ZXJPYmplY3QgPSBmdW5jdGlvbiBlbnRlck9iamVjdCgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcblxuICB2YXIgcHJldiA9IHN0YXRlLm9iajtcbiAgc3RhdGUub2JqID0ge307XG4gIHJldHVybiBwcmV2O1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLmxlYXZlT2JqZWN0ID0gZnVuY3Rpb24gbGVhdmVPYmplY3QocHJldikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHZhciBub3cgPSBzdGF0ZS5vYmo7XG4gIHN0YXRlLm9iaiA9IHByZXY7XG4gIHJldHVybiBub3c7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiBlcnJvcihtc2cpIHtcbiAgdmFyIGVycjtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcblxuICB2YXIgaW5oZXJpdGVkID0gbXNnIGluc3RhbmNlb2YgUmVwb3J0ZXJFcnJvcjtcbiAgaWYgKGluaGVyaXRlZCkge1xuICAgIGVyciA9IG1zZztcbiAgfSBlbHNlIHtcbiAgICBlcnIgPSBuZXcgUmVwb3J0ZXJFcnJvcihzdGF0ZS5wYXRoLm1hcChmdW5jdGlvbihlbGVtKSB7XG4gICAgICByZXR1cm4gJ1snICsgSlNPTi5zdHJpbmdpZnkoZWxlbSkgKyAnXSc7XG4gICAgfSkuam9pbignJyksIG1zZy5tZXNzYWdlIHx8IG1zZywgbXNnLnN0YWNrKTtcbiAgfVxuXG4gIGlmICghc3RhdGUub3B0aW9ucy5wYXJ0aWFsKVxuICAgIHRocm93IGVycjtcblxuICBpZiAoIWluaGVyaXRlZClcbiAgICBzdGF0ZS5lcnJvcnMucHVzaChlcnIpO1xuXG4gIHJldHVybiBlcnI7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUud3JhcFJlc3VsdCA9IGZ1bmN0aW9uIHdyYXBSZXN1bHQocmVzdWx0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG4gIGlmICghc3RhdGUub3B0aW9ucy5wYXJ0aWFsKVxuICAgIHJldHVybiByZXN1bHQ7XG5cbiAgcmV0dXJuIHtcbiAgICByZXN1bHQ6IHRoaXMuaXNFcnJvcihyZXN1bHQpID8gbnVsbCA6IHJlc3VsdCxcbiAgICBlcnJvcnM6IHN0YXRlLmVycm9yc1xuICB9O1xufTtcblxuZnVuY3Rpb24gUmVwb3J0ZXJFcnJvcihwYXRoLCBtc2cpIHtcbiAgdGhpcy5wYXRoID0gcGF0aDtcbiAgdGhpcy5yZXRocm93KG1zZyk7XG59O1xuaW5oZXJpdHMoUmVwb3J0ZXJFcnJvciwgRXJyb3IpO1xuXG5SZXBvcnRlckVycm9yLnByb3RvdHlwZS5yZXRocm93ID0gZnVuY3Rpb24gcmV0aHJvdyhtc2cpIHtcbiAgdGhpcy5tZXNzYWdlID0gbXNnICsgJyBhdDogJyArICh0aGlzLnBhdGggfHwgJyhzaGFsbG93KScpO1xuICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXBvcnRlckVycm9yKTtcblxuICByZXR1cm4gdGhpcztcbn07XG4iLCJ2YXIgY29uc3RhbnRzID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzJyk7XG5cbmV4cG9ydHMudGFnQ2xhc3MgPSB7XG4gIDA6ICd1bml2ZXJzYWwnLFxuICAxOiAnYXBwbGljYXRpb24nLFxuICAyOiAnY29udGV4dCcsXG4gIDM6ICdwcml2YXRlJ1xufTtcbmV4cG9ydHMudGFnQ2xhc3NCeU5hbWUgPSBjb25zdGFudHMuX3JldmVyc2UoZXhwb3J0cy50YWdDbGFzcyk7XG5cbmV4cG9ydHMudGFnID0ge1xuICAweDAwOiAnZW5kJyxcbiAgMHgwMTogJ2Jvb2wnLFxuICAweDAyOiAnaW50JyxcbiAgMHgwMzogJ2JpdHN0cicsXG4gIDB4MDQ6ICdvY3RzdHInLFxuICAweDA1OiAnbnVsbF8nLFxuICAweDA2OiAnb2JqaWQnLFxuICAweDA3OiAnb2JqRGVzYycsXG4gIDB4MDg6ICdleHRlcm5hbCcsXG4gIDB4MDk6ICdyZWFsJyxcbiAgMHgwYTogJ2VudW0nLFxuICAweDBiOiAnZW1iZWQnLFxuICAweDBjOiAndXRmOHN0cicsXG4gIDB4MGQ6ICdyZWxhdGl2ZU9pZCcsXG4gIDB4MTA6ICdzZXEnLFxuICAweDExOiAnc2V0JyxcbiAgMHgxMjogJ251bXN0cicsXG4gIDB4MTM6ICdwcmludHN0cicsXG4gIDB4MTQ6ICd0NjFzdHInLFxuICAweDE1OiAndmlkZW9zdHInLFxuICAweDE2OiAnaWE1c3RyJyxcbiAgMHgxNzogJ3V0Y3RpbWUnLFxuICAweDE4OiAnZ2VudGltZScsXG4gIDB4MTk6ICdncmFwaHN0cicsXG4gIDB4MWE6ICdpc282NDZzdHInLFxuICAweDFiOiAnZ2Vuc3RyJyxcbiAgMHgxYzogJ3VuaXN0cicsXG4gIDB4MWQ6ICdjaGFyc3RyJyxcbiAgMHgxZTogJ2JtcHN0cidcbn07XG5leHBvcnRzLnRhZ0J5TmFtZSA9IGNvbnN0YW50cy5fcmV2ZXJzZShleHBvcnRzLnRhZyk7XG4iLCJ2YXIgY29uc3RhbnRzID0gZXhwb3J0cztcblxuLy8gSGVscGVyXG5jb25zdGFudHMuX3JldmVyc2UgPSBmdW5jdGlvbiByZXZlcnNlKG1hcCkge1xuICB2YXIgcmVzID0ge307XG5cbiAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgIC8vIENvbnZlcnQga2V5IHRvIGludGVnZXIgaWYgaXQgaXMgc3RyaW5naWZpZWRcbiAgICBpZiAoKGtleSB8IDApID09IGtleSlcbiAgICAgIGtleSA9IGtleSB8IDA7XG5cbiAgICB2YXIgdmFsdWUgPSBtYXBba2V5XTtcbiAgICByZXNbdmFsdWVdID0ga2V5O1xuICB9KTtcblxuICByZXR1cm4gcmVzO1xufTtcblxuY29uc3RhbnRzLmRlciA9IHJlcXVpcmUoJy4vZGVyJyk7XG4iLCJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG52YXIgYXNuMSA9IHJlcXVpcmUoJy4uLy4uL2FzbjEnKTtcbnZhciBiYXNlID0gYXNuMS5iYXNlO1xudmFyIGJpZ251bSA9IGFzbjEuYmlnbnVtO1xuXG4vLyBJbXBvcnQgREVSIGNvbnN0YW50c1xudmFyIGRlciA9IGFzbjEuY29uc3RhbnRzLmRlcjtcblxuZnVuY3Rpb24gREVSRGVjb2RlcihlbnRpdHkpIHtcbiAgdGhpcy5lbmMgPSAnZGVyJztcbiAgdGhpcy5uYW1lID0gZW50aXR5Lm5hbWU7XG4gIHRoaXMuZW50aXR5ID0gZW50aXR5O1xuXG4gIC8vIENvbnN0cnVjdCBiYXNlIHRyZWVcbiAgdGhpcy50cmVlID0gbmV3IERFUk5vZGUoKTtcbiAgdGhpcy50cmVlLl9pbml0KGVudGl0eS5ib2R5KTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IERFUkRlY29kZXI7XG5cbkRFUkRlY29kZXIucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShkYXRhLCBvcHRpb25zKSB7XG4gIGlmICghKGRhdGEgaW5zdGFuY2VvZiBiYXNlLkRlY29kZXJCdWZmZXIpKVxuICAgIGRhdGEgPSBuZXcgYmFzZS5EZWNvZGVyQnVmZmVyKGRhdGEsIG9wdGlvbnMpO1xuXG4gIHJldHVybiB0aGlzLnRyZWUuX2RlY29kZShkYXRhLCBvcHRpb25zKTtcbn07XG5cbi8vIFRyZWUgbWV0aG9kc1xuXG5mdW5jdGlvbiBERVJOb2RlKHBhcmVudCkge1xuICBiYXNlLk5vZGUuY2FsbCh0aGlzLCAnZGVyJywgcGFyZW50KTtcbn1cbmluaGVyaXRzKERFUk5vZGUsIGJhc2UuTm9kZSk7XG5cbkRFUk5vZGUucHJvdG90eXBlLl9wZWVrVGFnID0gZnVuY3Rpb24gcGVla1RhZyhidWZmZXIsIHRhZywgYW55KSB7XG4gIGlmIChidWZmZXIuaXNFbXB0eSgpKVxuICAgIHJldHVybiBmYWxzZTtcblxuICB2YXIgc3RhdGUgPSBidWZmZXIuc2F2ZSgpO1xuICB2YXIgZGVjb2RlZFRhZyA9IGRlckRlY29kZVRhZyhidWZmZXIsICdGYWlsZWQgdG8gcGVlayB0YWc6IFwiJyArIHRhZyArICdcIicpO1xuICBpZiAoYnVmZmVyLmlzRXJyb3IoZGVjb2RlZFRhZykpXG4gICAgcmV0dXJuIGRlY29kZWRUYWc7XG5cbiAgYnVmZmVyLnJlc3RvcmUoc3RhdGUpO1xuXG4gIHJldHVybiBkZWNvZGVkVGFnLnRhZyA9PT0gdGFnIHx8IGRlY29kZWRUYWcudGFnU3RyID09PSB0YWcgfHwgYW55O1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZVRhZyA9IGZ1bmN0aW9uIGRlY29kZVRhZyhidWZmZXIsIHRhZywgYW55KSB7XG4gIHZhciBkZWNvZGVkVGFnID0gZGVyRGVjb2RlVGFnKGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mIFwiJyArIHRhZyArICdcIicpO1xuICBpZiAoYnVmZmVyLmlzRXJyb3IoZGVjb2RlZFRhZykpXG4gICAgcmV0dXJuIGRlY29kZWRUYWc7XG5cbiAgdmFyIGxlbiA9IGRlckRlY29kZUxlbihidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZFRhZy5wcmltaXRpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mIFwiJyArIHRhZyArICdcIicpO1xuXG4gIC8vIEZhaWx1cmVcbiAgaWYgKGJ1ZmZlci5pc0Vycm9yKGxlbikpXG4gICAgcmV0dXJuIGxlbjtcblxuICBpZiAoIWFueSAmJlxuICAgICAgZGVjb2RlZFRhZy50YWcgIT09IHRhZyAmJlxuICAgICAgZGVjb2RlZFRhZy50YWdTdHIgIT09IHRhZyAmJlxuICAgICAgZGVjb2RlZFRhZy50YWdTdHIgKyAnb2YnICE9PSB0YWcpIHtcbiAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiBcIicgKyB0YWcgKyAnXCInKTtcbiAgfVxuXG4gIGlmIChkZWNvZGVkVGFnLnByaW1pdGl2ZSB8fCBsZW4gIT09IG51bGwpXG4gICAgcmV0dXJuIGJ1ZmZlci5za2lwKGxlbiwgJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicgKyB0YWcgKyAnXCInKTtcblxuICAvLyBJbmRlZmluaXRlIGxlbmd0aC4uLiBmaW5kIEVORCB0YWdcbiAgdmFyIHN0YXRlID0gYnVmZmVyLnNhdmUoKTtcbiAgdmFyIHJlcyA9IHRoaXMuX3NraXBVbnRpbEVuZChcbiAgICAgIGJ1ZmZlcixcbiAgICAgICdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiBcIicgKyB0aGlzLnRhZyArICdcIicpO1xuICBpZiAoYnVmZmVyLmlzRXJyb3IocmVzKSlcbiAgICByZXR1cm4gcmVzO1xuXG4gIGxlbiA9IGJ1ZmZlci5vZmZzZXQgLSBzdGF0ZS5vZmZzZXQ7XG4gIGJ1ZmZlci5yZXN0b3JlKHN0YXRlKTtcbiAgcmV0dXJuIGJ1ZmZlci5za2lwKGxlbiwgJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicgKyB0YWcgKyAnXCInKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9za2lwVW50aWxFbmQgPSBmdW5jdGlvbiBza2lwVW50aWxFbmQoYnVmZmVyLCBmYWlsKSB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIHRhZyA9IGRlckRlY29kZVRhZyhidWZmZXIsIGZhaWwpO1xuICAgIGlmIChidWZmZXIuaXNFcnJvcih0YWcpKVxuICAgICAgcmV0dXJuIHRhZztcbiAgICB2YXIgbGVuID0gZGVyRGVjb2RlTGVuKGJ1ZmZlciwgdGFnLnByaW1pdGl2ZSwgZmFpbCk7XG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKGxlbikpXG4gICAgICByZXR1cm4gbGVuO1xuXG4gICAgdmFyIHJlcztcbiAgICBpZiAodGFnLnByaW1pdGl2ZSB8fCBsZW4gIT09IG51bGwpXG4gICAgICByZXMgPSBidWZmZXIuc2tpcChsZW4pXG4gICAgZWxzZVxuICAgICAgcmVzID0gdGhpcy5fc2tpcFVudGlsRW5kKGJ1ZmZlciwgZmFpbCk7XG5cbiAgICAvLyBGYWlsdXJlXG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKHJlcykpXG4gICAgICByZXR1cm4gcmVzO1xuXG4gICAgaWYgKHRhZy50YWdTdHIgPT09ICdlbmQnKVxuICAgICAgYnJlYWs7XG4gIH1cbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVMaXN0ID0gZnVuY3Rpb24gZGVjb2RlTGlzdChidWZmZXIsIHRhZywgZGVjb2Rlcikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHdoaWxlICghYnVmZmVyLmlzRW1wdHkoKSkge1xuICAgIHZhciBwb3NzaWJsZUVuZCA9IHRoaXMuX3BlZWtUYWcoYnVmZmVyLCAnZW5kJyk7XG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKHBvc3NpYmxlRW5kKSlcbiAgICAgIHJldHVybiBwb3NzaWJsZUVuZDtcblxuICAgIHZhciByZXMgPSBkZWNvZGVyLmRlY29kZShidWZmZXIsICdkZXInKTtcbiAgICBpZiAoYnVmZmVyLmlzRXJyb3IocmVzKSAmJiBwb3NzaWJsZUVuZClcbiAgICAgIGJyZWFrO1xuICAgIHJlc3VsdC5wdXNoKHJlcyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVTdHIgPSBmdW5jdGlvbiBkZWNvZGVTdHIoYnVmZmVyLCB0YWcpIHtcbiAgaWYgKHRhZyA9PT0gJ29jdHN0cicpIHtcbiAgICByZXR1cm4gYnVmZmVyLnJhdygpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2JpdHN0cicpIHtcbiAgICB2YXIgdW51c2VkID0gYnVmZmVyLnJlYWRVSW50OCgpO1xuICAgIGlmIChidWZmZXIuaXNFcnJvcih1bnVzZWQpKVxuICAgICAgcmV0dXJuIHVudXNlZDtcblxuICAgIHJldHVybiB7IHVudXNlZDogdW51c2VkLCBkYXRhOiBidWZmZXIucmF3KCkgfTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdpYTVzdHInIHx8IHRhZyA9PT0gJ3V0ZjhzdHInKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5yYXcoKS50b1N0cmluZygpO1xuICB9IGVsc2UgaWYodGFnID09PSAnbnVtc3RyJykge1xuICAgIHZhciBudW1zdHIgPSBidWZmZXIucmF3KCkudG9TdHJpbmcoJ2FzY2lpJyk7XG4gICAgaWYgKCF0aGlzLl9pc051bXN0cihudW1zdHIpKSB7XG4gICAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdudW1zdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycycpO1xuICAgIH1cblxuICAgIHJldHVybiBudW1zdHI7XG4gIH0gZWxzZSBpZiAodGFnID09PSAncHJpbnRzdHInKSB7XG4gICAgdmFyIHByaW50c3RyID0gYnVmZmVyLnJhdygpLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgIGlmICghdGhpcy5faXNQcmludHN0cihwcmludHN0cikpIHtcbiAgICAgIHJldHVybiBidWZmZXIuZXJyb3IoJ0RlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJpbnRzdHI7XG4gIH0gZWxzZSBpZih0YWcgPT09ICdibXBzdHInKSB7XG4gICAgdmFyIHJhdyA9IGJ1ZmZlci5yYXcoKTtcbiAgICBpZiAocmF3Lmxlbmd0aCAlIDIgPT09IDEpXG4gICAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCcpO1xuXG4gICAgdmFyIHN0ciA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3Lmxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUocmF3LnJlYWRVSW50MTZCRShpICogMikpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWZmZXIuZXJyb3IoJ0RlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAnICsgdGFnICsgJyB1bnN1cHBvcnRlZCcpO1xuICB9XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZGVjb2RlT2JqaWQgPSBmdW5jdGlvbiBkZWNvZGVPYmppZChidWZmZXIsIHZhbHVlcywgcmVsYXRpdmUpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG4gIHZhciBpZGVudCA9IDA7XG4gIHdoaWxlICghYnVmZmVyLmlzRW1wdHkoKSkge1xuICAgIHZhciBzdWJpZGVudCA9IGJ1ZmZlci5yZWFkVUludDgoKTtcbiAgICBpZGVudCA8PD0gNztcbiAgICBpZGVudCB8PSBzdWJpZGVudCAmIDB4N2Y7XG4gICAgaWYgKChzdWJpZGVudCAmIDB4ODApID09PSAwKSB7XG4gICAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50KTtcbiAgICAgIGlkZW50ID0gMDtcbiAgICB9XG4gIH1cbiAgaWYgKHN1YmlkZW50ICYgMHg4MClcbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50KTtcblxuICB2YXIgZmlyc3QgPSAoaWRlbnRpZmllcnNbMF0gLyA0MCkgfCAwO1xuICB2YXIgc2Vjb25kID0gaWRlbnRpZmllcnNbMF0gJSA0MDtcblxuICBpZiAocmVsYXRpdmUpXG4gICAgcmVzdWx0ID0gaWRlbnRpZmllcnM7XG4gIGVsc2VcbiAgICByZXN1bHQgPSBbZmlyc3QsIHNlY29uZF0uY29uY2F0KGlkZW50aWZpZXJzLnNsaWNlKDEpKTtcblxuICBpZiAodmFsdWVzKSB7XG4gICAgdmFyIHRtcCA9IHZhbHVlc1tyZXN1bHQuam9pbignICcpXTtcbiAgICBpZiAodG1wID09PSB1bmRlZmluZWQpXG4gICAgICB0bXAgPSB2YWx1ZXNbcmVzdWx0LmpvaW4oJy4nKV07XG4gICAgaWYgKHRtcCAhPT0gdW5kZWZpbmVkKVxuICAgICAgcmVzdWx0ID0gdG1wO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVUaW1lID0gZnVuY3Rpb24gZGVjb2RlVGltZShidWZmZXIsIHRhZykge1xuICB2YXIgc3RyID0gYnVmZmVyLnJhdygpLnRvU3RyaW5nKCk7XG4gIGlmICh0YWcgPT09ICdnZW50aW1lJykge1xuICAgIHZhciB5ZWFyID0gc3RyLnNsaWNlKDAsIDQpIHwgMDtcbiAgICB2YXIgbW9uID0gc3RyLnNsaWNlKDQsIDYpIHwgMDtcbiAgICB2YXIgZGF5ID0gc3RyLnNsaWNlKDYsIDgpIHwgMDtcbiAgICB2YXIgaG91ciA9IHN0ci5zbGljZSg4LCAxMCkgfCAwO1xuICAgIHZhciBtaW4gPSBzdHIuc2xpY2UoMTAsIDEyKSB8IDA7XG4gICAgdmFyIHNlYyA9IHN0ci5zbGljZSgxMiwgMTQpIHwgMDtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICd1dGN0aW1lJykge1xuICAgIHZhciB5ZWFyID0gc3RyLnNsaWNlKDAsIDIpIHwgMDtcbiAgICB2YXIgbW9uID0gc3RyLnNsaWNlKDIsIDQpIHwgMDtcbiAgICB2YXIgZGF5ID0gc3RyLnNsaWNlKDQsIDYpIHwgMDtcbiAgICB2YXIgaG91ciA9IHN0ci5zbGljZSg2LCA4KSB8IDA7XG4gICAgdmFyIG1pbiA9IHN0ci5zbGljZSg4LCAxMCkgfCAwO1xuICAgIHZhciBzZWMgPSBzdHIuc2xpY2UoMTAsIDEyKSB8IDA7XG4gICAgaWYgKHllYXIgPCA3MClcbiAgICAgIHllYXIgPSAyMDAwICsgeWVhcjtcbiAgICBlbHNlXG4gICAgICB5ZWFyID0gMTkwMCArIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5lcnJvcignRGVjb2RpbmcgJyArIHRhZyArICcgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCcpO1xuICB9XG5cbiAgcmV0dXJuIERhdGUuVVRDKHllYXIsIG1vbiAtIDEsIGRheSwgaG91ciwgbWluLCBzZWMsIDApO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZU51bGwgPSBmdW5jdGlvbiBkZWNvZGVOdWxsKGJ1ZmZlcikge1xuICByZXR1cm4gbnVsbDtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVCb29sID0gZnVuY3Rpb24gZGVjb2RlQm9vbChidWZmZXIpIHtcbiAgdmFyIHJlcyA9IGJ1ZmZlci5yZWFkVUludDgoKTtcbiAgaWYgKGJ1ZmZlci5pc0Vycm9yKHJlcykpXG4gICAgcmV0dXJuIHJlcztcbiAgZWxzZVxuICAgIHJldHVybiByZXMgIT09IDA7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZGVjb2RlSW50ID0gZnVuY3Rpb24gZGVjb2RlSW50KGJ1ZmZlciwgdmFsdWVzKSB7XG4gIC8vIEJpZ2ludCwgcmV0dXJuIGFzIGl0IGlzIChhc3N1bWUgYmlnIGVuZGlhbilcbiAgdmFyIHJhdyA9IGJ1ZmZlci5yYXcoKTtcbiAgdmFyIHJlcyA9IG5ldyBiaWdudW0ocmF3KTtcblxuICBpZiAodmFsdWVzKVxuICAgIHJlcyA9IHZhbHVlc1tyZXMudG9TdHJpbmcoMTApXSB8fCByZXM7XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl91c2UgPSBmdW5jdGlvbiB1c2UoZW50aXR5LCBvYmopIHtcbiAgaWYgKHR5cGVvZiBlbnRpdHkgPT09ICdmdW5jdGlvbicpXG4gICAgZW50aXR5ID0gZW50aXR5KG9iaik7XG4gIHJldHVybiBlbnRpdHkuX2dldERlY29kZXIoJ2RlcicpLnRyZWU7XG59O1xuXG4vLyBVdGlsaXR5IG1ldGhvZHNcblxuZnVuY3Rpb24gZGVyRGVjb2RlVGFnKGJ1ZiwgZmFpbCkge1xuICB2YXIgdGFnID0gYnVmLnJlYWRVSW50OChmYWlsKTtcbiAgaWYgKGJ1Zi5pc0Vycm9yKHRhZykpXG4gICAgcmV0dXJuIHRhZztcblxuICB2YXIgY2xzID0gZGVyLnRhZ0NsYXNzW3RhZyA+PiA2XTtcbiAgdmFyIHByaW1pdGl2ZSA9ICh0YWcgJiAweDIwKSA9PT0gMDtcblxuICAvLyBNdWx0aS1vY3RldCB0YWcgLSBsb2FkXG4gIGlmICgodGFnICYgMHgxZikgPT09IDB4MWYpIHtcbiAgICB2YXIgb2N0ID0gdGFnO1xuICAgIHRhZyA9IDA7XG4gICAgd2hpbGUgKChvY3QgJiAweDgwKSA9PT0gMHg4MCkge1xuICAgICAgb2N0ID0gYnVmLnJlYWRVSW50OChmYWlsKTtcbiAgICAgIGlmIChidWYuaXNFcnJvcihvY3QpKVxuICAgICAgICByZXR1cm4gb2N0O1xuXG4gICAgICB0YWcgPDw9IDc7XG4gICAgICB0YWcgfD0gb2N0ICYgMHg3ZjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGFnICY9IDB4MWY7XG4gIH1cbiAgdmFyIHRhZ1N0ciA9IGRlci50YWdbdGFnXTtcblxuICByZXR1cm4ge1xuICAgIGNsczogY2xzLFxuICAgIHByaW1pdGl2ZTogcHJpbWl0aXZlLFxuICAgIHRhZzogdGFnLFxuICAgIHRhZ1N0cjogdGFnU3RyXG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlckRlY29kZUxlbihidWYsIHByaW1pdGl2ZSwgZmFpbCkge1xuICB2YXIgbGVuID0gYnVmLnJlYWRVSW50OChmYWlsKTtcbiAgaWYgKGJ1Zi5pc0Vycm9yKGxlbikpXG4gICAgcmV0dXJuIGxlbjtcblxuICAvLyBJbmRlZmluaXRlIGZvcm1cbiAgaWYgKCFwcmltaXRpdmUgJiYgbGVuID09PSAweDgwKVxuICAgIHJldHVybiBudWxsO1xuXG4gIC8vIERlZmluaXRlIGZvcm1cbiAgaWYgKChsZW4gJiAweDgwKSA9PT0gMCkge1xuICAgIC8vIFNob3J0IGZvcm1cbiAgICByZXR1cm4gbGVuO1xuICB9XG5cbiAgLy8gTG9uZyBmb3JtXG4gIHZhciBudW0gPSBsZW4gJiAweDdmO1xuICBpZiAobnVtID49IDQpXG4gICAgcmV0dXJuIGJ1Zi5lcnJvcignbGVuZ3RoIG9jdGVjdCBpcyB0b28gbG9uZycpO1xuXG4gIGxlbiA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtOyBpKyspIHtcbiAgICBsZW4gPDw9IDg7XG4gICAgdmFyIGogPSBidWYucmVhZFVJbnQ4KGZhaWwpO1xuICAgIGlmIChidWYuaXNFcnJvcihqKSlcbiAgICAgIHJldHVybiBqO1xuICAgIGxlbiB8PSBqO1xuICB9XG5cbiAgcmV0dXJuIGxlbjtcbn1cbiIsInZhciBkZWNvZGVycyA9IGV4cG9ydHM7XG5cbmRlY29kZXJzLmRlciA9IHJlcXVpcmUoJy4vZGVyJyk7XG5kZWNvZGVycy5wZW0gPSByZXF1aXJlKCcuL3BlbScpO1xuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbnZhciBhc24xID0gcmVxdWlyZSgnLi4vLi4vYXNuMScpO1xudmFyIERFUkRlY29kZXIgPSByZXF1aXJlKCcuL2RlcicpO1xuXG5mdW5jdGlvbiBQRU1EZWNvZGVyKGVudGl0eSkge1xuICBERVJEZWNvZGVyLmNhbGwodGhpcywgZW50aXR5KTtcbiAgdGhpcy5lbmMgPSAncGVtJztcbn07XG5pbmhlcml0cyhQRU1EZWNvZGVyLCBERVJEZWNvZGVyKTtcbm1vZHVsZS5leHBvcnRzID0gUEVNRGVjb2RlcjtcblxuUEVNRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKGRhdGEsIG9wdGlvbnMpIHtcbiAgdmFyIGxpbmVzID0gZGF0YS50b1N0cmluZygpLnNwbGl0KC9bXFxyXFxuXSsvZyk7XG5cbiAgdmFyIGxhYmVsID0gb3B0aW9ucy5sYWJlbC50b1VwcGVyQ2FzZSgpO1xuXG4gIHZhciByZSA9IC9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLztcbiAgdmFyIHN0YXJ0ID0gLTE7XG4gIHZhciBlbmQgPSAtMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtYXRjaCA9IGxpbmVzW2ldLm1hdGNoKHJlKTtcbiAgICBpZiAobWF0Y2ggPT09IG51bGwpXG4gICAgICBjb250aW51ZTtcblxuICAgIGlmIChtYXRjaFsyXSAhPT0gbGFiZWwpXG4gICAgICBjb250aW51ZTtcblxuICAgIGlmIChzdGFydCA9PT0gLTEpIHtcbiAgICAgIGlmIChtYXRjaFsxXSAhPT0gJ0JFR0lOJylcbiAgICAgICAgYnJlYWs7XG4gICAgICBzdGFydCA9IGk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtYXRjaFsxXSAhPT0gJ0VORCcpXG4gICAgICAgIGJyZWFrO1xuICAgICAgZW5kID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoc3RhcnQgPT09IC0xIHx8IGVuZCA9PT0gLTEpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAnICsgbGFiZWwpO1xuXG4gIHZhciBiYXNlNjQgPSBsaW5lcy5zbGljZShzdGFydCArIDEsIGVuZCkuam9pbignJyk7XG4gIC8vIFJlbW92ZSBleGNlc3NpdmUgc3ltYm9sc1xuICBiYXNlNjQucmVwbGFjZSgvW15hLXowLTlcXCtcXC89XSsvZ2ksICcnKTtcblxuICB2YXIgaW5wdXQgPSBuZXcgQnVmZmVyKGJhc2U2NCwgJ2Jhc2U2NCcpO1xuICByZXR1cm4gREVSRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcywgaW5wdXQsIG9wdGlvbnMpO1xufTtcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuXG52YXIgYXNuMSA9IHJlcXVpcmUoJy4uLy4uL2FzbjEnKTtcbnZhciBiYXNlID0gYXNuMS5iYXNlO1xudmFyIGJpZ251bSA9IGFzbjEuYmlnbnVtO1xuXG4vLyBJbXBvcnQgREVSIGNvbnN0YW50c1xudmFyIGRlciA9IGFzbjEuY29uc3RhbnRzLmRlcjtcblxuZnVuY3Rpb24gREVSRW5jb2RlcihlbnRpdHkpIHtcbiAgdGhpcy5lbmMgPSAnZGVyJztcbiAgdGhpcy5uYW1lID0gZW50aXR5Lm5hbWU7XG4gIHRoaXMuZW50aXR5ID0gZW50aXR5O1xuXG4gIC8vIENvbnN0cnVjdCBiYXNlIHRyZWVcbiAgdGhpcy50cmVlID0gbmV3IERFUk5vZGUoKTtcbiAgdGhpcy50cmVlLl9pbml0KGVudGl0eS5ib2R5KTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IERFUkVuY29kZXI7XG5cbkRFUkVuY29kZXIucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShkYXRhLCByZXBvcnRlcikge1xuICByZXR1cm4gdGhpcy50cmVlLl9lbmNvZGUoZGF0YSwgcmVwb3J0ZXIpLmpvaW4oKTtcbn07XG5cbi8vIFRyZWUgbWV0aG9kc1xuXG5mdW5jdGlvbiBERVJOb2RlKHBhcmVudCkge1xuICBiYXNlLk5vZGUuY2FsbCh0aGlzLCAnZGVyJywgcGFyZW50KTtcbn1cbmluaGVyaXRzKERFUk5vZGUsIGJhc2UuTm9kZSk7XG5cbkRFUk5vZGUucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGUgPSBmdW5jdGlvbiBlbmNvZGVDb21wb3NpdGUodGFnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCkge1xuICB2YXIgZW5jb2RlZFRhZyA9IGVuY29kZVRhZyh0YWcsIHByaW1pdGl2ZSwgY2xzLCB0aGlzLnJlcG9ydGVyKTtcblxuICAvLyBTaG9ydCBmb3JtXG4gIGlmIChjb250ZW50Lmxlbmd0aCA8IDB4ODApIHtcbiAgICB2YXIgaGVhZGVyID0gbmV3IEJ1ZmZlcigyKTtcbiAgICBoZWFkZXJbMF0gPSBlbmNvZGVkVGFnO1xuICAgIGhlYWRlclsxXSA9IGNvbnRlbnQubGVuZ3RoO1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFsgaGVhZGVyLCBjb250ZW50IF0pO1xuICB9XG5cbiAgLy8gTG9uZyBmb3JtXG4gIC8vIENvdW50IG9jdGV0cyByZXF1aXJlZCB0byBzdG9yZSBsZW5ndGhcbiAgdmFyIGxlbk9jdGV0cyA9IDE7XG4gIGZvciAodmFyIGkgPSBjb250ZW50Lmxlbmd0aDsgaSA+PSAweDEwMDsgaSA+Pj0gOClcbiAgICBsZW5PY3RldHMrKztcblxuICB2YXIgaGVhZGVyID0gbmV3IEJ1ZmZlcigxICsgMSArIGxlbk9jdGV0cyk7XG4gIGhlYWRlclswXSA9IGVuY29kZWRUYWc7XG4gIGhlYWRlclsxXSA9IDB4ODAgfCBsZW5PY3RldHM7XG5cbiAgZm9yICh2YXIgaSA9IDEgKyBsZW5PY3RldHMsIGogPSBjb250ZW50Lmxlbmd0aDsgaiA+IDA7IGktLSwgaiA+Pj0gOClcbiAgICBoZWFkZXJbaV0gPSBqICYgMHhmZjtcblxuICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbIGhlYWRlciwgY29udGVudCBdKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9lbmNvZGVTdHIgPSBmdW5jdGlvbiBlbmNvZGVTdHIoc3RyLCB0YWcpIHtcbiAgaWYgKHRhZyA9PT0gJ29jdHN0cicpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihzdHIpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2JpdHN0cicpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbIHN0ci51bnVzZWQgfCAwLCBzdHIuZGF0YSBdKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdpYTVzdHInIHx8IHRhZyA9PT0gJ3V0ZjhzdHInKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoc3RyKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdibXBzdHInKSB7XG4gICAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoc3RyLmxlbmd0aCAqIDIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBidWYud3JpdGVVSW50MTZCRShzdHIuY2hhckNvZGVBdChpKSwgaSAqIDIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihidWYpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ251bXN0cicpIHtcbiAgICBpZiAoIXRoaXMuX2lzTnVtc3RyKHN0cikpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgZGlnaXRzIGFuZCBzcGFjZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHN0cik7XG4gIH0gZWxzZSBpZiAodGFnID09PSAncHJpbnRzdHInKSB7XG4gICAgaWYgKCF0aGlzLl9pc1ByaW50c3RyKHN0cikpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb24gbWFyaycpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHN0cik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ0VuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAnICsgdGFnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIHVuc3VwcG9ydGVkJyk7XG4gIH1cbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9lbmNvZGVPYmppZCA9IGZ1bmN0aW9uIGVuY29kZU9iamlkKGlkLCB2YWx1ZXMsIHJlbGF0aXZlKSB7XG4gIGlmICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCF2YWx1ZXMpXG4gICAgICByZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcignc3RyaW5nIG9iamlkIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCBmb3VuZCcpO1xuICAgIGlmICghdmFsdWVzLmhhc093blByb3BlcnR5KGlkKSlcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcCcpO1xuICAgIGlkID0gdmFsdWVzW2lkXS5zcGxpdCgvW1xcc1xcLl0rL2cpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWQubGVuZ3RoOyBpKyspXG4gICAgICBpZFtpXSB8PSAwO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaWQpKSB7XG4gICAgaWQgPSBpZC5zbGljZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWQubGVuZ3RoOyBpKyspXG4gICAgICBpZFtpXSB8PSAwO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGlkKSkge1xuICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ290OiAnICsgSlNPTi5zdHJpbmdpZnkoaWQpKTtcbiAgfVxuXG4gIGlmICghcmVsYXRpdmUpIHtcbiAgICBpZiAoaWRbMV0gPj0gNDApXG4gICAgICByZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcignU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CJyk7XG4gICAgaWQuc3BsaWNlKDAsIDIsIGlkWzBdICogNDAgKyBpZFsxXSk7XG4gIH1cblxuICAvLyBDb3VudCBudW1iZXIgb2Ygb2N0ZXRzXG4gIHZhciBzaXplID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpZGVudCA9IGlkW2ldO1xuICAgIGZvciAoc2l6ZSsrOyBpZGVudCA+PSAweDgwOyBpZGVudCA+Pj0gNylcbiAgICAgIHNpemUrKztcbiAgfVxuXG4gIHZhciBvYmppZCA9IG5ldyBCdWZmZXIoc2l6ZSk7XG4gIHZhciBvZmZzZXQgPSBvYmppZC5sZW5ndGggLSAxO1xuICBmb3IgKHZhciBpID0gaWQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgaWRlbnQgPSBpZFtpXTtcbiAgICBvYmppZFtvZmZzZXQtLV0gPSBpZGVudCAmIDB4N2Y7XG4gICAgd2hpbGUgKChpZGVudCA+Pj0gNykgPiAwKVxuICAgICAgb2JqaWRbb2Zmc2V0LS1dID0gMHg4MCB8IChpZGVudCAmIDB4N2YpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIob2JqaWQpO1xufTtcblxuZnVuY3Rpb24gdHdvKG51bSkge1xuICBpZiAobnVtIDwgMTApXG4gICAgcmV0dXJuICcwJyArIG51bTtcbiAgZWxzZVxuICAgIHJldHVybiBudW07XG59XG5cbkRFUk5vZGUucHJvdG90eXBlLl9lbmNvZGVUaW1lID0gZnVuY3Rpb24gZW5jb2RlVGltZSh0aW1lLCB0YWcpIHtcbiAgdmFyIHN0cjtcbiAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh0aW1lKTtcblxuICBpZiAodGFnID09PSAnZ2VudGltZScpIHtcbiAgICBzdHIgPSBbXG4gICAgICB0d28oZGF0ZS5nZXRGdWxsWWVhcigpKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ0RhdGUoKSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENIb3VycygpKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ01pbnV0ZXMoKSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENTZWNvbmRzKCkpLFxuICAgICAgJ1onXG4gICAgXS5qb2luKCcnKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICd1dGN0aW1lJykge1xuICAgIHN0ciA9IFtcbiAgICAgIHR3byhkYXRlLmdldEZ1bGxZZWFyKCkgJSAxMDApLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDRGF0ZSgpKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ0hvdXJzKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDTWludXRlcygpKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ1NlY29uZHMoKSksXG4gICAgICAnWidcbiAgICBdLmpvaW4oJycpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ0VuY29kaW5nICcgKyB0YWcgKyAnIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQnKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9lbmNvZGVTdHIoc3RyLCAnb2N0c3RyJyk7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlTnVsbCA9IGZ1bmN0aW9uIGVuY29kZU51bGwoKSB7XG4gIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCcnKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9lbmNvZGVJbnQgPSBmdW5jdGlvbiBlbmNvZGVJbnQobnVtLCB2YWx1ZXMpIHtcbiAgaWYgKHR5cGVvZiBudW0gPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCF2YWx1ZXMpXG4gICAgICByZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcignU3RyaW5nIGludCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCcpO1xuICAgIGlmICghdmFsdWVzLmhhc093blByb3BlcnR5KG51bSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdWYWx1ZXMgbWFwIGRvZXNuXFwndCBjb250YWluOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG51bSkpO1xuICAgIH1cbiAgICBudW0gPSB2YWx1ZXNbbnVtXTtcbiAgfVxuXG4gIC8vIEJpZ251bSwgYXNzdW1lIGJpZyBlbmRpYW5cbiAgaWYgKHR5cGVvZiBudW0gIT09ICdudW1iZXInICYmICFCdWZmZXIuaXNCdWZmZXIobnVtKSkge1xuICAgIHZhciBudW1BcnJheSA9IG51bS50b0FycmF5KCk7XG4gICAgaWYgKCFudW0uc2lnbiAmJiBudW1BcnJheVswXSAmIDB4ODApIHtcbiAgICAgIG51bUFycmF5LnVuc2hpZnQoMCk7XG4gICAgfVxuICAgIG51bSA9IG5ldyBCdWZmZXIobnVtQXJyYXkpO1xuICB9XG5cbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihudW0pKSB7XG4gICAgdmFyIHNpemUgPSBudW0ubGVuZ3RoO1xuICAgIGlmIChudW0ubGVuZ3RoID09PSAwKVxuICAgICAgc2l6ZSsrO1xuXG4gICAgdmFyIG91dCA9IG5ldyBCdWZmZXIoc2l6ZSk7XG4gICAgbnVtLmNvcHkob3V0KTtcbiAgICBpZiAobnVtLmxlbmd0aCA9PT0gMClcbiAgICAgIG91dFswXSA9IDBcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihvdXQpO1xuICB9XG5cbiAgaWYgKG51bSA8IDB4ODApXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobnVtKTtcblxuICBpZiAobnVtIDwgMHgxMDApXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsIG51bV0pO1xuXG4gIHZhciBzaXplID0gMTtcbiAgZm9yICh2YXIgaSA9IG51bTsgaSA+PSAweDEwMDsgaSA+Pj0gOClcbiAgICBzaXplKys7XG5cbiAgdmFyIG91dCA9IG5ldyBBcnJheShzaXplKTtcbiAgZm9yICh2YXIgaSA9IG91dC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIG91dFtpXSA9IG51bSAmIDB4ZmY7XG4gICAgbnVtID4+PSA4O1xuICB9XG4gIGlmKG91dFswXSAmIDB4ODApIHtcbiAgICBvdXQudW5zaGlmdCgwKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyBCdWZmZXIob3V0KSk7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlQm9vbCA9IGZ1bmN0aW9uIGVuY29kZUJvb2wodmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodmFsdWUgPyAweGZmIDogMCk7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fdXNlID0gZnVuY3Rpb24gdXNlKGVudGl0eSwgb2JqKSB7XG4gIGlmICh0eXBlb2YgZW50aXR5ID09PSAnZnVuY3Rpb24nKVxuICAgIGVudGl0eSA9IGVudGl0eShvYmopO1xuICByZXR1cm4gZW50aXR5Ll9nZXRFbmNvZGVyKCdkZXInKS50cmVlO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX3NraXBEZWZhdWx0ID0gZnVuY3Rpb24gc2tpcERlZmF1bHQoZGF0YUJ1ZmZlciwgcmVwb3J0ZXIsIHBhcmVudCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gIHZhciBpO1xuICBpZiAoc3RhdGVbJ2RlZmF1bHQnXSA9PT0gbnVsbClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGRhdGEgPSBkYXRhQnVmZmVyLmpvaW4oKTtcbiAgaWYgKHN0YXRlLmRlZmF1bHRCdWZmZXIgPT09IHVuZGVmaW5lZClcbiAgICBzdGF0ZS5kZWZhdWx0QnVmZmVyID0gdGhpcy5fZW5jb2RlVmFsdWUoc3RhdGVbJ2RlZmF1bHQnXSwgcmVwb3J0ZXIsIHBhcmVudCkuam9pbigpO1xuXG4gIGlmIChkYXRhLmxlbmd0aCAhPT0gc3RhdGUuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGZvciAoaT0wOyBpIDwgZGF0YS5sZW5ndGg7IGkrKylcbiAgICBpZiAoZGF0YVtpXSAhPT0gc3RhdGUuZGVmYXVsdEJ1ZmZlcltpXSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vIFV0aWxpdHkgbWV0aG9kc1xuXG5mdW5jdGlvbiBlbmNvZGVUYWcodGFnLCBwcmltaXRpdmUsIGNscywgcmVwb3J0ZXIpIHtcbiAgdmFyIHJlcztcblxuICBpZiAodGFnID09PSAnc2Vxb2YnKVxuICAgIHRhZyA9ICdzZXEnO1xuICBlbHNlIGlmICh0YWcgPT09ICdzZXRvZicpXG4gICAgdGFnID0gJ3NldCc7XG5cbiAgaWYgKGRlci50YWdCeU5hbWUuaGFzT3duUHJvcGVydHkodGFnKSlcbiAgICByZXMgPSBkZXIudGFnQnlOYW1lW3RhZ107XG4gIGVsc2UgaWYgKHR5cGVvZiB0YWcgPT09ICdudW1iZXInICYmICh0YWcgfCAwKSA9PT0gdGFnKVxuICAgIHJlcyA9IHRhZztcbiAgZWxzZVxuICAgIHJldHVybiByZXBvcnRlci5lcnJvcignVW5rbm93biB0YWc6ICcgKyB0YWcpO1xuXG4gIGlmIChyZXMgPj0gMHgxZilcbiAgICByZXR1cm4gcmVwb3J0ZXIuZXJyb3IoJ011bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRlZCcpO1xuXG4gIGlmICghcHJpbWl0aXZlKVxuICAgIHJlcyB8PSAweDIwO1xuXG4gIHJlcyB8PSAoZGVyLnRhZ0NsYXNzQnlOYW1lW2NscyB8fCAndW5pdmVyc2FsJ10gPDwgNik7XG5cbiAgcmV0dXJuIHJlcztcbn1cbiIsInZhciBlbmNvZGVycyA9IGV4cG9ydHM7XG5cbmVuY29kZXJzLmRlciA9IHJlcXVpcmUoJy4vZGVyJyk7XG5lbmNvZGVycy5wZW0gPSByZXF1aXJlKCcuL3BlbScpO1xuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbnZhciBhc24xID0gcmVxdWlyZSgnLi4vLi4vYXNuMScpO1xudmFyIERFUkVuY29kZXIgPSByZXF1aXJlKCcuL2RlcicpO1xuXG5mdW5jdGlvbiBQRU1FbmNvZGVyKGVudGl0eSkge1xuICBERVJFbmNvZGVyLmNhbGwodGhpcywgZW50aXR5KTtcbiAgdGhpcy5lbmMgPSAncGVtJztcbn07XG5pbmhlcml0cyhQRU1FbmNvZGVyLCBERVJFbmNvZGVyKTtcbm1vZHVsZS5leHBvcnRzID0gUEVNRW5jb2RlcjtcblxuUEVNRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGRhdGEsIG9wdGlvbnMpIHtcbiAgdmFyIGJ1ZiA9IERFUkVuY29kZXIucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsIGRhdGEpO1xuXG4gIHZhciBwID0gYnVmLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgdmFyIG91dCA9IFsgJy0tLS0tQkVHSU4gJyArIG9wdGlvbnMubGFiZWwgKyAnLS0tLS0nIF07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcC5sZW5ndGg7IGkgKz0gNjQpXG4gICAgb3V0LnB1c2gocC5zbGljZShpLCBpICsgNjQpKTtcbiAgb3V0LnB1c2goJy0tLS0tRU5EICcgKyBvcHRpb25zLmxhYmVsICsgJy0tLS0tJyk7XG4gIHJldHVybiBvdXQuam9pbignXFxuJyk7XG59O1xuIiwiOyhmdW5jdGlvbiAoZXhwb3J0cykge1xuICAndXNlIHN0cmljdCdcblxuICB2YXIgbG9va3VwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5cbiAgdmFyIEFyciA9ICh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgPyBVaW50OEFycmF5XG4gICAgOiBBcnJheVxuXG4gIHZhciBQTFVTID0gJysnLmNoYXJDb2RlQXQoMClcbiAgdmFyIFNMQVNIID0gJy8nLmNoYXJDb2RlQXQoMClcbiAgdmFyIE5VTUJFUiA9ICcwJy5jaGFyQ29kZUF0KDApXG4gIHZhciBMT1dFUiA9ICdhJy5jaGFyQ29kZUF0KDApXG4gIHZhciBVUFBFUiA9ICdBJy5jaGFyQ29kZUF0KDApXG4gIHZhciBQTFVTX1VSTF9TQUZFID0gJy0nLmNoYXJDb2RlQXQoMClcbiAgdmFyIFNMQVNIX1VSTF9TQUZFID0gJ18nLmNoYXJDb2RlQXQoMClcblxuICBmdW5jdGlvbiBkZWNvZGUgKGVsdCkge1xuICAgIHZhciBjb2RlID0gZWx0LmNoYXJDb2RlQXQoMClcbiAgICBpZiAoY29kZSA9PT0gUExVUyB8fCBjb2RlID09PSBQTFVTX1VSTF9TQUZFKSByZXR1cm4gNjIgLy8gJysnXG4gICAgaWYgKGNvZGUgPT09IFNMQVNIIHx8IGNvZGUgPT09IFNMQVNIX1VSTF9TQUZFKSByZXR1cm4gNjMgLy8gJy8nXG4gICAgaWYgKGNvZGUgPCBOVU1CRVIpIHJldHVybiAtMSAvLyBubyBtYXRjaFxuICAgIGlmIChjb2RlIDwgTlVNQkVSICsgMTApIHJldHVybiBjb2RlIC0gTlVNQkVSICsgMjYgKyAyNlxuICAgIGlmIChjb2RlIDwgVVBQRVIgKyAyNikgcmV0dXJuIGNvZGUgLSBVUFBFUlxuICAgIGlmIChjb2RlIDwgTE9XRVIgKyAyNikgcmV0dXJuIGNvZGUgLSBMT1dFUiArIDI2XG4gIH1cblxuICBmdW5jdGlvbiBiNjRUb0J5dGVBcnJheSAoYjY0KSB7XG4gICAgdmFyIGksIGosIGwsIHRtcCwgcGxhY2VIb2xkZXJzLCBhcnJcblxuICAgIGlmIChiNjQubGVuZ3RoICUgNCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gICAgfVxuXG4gICAgLy8gdGhlIG51bWJlciBvZiBlcXVhbCBzaWducyAocGxhY2UgaG9sZGVycylcbiAgICAvLyBpZiB0aGVyZSBhcmUgdHdvIHBsYWNlaG9sZGVycywgdGhhbiB0aGUgdHdvIGNoYXJhY3RlcnMgYmVmb3JlIGl0XG4gICAgLy8gcmVwcmVzZW50IG9uZSBieXRlXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUsIHRoZW4gdGhlIHRocmVlIGNoYXJhY3RlcnMgYmVmb3JlIGl0IHJlcHJlc2VudCAyIGJ5dGVzXG4gICAgLy8gdGhpcyBpcyBqdXN0IGEgY2hlYXAgaGFjayB0byBub3QgZG8gaW5kZXhPZiB0d2ljZVxuICAgIHZhciBsZW4gPSBiNjQubGVuZ3RoXG4gICAgcGxhY2VIb2xkZXJzID0gYjY0LmNoYXJBdChsZW4gLSAyKSA9PT0gJz0nID8gMiA6IGI2NC5jaGFyQXQobGVuIC0gMSkgPT09ICc9JyA/IDEgOiAwXG5cbiAgICAvLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbiAgICBhcnIgPSBuZXcgQXJyKGI2NC5sZW5ndGggKiAzIC8gNCAtIHBsYWNlSG9sZGVycylcblxuICAgIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgICBsID0gcGxhY2VIb2xkZXJzID4gMCA/IGI2NC5sZW5ndGggLSA0IDogYjY0Lmxlbmd0aFxuXG4gICAgdmFyIEwgPSAwXG5cbiAgICBmdW5jdGlvbiBwdXNoICh2KSB7XG4gICAgICBhcnJbTCsrXSA9IHZcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGw7IGkgKz0gNCwgaiArPSAzKSB7XG4gICAgICB0bXAgPSAoZGVjb2RlKGI2NC5jaGFyQXQoaSkpIDw8IDE4KSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMSkpIDw8IDEyKSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMikpIDw8IDYpIHwgZGVjb2RlKGI2NC5jaGFyQXQoaSArIDMpKVxuICAgICAgcHVzaCgodG1wICYgMHhGRjAwMDApID4+IDE2KVxuICAgICAgcHVzaCgodG1wICYgMHhGRjAwKSA+PiA4KVxuICAgICAgcHVzaCh0bXAgJiAweEZGKVxuICAgIH1cblxuICAgIGlmIChwbGFjZUhvbGRlcnMgPT09IDIpIHtcbiAgICAgIHRtcCA9IChkZWNvZGUoYjY0LmNoYXJBdChpKSkgPDwgMikgfCAoZGVjb2RlKGI2NC5jaGFyQXQoaSArIDEpKSA+PiA0KVxuICAgICAgcHVzaCh0bXAgJiAweEZGKVxuICAgIH0gZWxzZSBpZiAocGxhY2VIb2xkZXJzID09PSAxKSB7XG4gICAgICB0bXAgPSAoZGVjb2RlKGI2NC5jaGFyQXQoaSkpIDw8IDEwKSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMSkpIDw8IDQpIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAyKSkgPj4gMilcbiAgICAgIHB1c2goKHRtcCA+PiA4KSAmIDB4RkYpXG4gICAgICBwdXNoKHRtcCAmIDB4RkYpXG4gICAgfVxuXG4gICAgcmV0dXJuIGFyclxuICB9XG5cbiAgZnVuY3Rpb24gdWludDhUb0Jhc2U2NCAodWludDgpIHtcbiAgICB2YXIgaVxuICAgIHZhciBleHRyYUJ5dGVzID0gdWludDgubGVuZ3RoICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICAgIHZhciBvdXRwdXQgPSAnJ1xuICAgIHZhciB0ZW1wLCBsZW5ndGhcblxuICAgIGZ1bmN0aW9uIGVuY29kZSAobnVtKSB7XG4gICAgICByZXR1cm4gbG9va3VwLmNoYXJBdChudW0pXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgICAgIHJldHVybiBlbmNvZGUobnVtID4+IDE4ICYgMHgzRikgKyBlbmNvZGUobnVtID4+IDEyICYgMHgzRikgKyBlbmNvZGUobnVtID4+IDYgJiAweDNGKSArIGVuY29kZShudW0gJiAweDNGKVxuICAgIH1cblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSB1aW50OC5sZW5ndGggLSBleHRyYUJ5dGVzOyBpIDwgbGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgIHRlbXAgPSAodWludDhbaV0gPDwgMTYpICsgKHVpbnQ4W2kgKyAxXSA8PCA4KSArICh1aW50OFtpICsgMl0pXG4gICAgICBvdXRwdXQgKz0gdHJpcGxldFRvQmFzZTY0KHRlbXApXG4gICAgfVxuXG4gICAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICAgIHN3aXRjaCAoZXh0cmFCeXRlcykge1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0ZW1wID0gdWludDhbdWludDgubGVuZ3RoIC0gMV1cbiAgICAgICAgb3V0cHV0ICs9IGVuY29kZSh0ZW1wID4+IDIpXG4gICAgICAgIG91dHB1dCArPSBlbmNvZGUoKHRlbXAgPDwgNCkgJiAweDNGKVxuICAgICAgICBvdXRwdXQgKz0gJz09J1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyOlxuICAgICAgICB0ZW1wID0gKHVpbnQ4W3VpbnQ4Lmxlbmd0aCAtIDJdIDw8IDgpICsgKHVpbnQ4W3VpbnQ4Lmxlbmd0aCAtIDFdKVxuICAgICAgICBvdXRwdXQgKz0gZW5jb2RlKHRlbXAgPj4gMTApXG4gICAgICAgIG91dHB1dCArPSBlbmNvZGUoKHRlbXAgPj4gNCkgJiAweDNGKVxuICAgICAgICBvdXRwdXQgKz0gZW5jb2RlKCh0ZW1wIDw8IDIpICYgMHgzRilcbiAgICAgICAgb3V0cHV0ICs9ICc9J1xuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0XG4gIH1cblxuICBleHBvcnRzLnRvQnl0ZUFycmF5ID0gYjY0VG9CeXRlQXJyYXlcbiAgZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gdWludDhUb0Jhc2U2NFxufSh0eXBlb2YgZXhwb3J0cyA9PT0gJ3VuZGVmaW5lZCcgPyAodGhpcy5iYXNlNjRqcyA9IHt9KSA6IGV4cG9ydHMpKVxuIiwiKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIFV0aWxzXG4gIGZ1bmN0aW9uIGFzc2VydCAodmFsLCBtc2cpIHtcbiAgICBpZiAoIXZhbCkgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xuICB9XG5cbiAgLy8gQ291bGQgdXNlIGBpbmhlcml0c2AgbW9kdWxlLCBidXQgZG9uJ3Qgd2FudCB0byBtb3ZlIGZyb20gc2luZ2xlIGZpbGVcbiAgLy8gYXJjaGl0ZWN0dXJlIHlldC5cbiAgZnVuY3Rpb24gaW5oZXJpdHMgKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yO1xuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9O1xuICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGU7XG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKTtcbiAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3I7XG4gIH1cblxuICAvLyBCTlxuXG4gIGZ1bmN0aW9uIEJOIChudW1iZXIsIGJhc2UsIGVuZGlhbikge1xuICAgIC8vIE1heSBiZSBgbmV3IEJOKGJuKWAgP1xuICAgIGlmIChudW1iZXIgIT09IG51bGwgJiZcbiAgICAgIHR5cGVvZiBudW1iZXIgPT09ICdvYmplY3QnICYmXG4gICAgICBBcnJheS5pc0FycmF5KG51bWJlci53b3JkcykpIHtcbiAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfVxuXG4gICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgdGhpcy53b3JkcyA9IG51bGw7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuXG4gICAgLy8gUmVkdWN0aW9uIGNvbnRleHRcbiAgICB0aGlzLnJlZCA9IG51bGw7XG5cbiAgICBpZiAobnVtYmVyICE9PSBudWxsKSB7XG4gICAgICBpZiAoYmFzZSA9PT0gJ2xlJyB8fCBiYXNlID09PSAnYmUnKSB7XG4gICAgICAgIGVuZGlhbiA9IGJhc2U7XG4gICAgICAgIGJhc2UgPSAxMDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faW5pdChudW1iZXIgfHwgMCwgYmFzZSB8fCAxMCwgZW5kaWFuIHx8ICdiZScpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IEJOO1xuICB9IGVsc2Uge1xuICAgIGV4cG9ydHMuQk4gPSBCTjtcbiAgfVxuXG4gIEJOLkJOID0gQk47XG4gIEJOLndvcmRTaXplID0gMjY7XG5cbiAgdmFyIEJ1ZmZlcjtcbiAgdHJ5IHtcbiAgICBCdWZmZXIgPSByZXF1aXJlKCdidWYnICsgJ2ZlcicpLkJ1ZmZlcjtcbiAgfSBjYXRjaCAoZSkge1xuICB9XG5cbiAgQk4ubWF4ID0gZnVuY3Rpb24gbWF4IChsZWZ0LCByaWdodCkge1xuICAgIGlmIChsZWZ0LmNtcChyaWdodCkgPiAwKSByZXR1cm4gbGVmdDtcbiAgICByZXR1cm4gcmlnaHQ7XG4gIH07XG5cbiAgQk4ubWluID0gZnVuY3Rpb24gbWluIChsZWZ0LCByaWdodCkge1xuICAgIGlmIChsZWZ0LmNtcChyaWdodCkgPCAwKSByZXR1cm4gbGVmdDtcbiAgICByZXR1cm4gcmlnaHQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdCAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICBpZiAodHlwZW9mIG51bWJlciA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbml0TnVtYmVyKG51bWJlciwgYmFzZSwgZW5kaWFuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG51bWJlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbml0QXJyYXkobnVtYmVyLCBiYXNlLCBlbmRpYW4pO1xuICAgIH1cblxuICAgIGlmIChiYXNlID09PSAnaGV4Jykge1xuICAgICAgYmFzZSA9IDE2O1xuICAgIH1cbiAgICBhc3NlcnQoYmFzZSA9PT0gKGJhc2UgfCAwKSAmJiBiYXNlID49IDIgJiYgYmFzZSA8PSAzNik7XG5cbiAgICBudW1iZXIgPSBudW1iZXIudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGlmIChudW1iZXJbMF0gPT09ICctJykge1xuICAgICAgc3RhcnQrKztcbiAgICB9XG5cbiAgICBpZiAoYmFzZSA9PT0gMTYpIHtcbiAgICAgIHRoaXMuX3BhcnNlSGV4KG51bWJlciwgc3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wYXJzZUJhc2UobnVtYmVyLCBiYXNlLCBzdGFydCk7XG4gICAgfVxuXG4gICAgaWYgKG51bWJlclswXSA9PT0gJy0nKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICB9XG5cbiAgICB0aGlzLnN0cmlwKCk7XG5cbiAgICBpZiAoZW5kaWFuICE9PSAnbGUnKSByZXR1cm47XG5cbiAgICB0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksIGJhc2UsIGVuZGlhbik7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pbml0TnVtYmVyID0gZnVuY3Rpb24gX2luaXROdW1iZXIgKG51bWJlciwgYmFzZSwgZW5kaWFuKSB7XG4gICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgbnVtYmVyID0gLW51bWJlcjtcbiAgICB9XG4gICAgaWYgKG51bWJlciA8IDB4NDAwMDAwMCkge1xuICAgICAgdGhpcy53b3JkcyA9IFsgbnVtYmVyICYgMHgzZmZmZmZmIF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgfSBlbHNlIGlmIChudW1iZXIgPCAweDEwMDAwMDAwMDAwMDAwKSB7XG4gICAgICB0aGlzLndvcmRzID0gW1xuICAgICAgICBudW1iZXIgJiAweDNmZmZmZmYsXG4gICAgICAgIChudW1iZXIgLyAweDQwMDAwMDApICYgMHgzZmZmZmZmXG4gICAgICBdO1xuICAgICAgdGhpcy5sZW5ndGggPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQobnVtYmVyIDwgMHgyMDAwMDAwMDAwMDAwMCk7IC8vIDIgXiA1MyAodW5zYWZlKVxuICAgICAgdGhpcy53b3JkcyA9IFtcbiAgICAgICAgbnVtYmVyICYgMHgzZmZmZmZmLFxuICAgICAgICAobnVtYmVyIC8gMHg0MDAwMDAwKSAmIDB4M2ZmZmZmZixcbiAgICAgICAgMVxuICAgICAgXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMztcbiAgICB9XG5cbiAgICBpZiAoZW5kaWFuICE9PSAnbGUnKSByZXR1cm47XG5cbiAgICAvLyBSZXZlcnNlIHRoZSBieXRlc1xuICAgIHRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSwgYmFzZSwgZW5kaWFuKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2luaXRBcnJheSA9IGZ1bmN0aW9uIF9pbml0QXJyYXkgKG51bWJlciwgYmFzZSwgZW5kaWFuKSB7XG4gICAgLy8gUGVyaGFwcyBhIFVpbnQ4QXJyYXlcbiAgICBhc3NlcnQodHlwZW9mIG51bWJlci5sZW5ndGggPT09ICdudW1iZXInKTtcbiAgICBpZiAobnVtYmVyLmxlbmd0aCA8PSAwKSB7XG4gICAgICB0aGlzLndvcmRzID0gWyAwIF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGguY2VpbChudW1iZXIubGVuZ3RoIC8gMyk7XG4gICAgdGhpcy53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gMDtcbiAgICB9XG5cbiAgICB2YXIgaiwgdztcbiAgICB2YXIgb2ZmID0gMDtcbiAgICBpZiAoZW5kaWFuID09PSAnYmUnKSB7XG4gICAgICBmb3IgKGkgPSBudW1iZXIubGVuZ3RoIC0gMSwgaiA9IDA7IGkgPj0gMDsgaSAtPSAzKSB7XG4gICAgICAgIHcgPSBudW1iZXJbaV0gfCAobnVtYmVyW2kgLSAxXSA8PCA4KSB8IChudW1iZXJbaSAtIDJdIDw8IDE2KTtcbiAgICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgICB0aGlzLndvcmRzW2ogKyAxXSA9ICh3ID4+PiAoMjYgLSBvZmYpKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgb2ZmICs9IDI0O1xuICAgICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgICAgb2ZmIC09IDI2O1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZW5kaWFuID09PSAnbGUnKSB7XG4gICAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG51bWJlci5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICB3ID0gbnVtYmVyW2ldIHwgKG51bWJlcltpICsgMV0gPDwgOCkgfCAobnVtYmVyW2kgKyAyXSA8PCAxNik7XG4gICAgICAgIHRoaXMud29yZHNbal0gfD0gKHcgPDwgb2ZmKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgdGhpcy53b3Jkc1tqICsgMV0gPSAodyA+Pj4gKDI2IC0gb2ZmKSkgJiAweDNmZmZmZmY7XG4gICAgICAgIG9mZiArPSAyNDtcbiAgICAgICAgaWYgKG9mZiA+PSAyNikge1xuICAgICAgICAgIG9mZiAtPSAyNjtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBmdW5jdGlvbiBwYXJzZUhleCAoc3RyLCBzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSAwO1xuICAgIHZhciBsZW4gPSBNYXRoLm1pbihzdHIubGVuZ3RoLCBlbmQpO1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpIC0gNDg7XG5cbiAgICAgIHIgPDw9IDQ7XG5cbiAgICAgIC8vICdhJyAtICdmJ1xuICAgICAgaWYgKGMgPj0gNDkgJiYgYyA8PSA1NCkge1xuICAgICAgICByIHw9IGMgLSA0OSArIDB4YTtcblxuICAgICAgLy8gJ0EnIC0gJ0YnXG4gICAgICB9IGVsc2UgaWYgKGMgPj0gMTcgJiYgYyA8PSAyMikge1xuICAgICAgICByIHw9IGMgLSAxNyArIDB4YTtcblxuICAgICAgLy8gJzAnIC0gJzknXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByIHw9IGMgJiAweGY7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG5cbiAgQk4ucHJvdG90eXBlLl9wYXJzZUhleCA9IGZ1bmN0aW9uIF9wYXJzZUhleCAobnVtYmVyLCBzdGFydCkge1xuICAgIC8vIENyZWF0ZSBwb3NzaWJseSBiaWdnZXIgYXJyYXkgdG8gZW5zdXJlIHRoYXQgaXQgZml0cyB0aGUgbnVtYmVyXG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLmNlaWwoKG51bWJlci5sZW5ndGggLSBzdGFydCkgLyA2KTtcbiAgICB0aGlzLndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAwO1xuICAgIH1cblxuICAgIHZhciBqLCB3O1xuICAgIC8vIFNjYW4gMjQtYml0IGNodW5rcyBhbmQgYWRkIHRoZW0gdG8gdGhlIG51bWJlclxuICAgIHZhciBvZmYgPSAwO1xuICAgIGZvciAoaSA9IG51bWJlci5sZW5ndGggLSA2LCBqID0gMDsgaSA+PSBzdGFydDsgaSAtPSA2KSB7XG4gICAgICB3ID0gcGFyc2VIZXgobnVtYmVyLCBpLCBpICsgNik7XG4gICAgICB0aGlzLndvcmRzW2pdIHw9ICh3IDw8IG9mZikgJiAweDNmZmZmZmY7XG4gICAgICB0aGlzLndvcmRzW2ogKyAxXSB8PSB3ID4+PiAoMjYgLSBvZmYpICYgMHgzZmZmZmY7XG4gICAgICBvZmYgKz0gMjQ7XG4gICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgIG9mZiAtPSAyNjtcbiAgICAgICAgaisrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaSArIDYgIT09IHN0YXJ0KSB7XG4gICAgICB3ID0gcGFyc2VIZXgobnVtYmVyLCBzdGFydCwgaSArIDYpO1xuICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgdGhpcy53b3Jkc1tqICsgMV0gfD0gdyA+Pj4gKDI2IC0gb2ZmKSAmIDB4M2ZmZmZmO1xuICAgIH1cbiAgICB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcGFyc2VCYXNlIChzdHIsIHN0YXJ0LCBlbmQsIG11bCkge1xuICAgIHZhciByID0gMDtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oc3RyLmxlbmd0aCwgZW5kKTtcbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBsZW47IGkrKykge1xuICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKSAtIDQ4O1xuXG4gICAgICByICo9IG11bDtcblxuICAgICAgLy8gJ2EnXG4gICAgICBpZiAoYyA+PSA0OSkge1xuICAgICAgICByICs9IGMgLSA0OSArIDB4YTtcblxuICAgICAgLy8gJ0EnXG4gICAgICB9IGVsc2UgaWYgKGMgPj0gMTcpIHtcbiAgICAgICAgciArPSBjIC0gMTcgKyAweGE7XG5cbiAgICAgIC8vICcwJyAtICc5J1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgciArPSBjO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIEJOLnByb3RvdHlwZS5fcGFyc2VCYXNlID0gZnVuY3Rpb24gX3BhcnNlQmFzZSAobnVtYmVyLCBiYXNlLCBzdGFydCkge1xuICAgIC8vIEluaXRpYWxpemUgYXMgemVyb1xuICAgIHRoaXMud29yZHMgPSBbIDAgXTtcbiAgICB0aGlzLmxlbmd0aCA9IDE7XG5cbiAgICAvLyBGaW5kIGxlbmd0aCBvZiBsaW1iIGluIGJhc2VcbiAgICBmb3IgKHZhciBsaW1iTGVuID0gMCwgbGltYlBvdyA9IDE7IGxpbWJQb3cgPD0gMHgzZmZmZmZmOyBsaW1iUG93ICo9IGJhc2UpIHtcbiAgICAgIGxpbWJMZW4rKztcbiAgICB9XG4gICAgbGltYkxlbi0tO1xuICAgIGxpbWJQb3cgPSAobGltYlBvdyAvIGJhc2UpIHwgMDtcblxuICAgIHZhciB0b3RhbCA9IG51bWJlci5sZW5ndGggLSBzdGFydDtcbiAgICB2YXIgbW9kID0gdG90YWwgJSBsaW1iTGVuO1xuICAgIHZhciBlbmQgPSBNYXRoLm1pbih0b3RhbCwgdG90YWwgLSBtb2QpICsgc3RhcnQ7XG5cbiAgICB2YXIgd29yZCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGxpbWJMZW4pIHtcbiAgICAgIHdvcmQgPSBwYXJzZUJhc2UobnVtYmVyLCBpLCBpICsgbGltYkxlbiwgYmFzZSk7XG5cbiAgICAgIHRoaXMuaW11bG4obGltYlBvdyk7XG4gICAgICBpZiAodGhpcy53b3Jkc1swXSArIHdvcmQgPCAweDQwMDAwMDApIHtcbiAgICAgICAgdGhpcy53b3Jkc1swXSArPSB3b3JkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faWFkZG4od29yZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vZCAhPT0gMCkge1xuICAgICAgdmFyIHBvdyA9IDE7XG4gICAgICB3b3JkID0gcGFyc2VCYXNlKG51bWJlciwgaSwgbnVtYmVyLmxlbmd0aCwgYmFzZSk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBtb2Q7IGkrKykge1xuICAgICAgICBwb3cgKj0gYmFzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbXVsbihwb3cpO1xuICAgICAgaWYgKHRoaXMud29yZHNbMF0gKyB3b3JkIDwgMHg0MDAwMDAwKSB7XG4gICAgICAgIHRoaXMud29yZHNbMF0gKz0gd29yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2lhZGRuKHdvcmQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBCTi5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKGRlc3QpIHtcbiAgICBkZXN0LndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlc3Qud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldO1xuICAgIH1cbiAgICBkZXN0Lmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIGRlc3QubmVnYXRpdmUgPSB0aGlzLm5lZ2F0aXZlO1xuICAgIGRlc3QucmVkID0gdGhpcy5yZWQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gY2xvbmUgKCkge1xuICAgIHZhciByID0gbmV3IEJOKG51bGwpO1xuICAgIHRoaXMuY29weShyKTtcbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICAvLyBSZW1vdmUgbGVhZGluZyBgMGAgZnJvbSBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnN0cmlwID0gZnVuY3Rpb24gc3RyaXAgKCkge1xuICAgIHdoaWxlICh0aGlzLmxlbmd0aCA+IDEgJiYgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCAtIDFdID09PSAwKSB7XG4gICAgICB0aGlzLmxlbmd0aC0tO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbm9ybVNpZ24oKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX25vcm1TaWduID0gZnVuY3Rpb24gX25vcm1TaWduICgpIHtcbiAgICAvLyAtMCA9IDBcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEgJiYgdGhpcy53b3Jkc1swXSA9PT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gICAgcmV0dXJuICh0aGlzLnJlZCA/ICc8Qk4tUjogJyA6ICc8Qk46ICcpICsgdGhpcy50b1N0cmluZygxNikgKyAnPic7XG4gIH07XG5cbiAgLypcblxuICB2YXIgemVyb3MgPSBbXTtcbiAgdmFyIGdyb3VwU2l6ZXMgPSBbXTtcbiAgdmFyIGdyb3VwQmFzZXMgPSBbXTtcblxuICB2YXIgcyA9ICcnO1xuICB2YXIgaSA9IC0xO1xuICB3aGlsZSAoKytpIDwgQk4ud29yZFNpemUpIHtcbiAgICB6ZXJvc1tpXSA9IHM7XG4gICAgcyArPSAnMCc7XG4gIH1cbiAgZ3JvdXBTaXplc1swXSA9IDA7XG4gIGdyb3VwU2l6ZXNbMV0gPSAwO1xuICBncm91cEJhc2VzWzBdID0gMDtcbiAgZ3JvdXBCYXNlc1sxXSA9IDA7XG4gIHZhciBiYXNlID0gMiAtIDE7XG4gIHdoaWxlICgrK2Jhc2UgPCAzNiArIDEpIHtcbiAgICB2YXIgZ3JvdXBTaXplID0gMDtcbiAgICB2YXIgZ3JvdXBCYXNlID0gMTtcbiAgICB3aGlsZSAoZ3JvdXBCYXNlIDwgKDEgPDwgQk4ud29yZFNpemUpIC8gYmFzZSkge1xuICAgICAgZ3JvdXBCYXNlICo9IGJhc2U7XG4gICAgICBncm91cFNpemUgKz0gMTtcbiAgICB9XG4gICAgZ3JvdXBTaXplc1tiYXNlXSA9IGdyb3VwU2l6ZTtcbiAgICBncm91cEJhc2VzW2Jhc2VdID0gZ3JvdXBCYXNlO1xuICB9XG5cbiAgKi9cblxuICB2YXIgemVyb3MgPSBbXG4gICAgJycsXG4gICAgJzAnLFxuICAgICcwMCcsXG4gICAgJzAwMCcsXG4gICAgJzAwMDAnLFxuICAgICcwMDAwMCcsXG4gICAgJzAwMDAwMCcsXG4gICAgJzAwMDAwMDAnLFxuICAgICcwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnXG4gIF07XG5cbiAgdmFyIGdyb3VwU2l6ZXMgPSBbXG4gICAgMCwgMCxcbiAgICAyNSwgMTYsIDEyLCAxMSwgMTAsIDksIDgsXG4gICAgOCwgNywgNywgNywgNywgNiwgNixcbiAgICA2LCA2LCA2LCA2LCA2LCA1LCA1LFxuICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsXG4gICAgNSwgNSwgNSwgNSwgNSwgNSwgNVxuICBdO1xuXG4gIHZhciBncm91cEJhc2VzID0gW1xuICAgIDAsIDAsXG4gICAgMzM1NTQ0MzIsIDQzMDQ2NzIxLCAxNjc3NzIxNiwgNDg4MjgxMjUsIDYwNDY2MTc2LCA0MDM1MzYwNywgMTY3NzcyMTYsXG4gICAgNDMwNDY3MjEsIDEwMDAwMDAwLCAxOTQ4NzE3MSwgMzU4MzE4MDgsIDYyNzQ4NTE3LCA3NTI5NTM2LCAxMTM5MDYyNSxcbiAgICAxNjc3NzIxNiwgMjQxMzc1NjksIDM0MDEyMjI0LCA0NzA0NTg4MSwgNjQwMDAwMDAsIDQwODQxMDEsIDUxNTM2MzIsXG4gICAgNjQzNjM0MywgNzk2MjYyNCwgOTc2NTYyNSwgMTE4ODEzNzYsIDE0MzQ4OTA3LCAxNzIxMDM2OCwgMjA1MTExNDksXG4gICAgMjQzMDAwMDAsIDI4NjI5MTUxLCAzMzU1NDQzMiwgMzkxMzUzOTMsIDQ1NDM1NDI0LCA1MjUyMTg3NSwgNjA0NjYxNzZcbiAgXTtcblxuICBCTi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoYmFzZSwgcGFkZGluZykge1xuICAgIGJhc2UgPSBiYXNlIHx8IDEwO1xuICAgIHBhZGRpbmcgPSBwYWRkaW5nIHwgMCB8fCAxO1xuXG4gICAgdmFyIG91dDtcbiAgICBpZiAoYmFzZSA9PT0gMTYgfHwgYmFzZSA9PT0gJ2hleCcpIHtcbiAgICAgIG91dCA9ICcnO1xuICAgICAgdmFyIG9mZiA9IDA7XG4gICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB3ID0gdGhpcy53b3Jkc1tpXTtcbiAgICAgICAgdmFyIHdvcmQgPSAoKCh3IDw8IG9mZikgfCBjYXJyeSkgJiAweGZmZmZmZikudG9TdHJpbmcoMTYpO1xuICAgICAgICBjYXJyeSA9ICh3ID4+PiAoMjQgLSBvZmYpKSAmIDB4ZmZmZmZmO1xuICAgICAgICBpZiAoY2FycnkgIT09IDAgfHwgaSAhPT0gdGhpcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgb3V0ID0gemVyb3NbNiAtIHdvcmQubGVuZ3RoXSArIHdvcmQgKyBvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ID0gd29yZCArIG91dDtcbiAgICAgICAgfVxuICAgICAgICBvZmYgKz0gMjtcbiAgICAgICAgaWYgKG9mZiA+PSAyNikge1xuICAgICAgICAgIG9mZiAtPSAyNjtcbiAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgICBvdXQgPSBjYXJyeS50b1N0cmluZygxNikgKyBvdXQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAob3V0Lmxlbmd0aCAlIHBhZGRpbmcgIT09IDApIHtcbiAgICAgICAgb3V0ID0gJzAnICsgb3V0O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgb3V0ID0gJy0nICsgb3V0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBpZiAoYmFzZSA9PT0gKGJhc2UgfCAwKSAmJiBiYXNlID49IDIgJiYgYmFzZSA8PSAzNikge1xuICAgICAgLy8gdmFyIGdyb3VwU2l6ZSA9IE1hdGguZmxvb3IoQk4ud29yZFNpemUgKiBNYXRoLkxOMiAvIE1hdGgubG9nKGJhc2UpKTtcbiAgICAgIHZhciBncm91cFNpemUgPSBncm91cFNpemVzW2Jhc2VdO1xuICAgICAgLy8gdmFyIGdyb3VwQmFzZSA9IE1hdGgucG93KGJhc2UsIGdyb3VwU2l6ZSk7XG4gICAgICB2YXIgZ3JvdXBCYXNlID0gZ3JvdXBCYXNlc1tiYXNlXTtcbiAgICAgIG91dCA9ICcnO1xuICAgICAgdmFyIGMgPSB0aGlzLmNsb25lKCk7XG4gICAgICBjLm5lZ2F0aXZlID0gMDtcbiAgICAgIHdoaWxlICghYy5pc1plcm8oKSkge1xuICAgICAgICB2YXIgciA9IGMubW9kbihncm91cEJhc2UpLnRvU3RyaW5nKGJhc2UpO1xuICAgICAgICBjID0gYy5pZGl2bihncm91cEJhc2UpO1xuXG4gICAgICAgIGlmICghYy5pc1plcm8oKSkge1xuICAgICAgICAgIG91dCA9IHplcm9zW2dyb3VwU2l6ZSAtIHIubGVuZ3RoXSArIHIgKyBvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ID0gciArIG91dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNaZXJvKCkpIHtcbiAgICAgICAgb3V0ID0gJzAnICsgb3V0O1xuICAgICAgfVxuICAgICAgd2hpbGUgKG91dC5sZW5ndGggJSBwYWRkaW5nICE9PSAwKSB7XG4gICAgICAgIG91dCA9ICcwJyArIG91dDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICAgIG91dCA9ICctJyArIG91dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgYXNzZXJ0KGZhbHNlLCAnQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNicpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b051bWJlciA9IGZ1bmN0aW9uIHRvTnVtYmVyICgpIHtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5iaXRMZW5ndGgoKTtcbiAgICB2YXIgcmV0O1xuICAgIGlmIChsZW5ndGggPD0gMjYpIHtcbiAgICAgIHJldCA9IHRoaXMud29yZHNbMF07XG4gICAgfSBlbHNlIGlmIChsZW5ndGggPD0gNTIpIHtcbiAgICAgIHJldCA9ICh0aGlzLndvcmRzWzFdICogMHg0MDAwMDAwKSArIHRoaXMud29yZHNbMF07XG4gICAgfSBlbHNlIGlmIChsZW5ndGggPT09IDUzKSB7XG4gICAgICAvLyBOT1RFOiBhdCB0aGlzIHN0YWdlIGl0IGlzIGtub3duIHRoYXQgdGhlIHRvcCBiaXQgaXMgc2V0XG4gICAgICByZXQgPSAweDEwMDAwMDAwMDAwMDAwICsgKHRoaXMud29yZHNbMV0gKiAweDQwMDAwMDApICsgdGhpcy53b3Jkc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGZhbHNlLCAnTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzJyk7XG4gICAgfVxuICAgIHJldHVybiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkgPyAtcmV0IDogcmV0O1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKDE2KTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9CdWZmZXIgPSBmdW5jdGlvbiB0b0J1ZmZlciAoZW5kaWFuLCBsZW5ndGgpIHtcbiAgICBhc3NlcnQodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpO1xuICAgIHJldHVybiB0aGlzLnRvQXJyYXlMaWtlKEJ1ZmZlciwgZW5kaWFuLCBsZW5ndGgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSAoZW5kaWFuLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSwgZW5kaWFuLCBsZW5ndGgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0FycmF5TGlrZSA9IGZ1bmN0aW9uIHRvQXJyYXlMaWtlIChBcnJheVR5cGUsIGVuZGlhbiwgbGVuZ3RoKSB7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0aGlzLmJ5dGVMZW5ndGgoKTtcbiAgICB2YXIgcmVxTGVuZ3RoID0gbGVuZ3RoIHx8IE1hdGgubWF4KDEsIGJ5dGVMZW5ndGgpO1xuICAgIGFzc2VydChieXRlTGVuZ3RoIDw9IHJlcUxlbmd0aCwgJ2J5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgnKTtcbiAgICBhc3NlcnQocmVxTGVuZ3RoID4gMCwgJ1JlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCcpO1xuXG4gICAgdGhpcy5zdHJpcCgpO1xuICAgIHZhciBsaXR0bGVFbmRpYW4gPSBlbmRpYW4gPT09ICdsZSc7XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheVR5cGUocmVxTGVuZ3RoKTtcblxuICAgIHZhciBiLCBpO1xuICAgIHZhciBxID0gdGhpcy5jbG9uZSgpO1xuICAgIGlmICghbGl0dGxlRW5kaWFuKSB7XG4gICAgICAvLyBBc3N1bWUgYmlnLWVuZGlhblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJlcUxlbmd0aCAtIGJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICByZXNbaV0gPSAwO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyAhcS5pc1plcm8oKTsgaSsrKSB7XG4gICAgICAgIGIgPSBxLmFuZGxuKDB4ZmYpO1xuICAgICAgICBxLml1c2hybig4KTtcblxuICAgICAgICByZXNbcmVxTGVuZ3RoIC0gaSAtIDFdID0gYjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gMDsgIXEuaXNaZXJvKCk7IGkrKykge1xuICAgICAgICBiID0gcS5hbmRsbigweGZmKTtcbiAgICAgICAgcS5pdXNocm4oOCk7XG5cbiAgICAgICAgcmVzW2ldID0gYjtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IGkgPCByZXFMZW5ndGg7IGkrKykge1xuICAgICAgICByZXNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgaWYgKE1hdGguY2x6MzIpIHtcbiAgICBCTi5wcm90b3R5cGUuX2NvdW50Qml0cyA9IGZ1bmN0aW9uIF9jb3VudEJpdHMgKHcpIHtcbiAgICAgIHJldHVybiAzMiAtIE1hdGguY2x6MzIodyk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBCTi5wcm90b3R5cGUuX2NvdW50Qml0cyA9IGZ1bmN0aW9uIF9jb3VudEJpdHMgKHcpIHtcbiAgICAgIHZhciB0ID0gdztcbiAgICAgIHZhciByID0gMDtcbiAgICAgIGlmICh0ID49IDB4MTAwMCkge1xuICAgICAgICByICs9IDEzO1xuICAgICAgICB0ID4+Pj0gMTM7XG4gICAgICB9XG4gICAgICBpZiAodCA+PSAweDQwKSB7XG4gICAgICAgIHIgKz0gNztcbiAgICAgICAgdCA+Pj49IDc7XG4gICAgICB9XG4gICAgICBpZiAodCA+PSAweDgpIHtcbiAgICAgICAgciArPSA0O1xuICAgICAgICB0ID4+Pj0gNDtcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4MDIpIHtcbiAgICAgICAgciArPSAyO1xuICAgICAgICB0ID4+Pj0gMjtcbiAgICAgIH1cbiAgICAgIHJldHVybiByICsgdDtcbiAgICB9O1xuICB9XG5cbiAgQk4ucHJvdG90eXBlLl96ZXJvQml0cyA9IGZ1bmN0aW9uIF96ZXJvQml0cyAodykge1xuICAgIC8vIFNob3J0LWN1dFxuICAgIGlmICh3ID09PSAwKSByZXR1cm4gMjY7XG5cbiAgICB2YXIgdCA9IHc7XG4gICAgdmFyIHIgPSAwO1xuICAgIGlmICgodCAmIDB4MWZmZikgPT09IDApIHtcbiAgICAgIHIgKz0gMTM7XG4gICAgICB0ID4+Pj0gMTM7XG4gICAgfVxuICAgIGlmICgodCAmIDB4N2YpID09PSAwKSB7XG4gICAgICByICs9IDc7XG4gICAgICB0ID4+Pj0gNztcbiAgICB9XG4gICAgaWYgKCh0ICYgMHhmKSA9PT0gMCkge1xuICAgICAgciArPSA0O1xuICAgICAgdCA+Pj49IDQ7XG4gICAgfVxuICAgIGlmICgodCAmIDB4MykgPT09IDApIHtcbiAgICAgIHIgKz0gMjtcbiAgICAgIHQgPj4+PSAyO1xuICAgIH1cbiAgICBpZiAoKHQgJiAweDEpID09PSAwKSB7XG4gICAgICByKys7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIC8vIFJldHVybiBudW1iZXIgb2YgdXNlZCBiaXRzIGluIGEgQk5cbiAgQk4ucHJvdG90eXBlLmJpdExlbmd0aCA9IGZ1bmN0aW9uIGJpdExlbmd0aCAoKSB7XG4gICAgdmFyIHcgPSB0aGlzLndvcmRzW3RoaXMubGVuZ3RoIC0gMV07XG4gICAgdmFyIGhpID0gdGhpcy5fY291bnRCaXRzKHcpO1xuICAgIHJldHVybiAodGhpcy5sZW5ndGggLSAxKSAqIDI2ICsgaGk7XG4gIH07XG5cbiAgZnVuY3Rpb24gdG9CaXRBcnJheSAobnVtKSB7XG4gICAgdmFyIHcgPSBuZXcgQXJyYXkobnVtLmJpdExlbmd0aCgpKTtcblxuICAgIGZvciAodmFyIGJpdCA9IDA7IGJpdCA8IHcubGVuZ3RoOyBiaXQrKykge1xuICAgICAgdmFyIG9mZiA9IChiaXQgLyAyNikgfCAwO1xuICAgICAgdmFyIHdiaXQgPSBiaXQgJSAyNjtcblxuICAgICAgd1tiaXRdID0gKG51bS53b3Jkc1tvZmZdICYgKDEgPDwgd2JpdCkpID4+PiB3Yml0O1xuICAgIH1cblxuICAgIHJldHVybiB3O1xuICB9XG5cbiAgLy8gTnVtYmVyIG9mIHRyYWlsaW5nIHplcm8gYml0c1xuICBCTi5wcm90b3R5cGUuemVyb0JpdHMgPSBmdW5jdGlvbiB6ZXJvQml0cyAoKSB7XG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpIHJldHVybiAwO1xuXG4gICAgdmFyIHIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGIgPSB0aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2ldKTtcbiAgICAgIHIgKz0gYjtcbiAgICAgIGlmIChiICE9PSAyNikgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ieXRlTGVuZ3RoID0gZnVuY3Rpb24gYnl0ZUxlbmd0aCAoKSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpIC8gOCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvVHdvcyA9IGZ1bmN0aW9uIHRvVHdvcyAod2lkdGgpIHtcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWJzKCkuaW5vdG4od2lkdGgpLmlhZGRuKDEpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5mcm9tVHdvcyA9IGZ1bmN0aW9uIGZyb21Ud29zICh3aWR0aCkge1xuICAgIGlmICh0aGlzLnRlc3RuKHdpZHRoIC0gMSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdG4od2lkdGgpLmlhZGRuKDEpLmluZWcoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaXNOZWcgPSBmdW5jdGlvbiBpc05lZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRpdmUgIT09IDA7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG5lZ2F0aXZlIGNsb25lIG9mIGB0aGlzYFxuICBCTi5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnICgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW5lZyA9IGZ1bmN0aW9uIGluZWcgKCkge1xuICAgIGlmICghdGhpcy5pc1plcm8oKSkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSBePSAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIE9yIGBudW1gIHdpdGggYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pdW9yID0gZnVuY3Rpb24gaXVvciAobnVtKSB7XG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoIDwgbnVtLmxlbmd0aCkge1xuICAgICAgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXSA9IDA7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldIHwgbnVtLndvcmRzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlvciA9IGZ1bmN0aW9uIGlvciAobnVtKSB7XG4gICAgYXNzZXJ0KCh0aGlzLm5lZ2F0aXZlIHwgbnVtLm5lZ2F0aXZlKSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXVvcihudW0pO1xuICB9O1xuXG4gIC8vIE9yIGBudW1gIHdpdGggYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5vciA9IGZ1bmN0aW9uIG9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLmlvcihudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pb3IodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVvciA9IGZ1bmN0aW9uIHVvciAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdW9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml1b3IodGhpcyk7XG4gIH07XG5cbiAgLy8gQW5kIGBudW1gIHdpdGggYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pdWFuZCA9IGZ1bmN0aW9uIGl1YW5kIChudW0pIHtcbiAgICAvLyBiID0gbWluLWxlbmd0aChudW0sIHRoaXMpXG4gICAgdmFyIGI7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkge1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYiA9IHRoaXM7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gdGhpcy53b3Jkc1tpXSAmIG51bS53b3Jkc1tpXTtcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IGIubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaWFuZCA9IGZ1bmN0aW9uIGlhbmQgKG51bSkge1xuICAgIGFzc2VydCgodGhpcy5uZWdhdGl2ZSB8IG51bS5uZWdhdGl2ZSkgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1YW5kKG51bSk7XG4gIH07XG5cbiAgLy8gQW5kIGBudW1gIHdpdGggYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiBhbmQgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaWFuZChudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pYW5kKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51YW5kID0gZnVuY3Rpb24gdWFuZCAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdWFuZChudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pdWFuZCh0aGlzKTtcbiAgfTtcblxuICAvLyBYb3IgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1eG9yID0gZnVuY3Rpb24gaXV4b3IgKG51bSkge1xuICAgIC8vIGEubGVuZ3RoID4gYi5sZW5ndGhcbiAgICB2YXIgYTtcbiAgICB2YXIgYjtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSB7XG4gICAgICBhID0gdGhpcztcbiAgICAgIGIgPSBudW07XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSBudW07XG4gICAgICBiID0gdGhpcztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldIF4gYi53b3Jkc1tpXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcyAhPT0gYSkge1xuICAgICAgZm9yICg7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYS5sZW5ndGg7XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5peG9yID0gZnVuY3Rpb24gaXhvciAobnVtKSB7XG4gICAgYXNzZXJ0KCh0aGlzLm5lZ2F0aXZlIHwgbnVtLm5lZ2F0aXZlKSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXV4b3IobnVtKTtcbiAgfTtcblxuICAvLyBYb3IgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uIHhvciAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5peG9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml4b3IodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnV4b3IgPSBmdW5jdGlvbiB1eG9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1eG9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml1eG9yKHRoaXMpO1xuICB9O1xuXG4gIC8vIE5vdCBgYHRoaXNgYCB3aXRoIGBgd2lkdGhgYCBiaXR3aWR0aFxuICBCTi5wcm90b3R5cGUuaW5vdG4gPSBmdW5jdGlvbiBpbm90biAod2lkdGgpIHtcbiAgICBhc3NlcnQodHlwZW9mIHdpZHRoID09PSAnbnVtYmVyJyAmJiB3aWR0aCA+PSAwKTtcblxuICAgIHZhciBieXRlc05lZWRlZCA9IE1hdGguY2VpbCh3aWR0aCAvIDI2KSB8IDA7XG4gICAgdmFyIGJpdHNMZWZ0ID0gd2lkdGggJSAyNjtcblxuICAgIC8vIEV4dGVuZCB0aGUgYnVmZmVyIHdpdGggbGVhZGluZyB6ZXJvZXNcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPCBieXRlc05lZWRlZCkge1xuICAgICAgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGJpdHNMZWZ0ID4gMCkge1xuICAgICAgYnl0ZXNOZWVkZWQtLTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgY29tcGxldGUgd29yZHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzTmVlZGVkOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB+dGhpcy53b3Jkc1tpXSAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHJlc2lkdWVcbiAgICBpZiAoYml0c0xlZnQgPiAwKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gfnRoaXMud29yZHNbaV0gJiAoMHgzZmZmZmZmID4+ICgyNiAtIGJpdHNMZWZ0KSk7XG4gICAgfVxuXG4gICAgLy8gQW5kIHJlbW92ZSBsZWFkaW5nIHplcm9lc1xuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLm5vdG4gPSBmdW5jdGlvbiBub3RuICh3aWR0aCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW5vdG4od2lkdGgpO1xuICB9O1xuXG4gIC8vIFNldCBgYml0YCBvZiBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnNldG4gPSBmdW5jdGlvbiBzZXRuIChiaXQsIHZhbCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0ID09PSAnbnVtYmVyJyAmJiBiaXQgPj0gMCk7XG5cbiAgICB2YXIgb2ZmID0gKGJpdCAvIDI2KSB8IDA7XG4gICAgdmFyIHdiaXQgPSBiaXQgJSAyNjtcblxuICAgIHdoaWxlICh0aGlzLmxlbmd0aCA8PSBvZmYpIHtcbiAgICAgIHRoaXMud29yZHNbdGhpcy5sZW5ndGgrK10gPSAwO1xuICAgIH1cblxuICAgIGlmICh2YWwpIHtcbiAgICAgIHRoaXMud29yZHNbb2ZmXSA9IHRoaXMud29yZHNbb2ZmXSB8ICgxIDw8IHdiaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndvcmRzW29mZl0gPSB0aGlzLndvcmRzW29mZl0gJiB+KDEgPDwgd2JpdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICAvLyBBZGQgYG51bWAgdG8gYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pYWRkID0gZnVuY3Rpb24gaWFkZCAobnVtKSB7XG4gICAgdmFyIHI7XG5cbiAgICAvLyBuZWdhdGl2ZSArIHBvc2l0aXZlXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHIgPSB0aGlzLmlzdWIobnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgXj0gMTtcbiAgICAgIHJldHVybiB0aGlzLl9ub3JtU2lnbigpO1xuXG4gICAgLy8gcG9zaXRpdmUgKyBuZWdhdGl2ZVxuICAgIH0gZWxzZSBpZiAodGhpcy5uZWdhdGl2ZSA9PT0gMCAmJiBudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDA7XG4gICAgICByID0gdGhpcy5pc3ViKG51bSk7XG4gICAgICBudW0ubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHIuX25vcm1TaWduKCk7XG4gICAgfVxuXG4gICAgLy8gYS5sZW5ndGggPiBiLmxlbmd0aFxuICAgIHZhciBhLCBiO1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHtcbiAgICAgIGEgPSB0aGlzO1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IG51bTtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSArIChiLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgICAgY2FycnkgPSByID4+PiAyNjtcbiAgICB9XG4gICAgZm9yICg7IGNhcnJ5ICE9PSAwICYmIGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgICBjYXJyeSA9IHIgPj4+IDI2O1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoXSA9IGNhcnJ5O1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICAvLyBDb3B5IHRoZSByZXN0IG9mIHRoZSB3b3Jkc1xuICAgIH0gZWxzZSBpZiAoYSAhPT0gdGhpcykge1xuICAgICAgZm9yICg7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEFkZCBgbnVtYCB0byBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAobnVtKSB7XG4gICAgdmFyIHJlcztcbiAgICBpZiAobnVtLm5lZ2F0aXZlICE9PSAwICYmIHRoaXMubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXMgPSB0aGlzLnN1YihudW0pO1xuICAgICAgbnVtLm5lZ2F0aXZlIF49IDE7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSBpZiAobnVtLm5lZ2F0aXZlID09PSAwICYmIHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgcmVzID0gbnVtLnN1Yih0aGlzKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGQobnVtKTtcblxuICAgIHJldHVybiBudW0uY2xvbmUoKS5pYWRkKHRoaXMpO1xuICB9O1xuXG4gIC8vIFN1YnRyYWN0IGBudW1gIGZyb20gYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pc3ViID0gZnVuY3Rpb24gaXN1YiAobnVtKSB7XG4gICAgLy8gdGhpcyAtICgtbnVtKSA9IHRoaXMgKyBudW1cbiAgICBpZiAobnVtLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICBudW0ubmVnYXRpdmUgPSAwO1xuICAgICAgdmFyIHIgPSB0aGlzLmlhZGQobnVtKTtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gci5fbm9ybVNpZ24oKTtcblxuICAgIC8vIC10aGlzIC0gbnVtID0gLSh0aGlzICsgbnVtKVxuICAgIH0gZWxzZSBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmlhZGQobnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHRoaXMuX25vcm1TaWduKCk7XG4gICAgfVxuXG4gICAgLy8gQXQgdGhpcyBwb2ludCBib3RoIG51bWJlcnMgYXJlIHBvc2l0aXZlXG4gICAgdmFyIGNtcCA9IHRoaXMuY21wKG51bSk7XG5cbiAgICAvLyBPcHRpbWl6YXRpb24gLSB6ZXJvaWZ5XG4gICAgaWYgKGNtcCA9PT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgICB0aGlzLndvcmRzWzBdID0gMDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGEgPiBiXG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGNtcCA+IDApIHtcbiAgICAgIGEgPSB0aGlzO1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IG51bTtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSAtIChiLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gciA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgIH1cbiAgICBmb3IgKDsgY2FycnkgIT09IDAgJiYgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApICsgY2Fycnk7XG4gICAgICBjYXJyeSA9IHIgPj4gMjY7XG4gICAgICB0aGlzLndvcmRzW2ldID0gciAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICAvLyBDb3B5IHJlc3Qgb2YgdGhlIHdvcmRzXG4gICAgaWYgKGNhcnJ5ID09PSAwICYmIGkgPCBhLmxlbmd0aCAmJiBhICE9PSB0aGlzKSB7XG4gICAgICBmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLm1heCh0aGlzLmxlbmd0aCwgaSk7XG5cbiAgICBpZiAoYSAhPT0gdGhpcykge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICAvLyBTdWJ0cmFjdCBgbnVtYCBmcm9tIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24gc3ViIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIobnVtKTtcbiAgfTtcblxuICBmdW5jdGlvbiBzbWFsbE11bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIG91dC5uZWdhdGl2ZSA9IG51bS5uZWdhdGl2ZSBeIHNlbGYubmVnYXRpdmU7XG4gICAgdmFyIGxlbiA9IChzZWxmLmxlbmd0aCArIG51bS5sZW5ndGgpIHwgMDtcbiAgICBvdXQubGVuZ3RoID0gbGVuO1xuICAgIGxlbiA9IChsZW4gLSAxKSB8IDA7XG5cbiAgICAvLyBQZWVsIG9uZSBpdGVyYXRpb24gKGNvbXBpbGVyIGNhbid0IGRvIGl0LCBiZWNhdXNlIG9mIGNvZGUgY29tcGxleGl0eSlcbiAgICB2YXIgYSA9IHNlbGYud29yZHNbMF0gfCAwO1xuICAgIHZhciBiID0gbnVtLndvcmRzWzBdIHwgMDtcbiAgICB2YXIgciA9IGEgKiBiO1xuXG4gICAgdmFyIGxvID0gciAmIDB4M2ZmZmZmZjtcbiAgICB2YXIgY2FycnkgPSAociAvIDB4NDAwMDAwMCkgfCAwO1xuICAgIG91dC53b3Jkc1swXSA9IGxvO1xuXG4gICAgZm9yICh2YXIgayA9IDE7IGsgPCBsZW47IGsrKykge1xuICAgICAgLy8gU3VtIGFsbCB3b3JkcyB3aXRoIHRoZSBzYW1lIGBpICsgaiA9IGtgIGFuZCBhY2N1bXVsYXRlIGBuY2FycnlgLFxuICAgICAgLy8gbm90ZSB0aGF0IG5jYXJyeSBjb3VsZCBiZSA+PSAweDNmZmZmZmZcbiAgICAgIHZhciBuY2FycnkgPSBjYXJyeSA+Pj4gMjY7XG4gICAgICB2YXIgcndvcmQgPSBjYXJyeSAmIDB4M2ZmZmZmZjtcbiAgICAgIHZhciBtYXhKID0gTWF0aC5taW4oaywgbnVtLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaiA9IE1hdGgubWF4KDAsIGsgLSBzZWxmLmxlbmd0aCArIDEpOyBqIDw9IG1heEo7IGorKykge1xuICAgICAgICB2YXIgaSA9IChrIC0gaikgfCAwO1xuICAgICAgICBhID0gc2VsZi53b3Jkc1tpXSB8IDA7XG4gICAgICAgIGIgPSBudW0ud29yZHNbal0gfCAwO1xuICAgICAgICByID0gYSAqIGIgKyByd29yZDtcbiAgICAgICAgbmNhcnJ5ICs9IChyIC8gMHg0MDAwMDAwKSB8IDA7XG4gICAgICAgIHJ3b3JkID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgIH1cbiAgICAgIG91dC53b3Jkc1trXSA9IHJ3b3JkIHwgMDtcbiAgICAgIGNhcnJ5ID0gbmNhcnJ5IHwgMDtcbiAgICB9XG4gICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICBvdXQud29yZHNba10gPSBjYXJyeSB8IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5sZW5ndGgtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0LnN0cmlwKCk7XG4gIH1cblxuICAvLyBUT0RPKGluZHV0bnkpOiBpdCBtYXkgYmUgcmVhc29uYWJsZSB0byBvbWl0IGl0IGZvciB1c2VycyB3aG8gZG9uJ3QgbmVlZFxuICAvLyB0byB3b3JrIHdpdGggMjU2LWJpdCBudW1iZXJzLCBvdGhlcndpc2UgaXQgZ2l2ZXMgMjAlIGltcHJvdmVtZW50IGZvciAyNTYtYml0XG4gIC8vIG11bHRpcGxpY2F0aW9uIChsaWtlIGVsbGlwdGljIHNlY3AyNTZrMSkuXG4gIHZhciBjb21iMTBNdWxUbyA9IGZ1bmN0aW9uIGNvbWIxME11bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIHZhciBhID0gc2VsZi53b3JkcztcbiAgICB2YXIgYiA9IG51bS53b3JkcztcbiAgICB2YXIgbyA9IG91dC53b3JkcztcbiAgICB2YXIgYyA9IDA7XG4gICAgdmFyIGxvO1xuICAgIHZhciBtaWQ7XG4gICAgdmFyIGhpO1xuICAgIHZhciBhMCA9IGFbMF0gfCAwO1xuICAgIHZhciBhbDAgPSBhMCAmIDB4MWZmZjtcbiAgICB2YXIgYWgwID0gYTAgPj4+IDEzO1xuICAgIHZhciBhMSA9IGFbMV0gfCAwO1xuICAgIHZhciBhbDEgPSBhMSAmIDB4MWZmZjtcbiAgICB2YXIgYWgxID0gYTEgPj4+IDEzO1xuICAgIHZhciBhMiA9IGFbMl0gfCAwO1xuICAgIHZhciBhbDIgPSBhMiAmIDB4MWZmZjtcbiAgICB2YXIgYWgyID0gYTIgPj4+IDEzO1xuICAgIHZhciBhMyA9IGFbM10gfCAwO1xuICAgIHZhciBhbDMgPSBhMyAmIDB4MWZmZjtcbiAgICB2YXIgYWgzID0gYTMgPj4+IDEzO1xuICAgIHZhciBhNCA9IGFbNF0gfCAwO1xuICAgIHZhciBhbDQgPSBhNCAmIDB4MWZmZjtcbiAgICB2YXIgYWg0ID0gYTQgPj4+IDEzO1xuICAgIHZhciBhNSA9IGFbNV0gfCAwO1xuICAgIHZhciBhbDUgPSBhNSAmIDB4MWZmZjtcbiAgICB2YXIgYWg1ID0gYTUgPj4+IDEzO1xuICAgIHZhciBhNiA9IGFbNl0gfCAwO1xuICAgIHZhciBhbDYgPSBhNiAmIDB4MWZmZjtcbiAgICB2YXIgYWg2ID0gYTYgPj4+IDEzO1xuICAgIHZhciBhNyA9IGFbN10gfCAwO1xuICAgIHZhciBhbDcgPSBhNyAmIDB4MWZmZjtcbiAgICB2YXIgYWg3ID0gYTcgPj4+IDEzO1xuICAgIHZhciBhOCA9IGFbOF0gfCAwO1xuICAgIHZhciBhbDggPSBhOCAmIDB4MWZmZjtcbiAgICB2YXIgYWg4ID0gYTggPj4+IDEzO1xuICAgIHZhciBhOSA9IGFbOV0gfCAwO1xuICAgIHZhciBhbDkgPSBhOSAmIDB4MWZmZjtcbiAgICB2YXIgYWg5ID0gYTkgPj4+IDEzO1xuICAgIHZhciBiMCA9IGJbMF0gfCAwO1xuICAgIHZhciBibDAgPSBiMCAmIDB4MWZmZjtcbiAgICB2YXIgYmgwID0gYjAgPj4+IDEzO1xuICAgIHZhciBiMSA9IGJbMV0gfCAwO1xuICAgIHZhciBibDEgPSBiMSAmIDB4MWZmZjtcbiAgICB2YXIgYmgxID0gYjEgPj4+IDEzO1xuICAgIHZhciBiMiA9IGJbMl0gfCAwO1xuICAgIHZhciBibDIgPSBiMiAmIDB4MWZmZjtcbiAgICB2YXIgYmgyID0gYjIgPj4+IDEzO1xuICAgIHZhciBiMyA9IGJbM10gfCAwO1xuICAgIHZhciBibDMgPSBiMyAmIDB4MWZmZjtcbiAgICB2YXIgYmgzID0gYjMgPj4+IDEzO1xuICAgIHZhciBiNCA9IGJbNF0gfCAwO1xuICAgIHZhciBibDQgPSBiNCAmIDB4MWZmZjtcbiAgICB2YXIgYmg0ID0gYjQgPj4+IDEzO1xuICAgIHZhciBiNSA9IGJbNV0gfCAwO1xuICAgIHZhciBibDUgPSBiNSAmIDB4MWZmZjtcbiAgICB2YXIgYmg1ID0gYjUgPj4+IDEzO1xuICAgIHZhciBiNiA9IGJbNl0gfCAwO1xuICAgIHZhciBibDYgPSBiNiAmIDB4MWZmZjtcbiAgICB2YXIgYmg2ID0gYjYgPj4+IDEzO1xuICAgIHZhciBiNyA9IGJbN10gfCAwO1xuICAgIHZhciBibDcgPSBiNyAmIDB4MWZmZjtcbiAgICB2YXIgYmg3ID0gYjcgPj4+IDEzO1xuICAgIHZhciBiOCA9IGJbOF0gfCAwO1xuICAgIHZhciBibDggPSBiOCAmIDB4MWZmZjtcbiAgICB2YXIgYmg4ID0gYjggPj4+IDEzO1xuICAgIHZhciBiOSA9IGJbOV0gfCAwO1xuICAgIHZhciBibDkgPSBiOSAmIDB4MWZmZjtcbiAgICB2YXIgYmg5ID0gYjkgPj4+IDEzO1xuXG4gICAgb3V0Lm5lZ2F0aXZlID0gc2VsZi5uZWdhdGl2ZSBeIG51bS5uZWdhdGl2ZTtcbiAgICBvdXQubGVuZ3RoID0gMTk7XG4gICAgLyogayA9IDAgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDAsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMCwgYmgwKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoMCwgYmwwKTtcbiAgICBoaSA9IE1hdGguaW11bChhaDAsIGJoMCk7XG4gICAgdmFyIHcwID0gYyArIGxvICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKTtcbiAgICBjID0gaGkgKyAobWlkID4+PiAxMykgKyAodzAgPj4+IDI2KTtcbiAgICB3MCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDEsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMSwgYmgwKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoMSwgYmwwKTtcbiAgICBoaSA9IE1hdGguaW11bChhaDEsIGJoMCk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsMCwgYmwxKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsMCwgYmgxKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoMCwgYmwxKTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWgwLCBiaDEpO1xuICAgIHZhciB3MSA9IGMgKyBsbyArICgobWlkICYgMHgxZmZmKSA8PCAxMyk7XG4gICAgYyA9IGhpICsgKG1pZCA+Pj4gMTMpICsgKHcxID4+PiAyNik7XG4gICAgdzEgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAyICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWwyLCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDIsIGJoMCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDIsIGJsMCk7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgyLCBiaDApO1xuICAgIGxvICs9IE1hdGguaW11bChhbDEsIGJsMSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDEsIGJoMSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDEsIGJsMSk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoMSwgYmgxKTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWwwLCBibDIpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWwwLCBiaDIpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWgwLCBibDIpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDAsIGJoMik7XG4gICAgdmFyIHcyID0gYyArIGxvICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKTtcbiAgICBjID0gaGkgKyAobWlkID4+PiAxMykgKyAodzIgPj4+IDI2KTtcbiAgICB3MiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDMgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDMsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMywgYmgwKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoMywgYmwwKTtcbiAgICBoaSA9IE1hdGguaW11bChhaDMsIGJoMCk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsMiwgYmwxKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsMiwgYmgxKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoMiwgYmwxKTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWgyLCBiaDEpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDEsIGJsMik7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDEsIGJoMik7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDEsIGJsMik7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoMSwgYmgyKTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWwwLCBibDMpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWwwLCBiaDMpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWgwLCBibDMpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDAsIGJoMyk7XG4gICAgdmFyIHczID0gYyArIGxvICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKTtcbiAgICBjID0gaGkgKyAobWlkID4+PiAxMykgKyAodzMgPj4+IDI2KTtcbiAgICB3MyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDQgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDQsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNCwgYmgwKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoNCwgYmwwKTtcbiAgICBoaSA9IE1hdGguaW11bChhaDQsIGJoMCk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsMywgYmwxKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsMywgYmgxKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoMywgYmwxKTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWgzLCBiaDEpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDIsIGJsMik7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDIsIGJoMik7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDIsIGJsMik7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoMiwgYmgyKTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWwxLCBibDMpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWwxLCBiaDMpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWgxLCBibDMpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDEsIGJoMyk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsMCwgYmw0KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsMCwgYmg0KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoMCwgYmw0KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWgwLCBiaDQpO1xuICAgIHZhciB3NCA9IGMgKyBsbyArICgobWlkICYgMHgxZmZmKSA8PCAxMyk7XG4gICAgYyA9IGhpICsgKG1pZCA+Pj4gMTMpICsgKHc0ID4+PiAyNik7XG4gICAgdzQgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSA1ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw1LCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDUsIGJoMCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDUsIGJsMCk7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg1LCBiaDApO1xuICAgIGxvICs9IE1hdGguaW11bChhbDQsIGJsMSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDQsIGJoMSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDQsIGJsMSk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoNCwgYmgxKTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWwzLCBibDIpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWwzLCBiaDIpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWgzLCBibDIpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDMsIGJoMik7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsMiwgYmwzKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsMiwgYmgzKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoMiwgYmwzKTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWgyLCBiaDMpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDEsIGJsNCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDEsIGJoNCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDEsIGJsNCk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoMSwgYmg0KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWwwLCBibDUpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWwwLCBiaDUpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWgwLCBibDUpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDAsIGJoNSk7XG4gICAgdmFyIHc1ID0gYyArIGxvICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKTtcbiAgICBjID0gaGkgKyAobWlkID4+PiAxMykgKyAodzUgPj4+IDI2KTtcbiAgICB3NSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDYgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDYsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNiwgYmgwKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoNiwgYmwwKTtcbiAgICBoaSA9IE1hdGguaW11bChhaDYsIGJoMCk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsNSwgYmwxKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsNSwgYmgxKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoNSwgYmwxKTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWg1LCBiaDEpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDQsIGJsMik7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDQsIGJoMik7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDQsIGJsMik7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoNCwgYmgyKTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWwzLCBibDMpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWwzLCBiaDMpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWgzLCBibDMpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDMsIGJoMyk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsMiwgYmw0KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsMiwgYmg0KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoMiwgYmw0KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWgyLCBiaDQpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDEsIGJsNSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDEsIGJoNSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDEsIGJsNSk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoMSwgYmg1KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWwwLCBibDYpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWwwLCBiaDYpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWgwLCBibDYpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDAsIGJoNik7XG4gICAgdmFyIHc2ID0gYyArIGxvICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKTtcbiAgICBjID0gaGkgKyAobWlkID4+PiAxMykgKyAodzYgPj4+IDI2KTtcbiAgICB3NiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDcgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDcsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNywgYmgwKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoNywgYmwwKTtcbiAgICBoaSA9IE1hdGguaW11bChhaDcsIGJoMCk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsNiwgYmwxKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsNiwgYmgxKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoNiwgYmwxKTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWg2LCBiaDEpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDUsIGJsMik7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDUsIGJoMik7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDUsIGJsMik7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoNSwgYmgyKTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWw0LCBibDMpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWw0LCBiaDMpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWg0LCBibDMpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDQsIGJoMyk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsMywgYmw0KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsMywgYmg0KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoMywgYmw0KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWgzLCBiaDQpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDIsIGJsNSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDIsIGJoNSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDIsIGJsNSk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoMiwgYmg1KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWwxLCBibDYpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWwxLCBiaDYpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWgxLCBibDYpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDEsIGJoNik7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsMCwgYmw3KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsMCwgYmg3KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoMCwgYmw3KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWgwLCBiaDcpO1xuICAgIHZhciB3NyA9IGMgKyBsbyArICgobWlkICYgMHgxZmZmKSA8PCAxMyk7XG4gICAgYyA9IGhpICsgKG1pZCA+Pj4gMTMpICsgKHc3ID4+PiAyNik7XG4gICAgdzcgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSA4ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw4LCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDgsIGJoMCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDgsIGJsMCk7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg4LCBiaDApO1xuICAgIGxvICs9IE1hdGguaW11bChhbDcsIGJsMSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDcsIGJoMSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDcsIGJsMSk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoNywgYmgxKTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWw2LCBibDIpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWw2LCBiaDIpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWg2LCBibDIpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDYsIGJoMik7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsNSwgYmwzKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsNSwgYmgzKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoNSwgYmwzKTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWg1LCBiaDMpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDQsIGJsNCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDQsIGJoNCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDQsIGJsNCk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoNCwgYmg0KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWwzLCBibDUpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWwzLCBiaDUpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWgzLCBibDUpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDMsIGJoNSk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsMiwgYmw2KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsMiwgYmg2KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoMiwgYmw2KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWgyLCBiaDYpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDEsIGJsNyk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDEsIGJoNyk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDEsIGJsNyk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoMSwgYmg3KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWwwLCBibDgpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWwwLCBiaDgpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWgwLCBibDgpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDAsIGJoOCk7XG4gICAgdmFyIHc4ID0gYyArIGxvICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKTtcbiAgICBjID0gaGkgKyAobWlkID4+PiAxMykgKyAodzggPj4+IDI2KTtcbiAgICB3OCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDkgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgwKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoOSwgYmwwKTtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoMCk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsOCwgYmwxKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsOCwgYmgxKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoOCwgYmwxKTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWg4LCBiaDEpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDcsIGJsMik7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDcsIGJoMik7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDcsIGJsMik7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoNywgYmgyKTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWw2LCBibDMpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWw2LCBiaDMpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWg2LCBibDMpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDYsIGJoMyk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsNSwgYmw0KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsNSwgYmg0KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoNSwgYmw0KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWg1LCBiaDQpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDQsIGJsNSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDQsIGJoNSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDQsIGJsNSk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoNCwgYmg1KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWwzLCBibDYpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWwzLCBiaDYpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWgzLCBibDYpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDMsIGJoNik7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsMiwgYmw3KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsMiwgYmg3KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoMiwgYmw3KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWgyLCBiaDcpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDEsIGJsOCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDEsIGJoOCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDEsIGJsOCk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoMSwgYmg4KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWwwLCBibDkpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWwwLCBiaDkpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWgwLCBibDkpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDAsIGJoOSk7XG4gICAgdmFyIHc5ID0gYyArIGxvICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKTtcbiAgICBjID0gaGkgKyAobWlkID4+PiAxMykgKyAodzkgPj4+IDI2KTtcbiAgICB3OSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEwICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDEpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoMSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDksIGJsMSk7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDEpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDgsIGJsMik7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDgsIGJoMik7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDgsIGJsMik7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoOCwgYmgyKTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWw3LCBibDMpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWw3LCBiaDMpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWg3LCBibDMpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDcsIGJoMyk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsNiwgYmw0KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsNiwgYmg0KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoNiwgYmw0KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWg2LCBiaDQpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDUsIGJsNSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDUsIGJoNSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDUsIGJsNSk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoNSwgYmg1KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWw0LCBibDYpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWw0LCBiaDYpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWg0LCBibDYpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDQsIGJoNik7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsMywgYmw3KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsMywgYmg3KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoMywgYmw3KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWgzLCBiaDcpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDIsIGJsOCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDIsIGJoOCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDIsIGJsOCk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoMiwgYmg4KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWwxLCBibDkpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWwxLCBiaDkpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWgxLCBibDkpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDEsIGJoOSk7XG4gICAgdmFyIHcxMCA9IGMgKyBsbyArICgobWlkICYgMHgxZmZmKSA8PCAxMyk7XG4gICAgYyA9IGhpICsgKG1pZCA+Pj4gMTMpICsgKHcxMCA+Pj4gMjYpO1xuICAgIHcxMCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDExICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDIpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoMik7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDksIGJsMik7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDIpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDgsIGJsMyk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDgsIGJoMyk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDgsIGJsMyk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoOCwgYmgzKTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWw3LCBibDQpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWw3LCBiaDQpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWg3LCBibDQpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDcsIGJoNCk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsNiwgYmw1KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsNiwgYmg1KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoNiwgYmw1KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWg2LCBiaDUpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDUsIGJsNik7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDUsIGJoNik7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDUsIGJsNik7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoNSwgYmg2KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWw0LCBibDcpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWw0LCBiaDcpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWg0LCBibDcpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDQsIGJoNyk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsMywgYmw4KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsMywgYmg4KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoMywgYmw4KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWgzLCBiaDgpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDIsIGJsOSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDIsIGJoOSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDIsIGJsOSk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoMiwgYmg5KTtcbiAgICB2YXIgdzExID0gYyArIGxvICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKTtcbiAgICBjID0gaGkgKyAobWlkID4+PiAxMykgKyAodzExID4+PiAyNik7XG4gICAgdzExICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTIgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMyk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgzKTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoOSwgYmwzKTtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoMyk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsOCwgYmw0KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsOCwgYmg0KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoOCwgYmw0KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWg4LCBiaDQpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDcsIGJsNSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDcsIGJoNSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDcsIGJsNSk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoNywgYmg1KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWw2LCBibDYpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWw2LCBiaDYpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWg2LCBibDYpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDYsIGJoNik7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsNSwgYmw3KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsNSwgYmg3KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoNSwgYmw3KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWg1LCBiaDcpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDQsIGJsOCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDQsIGJoOCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDQsIGJsOCk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoNCwgYmg4KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWwzLCBibDkpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWwzLCBiaDkpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWgzLCBibDkpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDMsIGJoOSk7XG4gICAgdmFyIHcxMiA9IGMgKyBsbyArICgobWlkICYgMHgxZmZmKSA8PCAxMyk7XG4gICAgYyA9IGhpICsgKG1pZCA+Pj4gMTMpICsgKHcxMiA+Pj4gMjYpO1xuICAgIHcxMiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEzICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDQpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDksIGJsNCk7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDQpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDgsIGJsNSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDgsIGJoNSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDgsIGJsNSk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoOCwgYmg1KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWw3LCBibDYpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWw3LCBiaDYpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWg3LCBibDYpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDcsIGJoNik7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsNiwgYmw3KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsNiwgYmg3KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoNiwgYmw3KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWg2LCBiaDcpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDUsIGJsOCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDUsIGJoOCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDUsIGJsOCk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoNSwgYmg4KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWw0LCBibDkpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWw0LCBiaDkpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWg0LCBibDkpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDQsIGJoOSk7XG4gICAgdmFyIHcxMyA9IGMgKyBsbyArICgobWlkICYgMHgxZmZmKSA8PCAxMyk7XG4gICAgYyA9IGhpICsgKG1pZCA+Pj4gMTMpICsgKHcxMyA+Pj4gMjYpO1xuICAgIHcxMyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE0ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDUpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDksIGJsNSk7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDUpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDgsIGJsNik7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDgsIGJoNik7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDgsIGJsNik7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoOCwgYmg2KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWw3LCBibDcpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWw3LCBiaDcpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWg3LCBibDcpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDcsIGJoNyk7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsNiwgYmw4KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsNiwgYmg4KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoNiwgYmw4KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWg2LCBiaDgpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDUsIGJsOSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDUsIGJoOSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDUsIGJsOSk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoNSwgYmg5KTtcbiAgICB2YXIgdzE0ID0gYyArIGxvICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKTtcbiAgICBjID0gaGkgKyAobWlkID4+PiAxMykgKyAodzE0ID4+PiAyNik7XG4gICAgdzE0ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTUgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNik7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg2KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoOSwgYmw2KTtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoNik7XG4gICAgbG8gKz0gTWF0aC5pbXVsKGFsOCwgYmw3KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFsOCwgYmg3KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoOCwgYmw3KTtcbiAgICBoaSArPSBNYXRoLmltdWwoYWg4LCBiaDcpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDcsIGJsOCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDcsIGJoOCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDcsIGJsOCk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoNywgYmg4KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWw2LCBibDkpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWw2LCBiaDkpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWg2LCBibDkpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDYsIGJoOSk7XG4gICAgdmFyIHcxNSA9IGMgKyBsbyArICgobWlkICYgMHgxZmZmKSA8PCAxMyk7XG4gICAgYyA9IGhpICsgKG1pZCA+Pj4gMTMpICsgKHcxNSA+Pj4gMjYpO1xuICAgIHcxNSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE2ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDcpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNyk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDksIGJsNyk7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDcpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDgsIGJsOCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDgsIGJoOCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDgsIGJsOCk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoOCwgYmg4KTtcbiAgICBsbyArPSBNYXRoLmltdWwoYWw3LCBibDkpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWw3LCBiaDkpO1xuICAgIG1pZCArPSBNYXRoLmltdWwoYWg3LCBibDkpO1xuICAgIGhpICs9IE1hdGguaW11bChhaDcsIGJoOSk7XG4gICAgdmFyIHcxNiA9IGMgKyBsbyArICgobWlkICYgMHgxZmZmKSA8PCAxMyk7XG4gICAgYyA9IGhpICsgKG1pZCA+Pj4gMTMpICsgKHcxNiA+Pj4gMjYpO1xuICAgIHcxNiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE3ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDgpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoOCk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDksIGJsOCk7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDgpO1xuICAgIGxvICs9IE1hdGguaW11bChhbDgsIGJsOSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhbDgsIGJoOSk7XG4gICAgbWlkICs9IE1hdGguaW11bChhaDgsIGJsOSk7XG4gICAgaGkgKz0gTWF0aC5pbXVsKGFoOCwgYmg5KTtcbiAgICB2YXIgdzE3ID0gYyArIGxvICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKTtcbiAgICBjID0gaGkgKyAobWlkID4+PiAxMykgKyAodzE3ID4+PiAyNik7XG4gICAgdzE3ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTggKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsOSk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg5KTtcbiAgICBtaWQgKz0gTWF0aC5pbXVsKGFoOSwgYmw5KTtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoOSk7XG4gICAgdmFyIHcxOCA9IGMgKyBsbyArICgobWlkICYgMHgxZmZmKSA8PCAxMyk7XG4gICAgYyA9IGhpICsgKG1pZCA+Pj4gMTMpICsgKHcxOCA+Pj4gMjYpO1xuICAgIHcxOCAmPSAweDNmZmZmZmY7XG4gICAgb1swXSA9IHcwO1xuICAgIG9bMV0gPSB3MTtcbiAgICBvWzJdID0gdzI7XG4gICAgb1szXSA9IHczO1xuICAgIG9bNF0gPSB3NDtcbiAgICBvWzVdID0gdzU7XG4gICAgb1s2XSA9IHc2O1xuICAgIG9bN10gPSB3NztcbiAgICBvWzhdID0gdzg7XG4gICAgb1s5XSA9IHc5O1xuICAgIG9bMTBdID0gdzEwO1xuICAgIG9bMTFdID0gdzExO1xuICAgIG9bMTJdID0gdzEyO1xuICAgIG9bMTNdID0gdzEzO1xuICAgIG9bMTRdID0gdzE0O1xuICAgIG9bMTVdID0gdzE1O1xuICAgIG9bMTZdID0gdzE2O1xuICAgIG9bMTddID0gdzE3O1xuICAgIG9bMThdID0gdzE4O1xuICAgIGlmIChjICE9PSAwKSB7XG4gICAgICBvWzE5XSA9IGM7XG4gICAgICBvdXQubGVuZ3RoKys7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH07XG5cbiAgLy8gUG9seWZpbGwgY29tYlxuICBpZiAoIU1hdGguaW11bCkge1xuICAgIGNvbWIxME11bFRvID0gc21hbGxNdWxUbztcbiAgfVxuXG4gIGZ1bmN0aW9uIGJpZ011bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIG91dC5uZWdhdGl2ZSA9IG51bS5uZWdhdGl2ZSBeIHNlbGYubmVnYXRpdmU7XG4gICAgb3V0Lmxlbmd0aCA9IHNlbGYubGVuZ3RoICsgbnVtLmxlbmd0aDtcblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgdmFyIGhuY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgb3V0Lmxlbmd0aCAtIDE7IGsrKykge1xuICAgICAgLy8gU3VtIGFsbCB3b3JkcyB3aXRoIHRoZSBzYW1lIGBpICsgaiA9IGtgIGFuZCBhY2N1bXVsYXRlIGBuY2FycnlgLFxuICAgICAgLy8gbm90ZSB0aGF0IG5jYXJyeSBjb3VsZCBiZSA+PSAweDNmZmZmZmZcbiAgICAgIHZhciBuY2FycnkgPSBobmNhcnJ5O1xuICAgICAgaG5jYXJyeSA9IDA7XG4gICAgICB2YXIgcndvcmQgPSBjYXJyeSAmIDB4M2ZmZmZmZjtcbiAgICAgIHZhciBtYXhKID0gTWF0aC5taW4oaywgbnVtLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaiA9IE1hdGgubWF4KDAsIGsgLSBzZWxmLmxlbmd0aCArIDEpOyBqIDw9IG1heEo7IGorKykge1xuICAgICAgICB2YXIgaSA9IGsgLSBqO1xuICAgICAgICB2YXIgYSA9IHNlbGYud29yZHNbaV0gfCAwO1xuICAgICAgICB2YXIgYiA9IG51bS53b3Jkc1tqXSB8IDA7XG4gICAgICAgIHZhciByID0gYSAqIGI7XG5cbiAgICAgICAgdmFyIGxvID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgICAgbmNhcnJ5ID0gKG5jYXJyeSArICgociAvIDB4NDAwMDAwMCkgfCAwKSkgfCAwO1xuICAgICAgICBsbyA9IChsbyArIHJ3b3JkKSB8IDA7XG4gICAgICAgIHJ3b3JkID0gbG8gJiAweDNmZmZmZmY7XG4gICAgICAgIG5jYXJyeSA9IChuY2FycnkgKyAobG8gPj4+IDI2KSkgfCAwO1xuXG4gICAgICAgIGhuY2FycnkgKz0gbmNhcnJ5ID4+PiAyNjtcbiAgICAgICAgbmNhcnJ5ICY9IDB4M2ZmZmZmZjtcbiAgICAgIH1cbiAgICAgIG91dC53b3Jkc1trXSA9IHJ3b3JkO1xuICAgICAgY2FycnkgPSBuY2Fycnk7XG4gICAgICBuY2FycnkgPSBobmNhcnJ5O1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIG91dC53b3Jkc1trXSA9IGNhcnJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQubGVuZ3RoLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dC5zdHJpcCgpO1xuICB9XG5cbiAgZnVuY3Rpb24ganVtYm9NdWxUbyAoc2VsZiwgbnVtLCBvdXQpIHtcbiAgICB2YXIgZmZ0bSA9IG5ldyBGRlRNKCk7XG4gICAgcmV0dXJuIGZmdG0ubXVscChzZWxmLCBudW0sIG91dCk7XG4gIH1cblxuICBCTi5wcm90b3R5cGUubXVsVG8gPSBmdW5jdGlvbiBtdWxUbyAobnVtLCBvdXQpIHtcbiAgICB2YXIgcmVzO1xuICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aCArIG51bS5sZW5ndGg7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxMCAmJiBudW0ubGVuZ3RoID09PSAxMCkge1xuICAgICAgcmVzID0gY29tYjEwTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH0gZWxzZSBpZiAobGVuIDwgNjMpIHtcbiAgICAgIHJlcyA9IHNtYWxsTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH0gZWxzZSBpZiAobGVuIDwgMTAyNCkge1xuICAgICAgcmVzID0gYmlnTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBqdW1ib011bFRvKHRoaXMsIG51bSwgb3V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIENvb2xleS1UdWtleSBhbGdvcml0aG0gZm9yIEZGVFxuICAvLyBzbGlnaHRseSByZXZpc2l0ZWQgdG8gcmVseSBvbiBsb29waW5nIGluc3RlYWQgb2YgcmVjdXJzaW9uXG5cbiAgZnVuY3Rpb24gRkZUTSAoeCwgeSkge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgfVxuXG4gIEZGVE0ucHJvdG90eXBlLm1ha2VSQlQgPSBmdW5jdGlvbiBtYWtlUkJUIChOKSB7XG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoTik7XG4gICAgdmFyIGwgPSBCTi5wcm90b3R5cGUuX2NvdW50Qml0cyhOKSAtIDE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIHRbaV0gPSB0aGlzLnJldkJpbihpLCBsLCBOKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdDtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGJpbmFyeS1yZXZlcnNlZCByZXByZXNlbnRhdGlvbiBvZiBgeGBcbiAgRkZUTS5wcm90b3R5cGUucmV2QmluID0gZnVuY3Rpb24gcmV2QmluICh4LCBsLCBOKSB7XG4gICAgaWYgKHggPT09IDAgfHwgeCA9PT0gTiAtIDEpIHJldHVybiB4O1xuXG4gICAgdmFyIHJiID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgcmIgfD0gKHggJiAxKSA8PCAobCAtIGkgLSAxKTtcbiAgICAgIHggPj49IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJiO1xuICB9O1xuXG4gIC8vIFBlcmZvcm1zIFwidHdlZWRsaW5nXCIgcGhhc2UsIHRoZXJlZm9yZSAnZW11bGF0aW5nJ1xuICAvLyBiZWhhdmlvdXIgb2YgdGhlIHJlY3Vyc2l2ZSBhbGdvcml0aG1cbiAgRkZUTS5wcm90b3R5cGUucGVybXV0ZSA9IGZ1bmN0aW9uIHBlcm11dGUgKHJidCwgcndzLCBpd3MsIHJ0d3MsIGl0d3MsIE4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgcnR3c1tpXSA9IHJ3c1tyYnRbaV1dO1xuICAgICAgaXR3c1tpXSA9IGl3c1tyYnRbaV1dO1xuICAgIH1cbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiB0cmFuc2Zvcm0gKHJ3cywgaXdzLCBydHdzLCBpdHdzLCBOLCByYnQpIHtcbiAgICB0aGlzLnBlcm11dGUocmJ0LCByd3MsIGl3cywgcnR3cywgaXR3cywgTik7XG5cbiAgICBmb3IgKHZhciBzID0gMTsgcyA8IE47IHMgPDw9IDEpIHtcbiAgICAgIHZhciBsID0gcyA8PCAxO1xuXG4gICAgICB2YXIgcnR3ZGYgPSBNYXRoLmNvcygyICogTWF0aC5QSSAvIGwpO1xuICAgICAgdmFyIGl0d2RmID0gTWF0aC5zaW4oMiAqIE1hdGguUEkgLyBsKTtcblxuICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCBOOyBwICs9IGwpIHtcbiAgICAgICAgdmFyIHJ0d2RmXyA9IHJ0d2RmO1xuICAgICAgICB2YXIgaXR3ZGZfID0gaXR3ZGY7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzOyBqKyspIHtcbiAgICAgICAgICB2YXIgcmUgPSBydHdzW3AgKyBqXTtcbiAgICAgICAgICB2YXIgaWUgPSBpdHdzW3AgKyBqXTtcblxuICAgICAgICAgIHZhciBybyA9IHJ0d3NbcCArIGogKyBzXTtcbiAgICAgICAgICB2YXIgaW8gPSBpdHdzW3AgKyBqICsgc107XG5cbiAgICAgICAgICB2YXIgcnggPSBydHdkZl8gKiBybyAtIGl0d2RmXyAqIGlvO1xuXG4gICAgICAgICAgaW8gPSBydHdkZl8gKiBpbyArIGl0d2RmXyAqIHJvO1xuICAgICAgICAgIHJvID0gcng7XG5cbiAgICAgICAgICBydHdzW3AgKyBqXSA9IHJlICsgcm87XG4gICAgICAgICAgaXR3c1twICsgal0gPSBpZSArIGlvO1xuXG4gICAgICAgICAgcnR3c1twICsgaiArIHNdID0gcmUgLSBybztcbiAgICAgICAgICBpdHdzW3AgKyBqICsgc10gPSBpZSAtIGlvO1xuXG4gICAgICAgICAgLyoganNoaW50IG1heGRlcHRoIDogZmFsc2UgKi9cbiAgICAgICAgICBpZiAoaiAhPT0gbCkge1xuICAgICAgICAgICAgcnggPSBydHdkZiAqIHJ0d2RmXyAtIGl0d2RmICogaXR3ZGZfO1xuXG4gICAgICAgICAgICBpdHdkZl8gPSBydHdkZiAqIGl0d2RmXyArIGl0d2RmICogcnR3ZGZfO1xuICAgICAgICAgICAgcnR3ZGZfID0gcng7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLmd1ZXNzTGVuMTNiID0gZnVuY3Rpb24gZ3Vlc3NMZW4xM2IgKG4sIG0pIHtcbiAgICB2YXIgTiA9IE1hdGgubWF4KG0sIG4pIHwgMTtcbiAgICB2YXIgb2RkID0gTiAmIDE7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoTiA9IE4gLyAyIHwgMDsgTjsgTiA9IE4gPj4+IDEpIHtcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gMSA8PCBpICsgMSArIG9kZDtcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5jb25qdWdhdGUgPSBmdW5jdGlvbiBjb25qdWdhdGUgKHJ3cywgaXdzLCBOKSB7XG4gICAgaWYgKE4gPD0gMSkgcmV0dXJuO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOIC8gMjsgaSsrKSB7XG4gICAgICB2YXIgdCA9IHJ3c1tpXTtcblxuICAgICAgcndzW2ldID0gcndzW04gLSBpIC0gMV07XG4gICAgICByd3NbTiAtIGkgLSAxXSA9IHQ7XG5cbiAgICAgIHQgPSBpd3NbaV07XG5cbiAgICAgIGl3c1tpXSA9IC1pd3NbTiAtIGkgLSAxXTtcbiAgICAgIGl3c1tOIC0gaSAtIDFdID0gLXQ7XG4gICAgfVxuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLm5vcm1hbGl6ZTEzYiA9IGZ1bmN0aW9uIG5vcm1hbGl6ZTEzYiAod3MsIE4pIHtcbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTiAvIDI7IGkrKykge1xuICAgICAgdmFyIHcgPSBNYXRoLnJvdW5kKHdzWzIgKiBpICsgMV0gLyBOKSAqIDB4MjAwMCArXG4gICAgICAgIE1hdGgucm91bmQod3NbMiAqIGldIC8gTikgK1xuICAgICAgICBjYXJyeTtcblxuICAgICAgd3NbaV0gPSB3ICYgMHgzZmZmZmZmO1xuXG4gICAgICBpZiAodyA8IDB4NDAwMDAwMCkge1xuICAgICAgICBjYXJyeSA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXJyeSA9IHcgLyAweDQwMDAwMDAgfCAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB3cztcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5jb252ZXJ0MTNiID0gZnVuY3Rpb24gY29udmVydDEzYiAod3MsIGxlbiwgcndzLCBOKSB7XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjYXJyeSA9IGNhcnJ5ICsgKHdzW2ldIHwgMCk7XG5cbiAgICAgIHJ3c1syICogaV0gPSBjYXJyeSAmIDB4MWZmZjsgY2FycnkgPSBjYXJyeSA+Pj4gMTM7XG4gICAgICByd3NbMiAqIGkgKyAxXSA9IGNhcnJ5ICYgMHgxZmZmOyBjYXJyeSA9IGNhcnJ5ID4+PiAxMztcbiAgICB9XG5cbiAgICAvLyBQYWQgd2l0aCB6ZXJvZXNcbiAgICBmb3IgKGkgPSAyICogbGVuOyBpIDwgTjsgKytpKSB7XG4gICAgICByd3NbaV0gPSAwO1xuICAgIH1cblxuICAgIGFzc2VydChjYXJyeSA9PT0gMCk7XG4gICAgYXNzZXJ0KChjYXJyeSAmIH4weDFmZmYpID09PSAwKTtcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5zdHViID0gZnVuY3Rpb24gc3R1YiAoTikge1xuICAgIHZhciBwaCA9IG5ldyBBcnJheShOKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgcGhbaV0gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBwaDtcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5tdWxwID0gZnVuY3Rpb24gbXVscCAoeCwgeSwgb3V0KSB7XG4gICAgdmFyIE4gPSAyICogdGhpcy5ndWVzc0xlbjEzYih4Lmxlbmd0aCwgeS5sZW5ndGgpO1xuXG4gICAgdmFyIHJidCA9IHRoaXMubWFrZVJCVChOKTtcblxuICAgIHZhciBfID0gdGhpcy5zdHViKE4pO1xuXG4gICAgdmFyIHJ3cyA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgcndzdCA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgaXdzdCA9IG5ldyBBcnJheShOKTtcblxuICAgIHZhciBucndzID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBucndzdCA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgbml3c3QgPSBuZXcgQXJyYXkoTik7XG5cbiAgICB2YXIgcm13cyA9IG91dC53b3JkcztcbiAgICBybXdzLmxlbmd0aCA9IE47XG5cbiAgICB0aGlzLmNvbnZlcnQxM2IoeC53b3JkcywgeC5sZW5ndGgsIHJ3cywgTik7XG4gICAgdGhpcy5jb252ZXJ0MTNiKHkud29yZHMsIHkubGVuZ3RoLCBucndzLCBOKTtcblxuICAgIHRoaXMudHJhbnNmb3JtKHJ3cywgXywgcndzdCwgaXdzdCwgTiwgcmJ0KTtcbiAgICB0aGlzLnRyYW5zZm9ybShucndzLCBfLCBucndzdCwgbml3c3QsIE4sIHJidCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgdmFyIHJ4ID0gcndzdFtpXSAqIG5yd3N0W2ldIC0gaXdzdFtpXSAqIG5pd3N0W2ldO1xuICAgICAgaXdzdFtpXSA9IHJ3c3RbaV0gKiBuaXdzdFtpXSArIGl3c3RbaV0gKiBucndzdFtpXTtcbiAgICAgIHJ3c3RbaV0gPSByeDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmp1Z2F0ZShyd3N0LCBpd3N0LCBOKTtcbiAgICB0aGlzLnRyYW5zZm9ybShyd3N0LCBpd3N0LCBybXdzLCBfLCBOLCByYnQpO1xuICAgIHRoaXMuY29uanVnYXRlKHJtd3MsIF8sIE4pO1xuICAgIHRoaXMubm9ybWFsaXplMTNiKHJtd3MsIE4pO1xuXG4gICAgb3V0Lm5lZ2F0aXZlID0geC5uZWdhdGl2ZSBeIHkubmVnYXRpdmU7XG4gICAgb3V0Lmxlbmd0aCA9IHgubGVuZ3RoICsgeS5sZW5ndGg7XG4gICAgcmV0dXJuIG91dC5zdHJpcCgpO1xuICB9O1xuXG4gIC8vIE11bHRpcGx5IGB0aGlzYCBieSBgbnVtYFxuICBCTi5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsIChudW0pIHtcbiAgICB2YXIgb3V0ID0gbmV3IEJOKG51bGwpO1xuICAgIG91dC53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCArIG51bS5sZW5ndGgpO1xuICAgIHJldHVybiB0aGlzLm11bFRvKG51bSwgb3V0KTtcbiAgfTtcblxuICAvLyBNdWx0aXBseSBlbXBsb3lpbmcgRkZUXG4gIEJOLnByb3RvdHlwZS5tdWxmID0gZnVuY3Rpb24gbXVsZiAobnVtKSB7XG4gICAgdmFyIG91dCA9IG5ldyBCTihudWxsKTtcbiAgICBvdXQud29yZHMgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGggKyBudW0ubGVuZ3RoKTtcbiAgICByZXR1cm4ganVtYm9NdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gIH07XG5cbiAgLy8gSW4tcGxhY2UgTXVsdGlwbGljYXRpb25cbiAgQk4ucHJvdG90eXBlLmltdWwgPSBmdW5jdGlvbiBpbXVsIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKG51bSwgdGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmltdWxuID0gZnVuY3Rpb24gaW11bG4gKG51bSkge1xuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG5cbiAgICAvLyBDYXJyeVxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdyA9ICh0aGlzLndvcmRzW2ldIHwgMCkgKiBudW07XG4gICAgICB2YXIgbG8gPSAodyAmIDB4M2ZmZmZmZikgKyAoY2FycnkgJiAweDNmZmZmZmYpO1xuICAgICAgY2FycnkgPj49IDI2O1xuICAgICAgY2FycnkgKz0gKHcgLyAweDQwMDAwMDApIHwgMDtcbiAgICAgIC8vIE5PVEU6IGxvIGlzIDI3Yml0IG1heGltdW1cbiAgICAgIGNhcnJ5ICs9IGxvID4+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBsbyAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBjYXJyeTtcbiAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLm11bG4gPSBmdW5jdGlvbiBtdWxuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKG51bSk7XG4gIH07XG5cbiAgLy8gYHRoaXNgICogYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5zcXIgPSBmdW5jdGlvbiBzcXIgKCkge1xuICAgIHJldHVybiB0aGlzLm11bCh0aGlzKTtcbiAgfTtcblxuICAvLyBgdGhpc2AgKiBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLmlzcXIgPSBmdW5jdGlvbiBpc3FyICgpIHtcbiAgICByZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSk7XG4gIH07XG5cbiAgLy8gTWF0aC5wb3coYHRoaXNgLCBgbnVtYClcbiAgQk4ucHJvdG90eXBlLnBvdyA9IGZ1bmN0aW9uIHBvdyAobnVtKSB7XG4gICAgdmFyIHcgPSB0b0JpdEFycmF5KG51bSk7XG4gICAgaWYgKHcubGVuZ3RoID09PSAwKSByZXR1cm4gbmV3IEJOKDEpO1xuXG4gICAgLy8gU2tpcCBsZWFkaW5nIHplcm9lc1xuICAgIHZhciByZXMgPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdy5sZW5ndGg7IGkrKywgcmVzID0gcmVzLnNxcigpKSB7XG4gICAgICBpZiAod1tpXSAhPT0gMCkgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKCsraSA8IHcubGVuZ3RoKSB7XG4gICAgICBmb3IgKHZhciBxID0gcmVzLnNxcigpOyBpIDwgdy5sZW5ndGg7IGkrKywgcSA9IHEuc3FyKCkpIHtcbiAgICAgICAgaWYgKHdbaV0gPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgIHJlcyA9IHJlcy5tdWwocSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvLyBTaGlmdC1sZWZ0IGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pdXNobG4gPSBmdW5jdGlvbiBpdXNobG4gKGJpdHMpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdHMgPT09ICdudW1iZXInICYmIGJpdHMgPj0gMCk7XG4gICAgdmFyIHIgPSBiaXRzICUgMjY7XG4gICAgdmFyIHMgPSAoYml0cyAtIHIpIC8gMjY7XG4gICAgdmFyIGNhcnJ5TWFzayA9ICgweDNmZmZmZmYgPj4+ICgyNiAtIHIpKSA8PCAoMjYgLSByKTtcbiAgICB2YXIgaTtcblxuICAgIGlmIChyICE9PSAwKSB7XG4gICAgICB2YXIgY2FycnkgPSAwO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbmV3Q2FycnkgPSB0aGlzLndvcmRzW2ldICYgY2FycnlNYXNrO1xuICAgICAgICB2YXIgYyA9ICgodGhpcy53b3Jkc1tpXSB8IDApIC0gbmV3Q2FycnkpIDw8IHI7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBjIHwgY2Fycnk7XG4gICAgICAgIGNhcnJ5ID0gbmV3Q2FycnkgPj4+ICgyNiAtIHIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2FycnkpIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGNhcnJ5O1xuICAgICAgICB0aGlzLmxlbmd0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzICE9PSAwKSB7XG4gICAgICBmb3IgKGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHRoaXMud29yZHNbaSArIHNdID0gdGhpcy53b3Jkc1tpXTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gMDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sZW5ndGggKz0gcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc2hsbiA9IGZ1bmN0aW9uIGlzaGxuIChiaXRzKSB7XG4gICAgLy8gVE9ETyhpbmR1dG55KTogaW1wbGVtZW50IG1lXG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1c2hsbihiaXRzKTtcbiAgfTtcblxuICAvLyBTaGlmdC1yaWdodCBpbi1wbGFjZVxuICAvLyBOT1RFOiBgaGludGAgaXMgYSBsb3dlc3QgYml0IGJlZm9yZSB0cmFpbGluZyB6ZXJvZXNcbiAgLy8gTk9URTogaWYgYGV4dGVuZGVkYCBpcyBwcmVzZW50IC0gaXQgd2lsbCBiZSBmaWxsZWQgd2l0aCBkZXN0cm95ZWQgYml0c1xuICBCTi5wcm90b3R5cGUuaXVzaHJuID0gZnVuY3Rpb24gaXVzaHJuIChiaXRzLCBoaW50LCBleHRlbmRlZCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0cyA9PT0gJ251bWJlcicgJiYgYml0cyA+PSAwKTtcbiAgICB2YXIgaDtcbiAgICBpZiAoaGludCkge1xuICAgICAgaCA9IChoaW50IC0gKGhpbnQgJSAyNikpIC8gMjY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGggPSAwO1xuICAgIH1cblxuICAgIHZhciByID0gYml0cyAlIDI2O1xuICAgIHZhciBzID0gTWF0aC5taW4oKGJpdHMgLSByKSAvIDI2LCB0aGlzLmxlbmd0aCk7XG4gICAgdmFyIG1hc2sgPSAweDNmZmZmZmYgXiAoKDB4M2ZmZmZmZiA+Pj4gcikgPDwgcik7XG4gICAgdmFyIG1hc2tlZFdvcmRzID0gZXh0ZW5kZWQ7XG5cbiAgICBoIC09IHM7XG4gICAgaCA9IE1hdGgubWF4KDAsIGgpO1xuXG4gICAgLy8gRXh0ZW5kZWQgbW9kZSwgY29weSBtYXNrZWQgcGFydFxuICAgIGlmIChtYXNrZWRXb3Jkcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICAgICAgbWFza2VkV29yZHMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldO1xuICAgICAgfVxuICAgICAgbWFza2VkV29yZHMubGVuZ3RoID0gcztcbiAgICB9XG5cbiAgICBpZiAocyA9PT0gMCkge1xuICAgICAgLy8gTm8tb3AsIHdlIHNob3VsZCBub3QgbW92ZSBhbnl0aGluZyBhdCBhbGxcbiAgICB9IGVsc2UgaWYgKHRoaXMubGVuZ3RoID4gcykge1xuICAgICAgdGhpcy5sZW5ndGggLT0gcztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2kgKyBzXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53b3Jkc1swXSA9IDA7XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgfVxuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMCAmJiAoY2FycnkgIT09IDAgfHwgaSA+PSBoKTsgaS0tKSB7XG4gICAgICB2YXIgd29yZCA9IHRoaXMud29yZHNbaV0gfCAwO1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IChjYXJyeSA8PCAoMjYgLSByKSkgfCAod29yZCA+Pj4gcik7XG4gICAgICBjYXJyeSA9IHdvcmQgJiBtYXNrO1xuICAgIH1cblxuICAgIC8vIFB1c2ggY2FycmllZCBiaXRzIGFzIGEgbWFza1xuICAgIGlmIChtYXNrZWRXb3JkcyAmJiBjYXJyeSAhPT0gMCkge1xuICAgICAgbWFza2VkV29yZHMud29yZHNbbWFza2VkV29yZHMubGVuZ3RoKytdID0gY2Fycnk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLndvcmRzWzBdID0gMDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc2hybiA9IGZ1bmN0aW9uIGlzaHJuIChiaXRzLCBoaW50LCBleHRlbmRlZCkge1xuICAgIC8vIFRPRE8oaW5kdXRueSk6IGltcGxlbWVudCBtZVxuICAgIGFzc2VydCh0aGlzLm5lZ2F0aXZlID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdXNocm4oYml0cywgaGludCwgZXh0ZW5kZWQpO1xuICB9O1xuXG4gIC8vIFNoaWZ0LWxlZnRcbiAgQk4ucHJvdG90eXBlLnNobG4gPSBmdW5jdGlvbiBzaGxuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiaXRzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudXNobG4gPSBmdW5jdGlvbiB1c2hsbiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGJpdHMpO1xuICB9O1xuXG4gIC8vIFNoaWZ0LXJpZ2h0XG4gIEJOLnByb3RvdHlwZS5zaHJuID0gZnVuY3Rpb24gc2hybiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYml0cyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVzaHJuID0gZnVuY3Rpb24gdXNocm4gKGJpdHMpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiaXRzKTtcbiAgfTtcblxuICAvLyBUZXN0IGlmIG4gYml0IGlzIHNldFxuICBCTi5wcm90b3R5cGUudGVzdG4gPSBmdW5jdGlvbiB0ZXN0biAoYml0KSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXQgPT09ICdudW1iZXInICYmIGJpdCA+PSAwKTtcbiAgICB2YXIgciA9IGJpdCAlIDI2O1xuICAgIHZhciBzID0gKGJpdCAtIHIpIC8gMjY7XG4gICAgdmFyIHEgPSAxIDw8IHI7XG5cbiAgICAvLyBGYXN0IGNhc2U6IGJpdCBpcyBtdWNoIGhpZ2hlciB0aGFuIGFsbCBleGlzdGluZyB3b3Jkc1xuICAgIGlmICh0aGlzLmxlbmd0aCA8PSBzKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayBiaXQgYW5kIHJldHVyblxuICAgIHZhciB3ID0gdGhpcy53b3Jkc1tzXTtcblxuICAgIHJldHVybiAhISh3ICYgcSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG9ubHkgbG93ZXJzIGJpdHMgb2YgbnVtYmVyIChpbi1wbGFjZSlcbiAgQk4ucHJvdG90eXBlLmltYXNrbiA9IGZ1bmN0aW9uIGltYXNrbiAoYml0cykge1xuICAgIGFzc2VydCh0eXBlb2YgYml0cyA9PT0gJ251bWJlcicgJiYgYml0cyA+PSAwKTtcbiAgICB2YXIgciA9IGJpdHMgJSAyNjtcbiAgICB2YXIgcyA9IChiaXRzIC0gcikgLyAyNjtcblxuICAgIGFzc2VydCh0aGlzLm5lZ2F0aXZlID09PSAwLCAnaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzJyk7XG5cbiAgICBpZiAociAhPT0gMCkge1xuICAgICAgcysrO1xuICAgIH1cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWluKHMsIHRoaXMubGVuZ3RoKTtcblxuICAgIGlmIChyICE9PSAwKSB7XG4gICAgICB2YXIgbWFzayA9IDB4M2ZmZmZmZiBeICgoMHgzZmZmZmZmID4+PiByKSA8PCByKTtcbiAgICAgIHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXSAmPSBtYXNrO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG9ubHkgbG93ZXJzIGJpdHMgb2YgbnVtYmVyXG4gIEJOLnByb3RvdHlwZS5tYXNrbiA9IGZ1bmN0aW9uIG1hc2tuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYml0cyk7XG4gIH07XG5cbiAgLy8gQWRkIHBsYWluIG51bWJlciBgbnVtYCB0byBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmlhZGRuID0gZnVuY3Rpb24gaWFkZG4gKG51bSkge1xuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG4gICAgaWYgKG51bSA8IDApIHJldHVybiB0aGlzLmlzdWJuKC1udW0pO1xuXG4gICAgLy8gUG9zc2libGUgc2lnbiBjaGFuZ2VcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAxICYmICh0aGlzLndvcmRzWzBdIHwgMCkgPCBudW0pIHtcbiAgICAgICAgdGhpcy53b3Jkc1swXSA9IG51bSAtICh0aGlzLndvcmRzWzBdIHwgMCk7XG4gICAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmlzdWJuKG51bSk7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRob3V0IGNoZWNrc1xuICAgIHJldHVybiB0aGlzLl9pYWRkbihudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faWFkZG4gPSBmdW5jdGlvbiBfaWFkZG4gKG51bSkge1xuICAgIHRoaXMud29yZHNbMF0gKz0gbnVtO1xuXG4gICAgLy8gQ2FycnlcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoICYmIHRoaXMud29yZHNbaV0gPj0gMHg0MDAwMDAwOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gLT0gMHg0MDAwMDAwO1xuICAgICAgaWYgKGkgPT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLndvcmRzW2kgKyAxXSA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndvcmRzW2kgKyAxXSsrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWF4KHRoaXMubGVuZ3RoLCBpICsgMSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBTdWJ0cmFjdCBwbGFpbiBudW1iZXIgYG51bWAgZnJvbSBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmlzdWJuID0gZnVuY3Rpb24gaXN1Ym4gKG51bSkge1xuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG4gICAgaWYgKG51bSA8IDApIHJldHVybiB0aGlzLmlhZGRuKC1udW0pO1xuXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgdGhpcy5pYWRkbihudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLndvcmRzWzBdIC09IG51bTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLndvcmRzWzBdIDwgMCkge1xuICAgICAgdGhpcy53b3Jkc1swXSA9IC10aGlzLndvcmRzWzBdO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENhcnJ5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoICYmIHRoaXMud29yZHNbaV0gPCAwOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSArPSAweDQwMDAwMDA7XG4gICAgICAgIHRoaXMud29yZHNbaSArIDFdIC09IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuYWRkbiA9IGZ1bmN0aW9uIGFkZG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaWFkZG4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuc3VibiA9IGZ1bmN0aW9uIHN1Ym4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaWFicyA9IGZ1bmN0aW9uIGlhYnMgKCkge1xuICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmFicyA9IGZ1bmN0aW9uIGFicyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pc2hsbnN1Ym11bCA9IGZ1bmN0aW9uIF9pc2hsbnN1Ym11bCAobnVtLCBtdWwsIHNoaWZ0KSB7XG4gICAgLy8gQmlnZ2VyIHN0b3JhZ2UgaXMgbmVlZGVkXG4gICAgdmFyIGxlbiA9IG51bS5sZW5ndGggKyBzaGlmdDtcbiAgICB2YXIgaTtcbiAgICBpZiAodGhpcy53b3Jkcy5sZW5ndGggPCBsZW4pIHtcbiAgICAgIHZhciB0ID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0W2ldID0gdGhpcy53b3Jkc1tpXTtcbiAgICAgIH1cbiAgICAgIHRoaXMud29yZHMgPSB0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpID0gdGhpcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gWmVyb2lmeSByZXN0XG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLm1heCh0aGlzLmxlbmd0aCwgbGVuKTtcbiAgICBmb3IgKDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAwO1xuICAgIH1cblxuICAgIHZhciB3O1xuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yIChpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdyA9ICh0aGlzLndvcmRzW2kgKyBzaGlmdF0gfCAwKSArIGNhcnJ5O1xuICAgICAgdmFyIHJpZ2h0ID0gKG51bS53b3Jkc1tpXSB8IDApICogbXVsO1xuICAgICAgdyAtPSByaWdodCAmIDB4M2ZmZmZmZjtcbiAgICAgIGNhcnJ5ID0gKHcgPj4gMjYpIC0gKChyaWdodCAvIDB4NDAwMDAwMCkgfCAwKTtcbiAgICAgIHRoaXMud29yZHNbaSArIHNoaWZ0XSA9IHcgJiAweDNmZmZmZmY7XG4gICAgfVxuICAgIGZvciAoOyBpIDwgdGhpcy5sZW5ndGggLSBzaGlmdDsgaSsrKSB7XG4gICAgICB3ID0gKHRoaXMud29yZHNbaSArIHNoaWZ0XSB8IDApICsgY2Fycnk7XG4gICAgICBjYXJyeSA9IHcgPj4gMjY7XG4gICAgICB0aGlzLndvcmRzW2kgKyBzaGlmdF0gPSB3ICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIGlmIChjYXJyeSA9PT0gMCkgcmV0dXJuIHRoaXMuc3RyaXAoKTtcblxuICAgIC8vIFN1YnRyYWN0aW9uIG92ZXJmbG93XG4gICAgYXNzZXJ0KGNhcnJ5ID09PSAtMSk7XG4gICAgY2FycnkgPSAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3ID0gLSh0aGlzLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB3ICYgMHgzZmZmZmZmO1xuICAgIH1cbiAgICB0aGlzLm5lZ2F0aXZlID0gMTtcblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl93b3JkRGl2ID0gZnVuY3Rpb24gX3dvcmREaXYgKG51bSwgbW9kZSkge1xuICAgIHZhciBzaGlmdCA9IHRoaXMubGVuZ3RoIC0gbnVtLmxlbmd0aDtcblxuICAgIHZhciBhID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciBiID0gbnVtO1xuXG4gICAgLy8gTm9ybWFsaXplXG4gICAgdmFyIGJoaSA9IGIud29yZHNbYi5sZW5ndGggLSAxXSB8IDA7XG4gICAgdmFyIGJoaUJpdHMgPSB0aGlzLl9jb3VudEJpdHMoYmhpKTtcbiAgICBzaGlmdCA9IDI2IC0gYmhpQml0cztcbiAgICBpZiAoc2hpZnQgIT09IDApIHtcbiAgICAgIGIgPSBiLnVzaGxuKHNoaWZ0KTtcbiAgICAgIGEuaXVzaGxuKHNoaWZ0KTtcbiAgICAgIGJoaSA9IGIud29yZHNbYi5sZW5ndGggLSAxXSB8IDA7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBxdW90aWVudFxuICAgIHZhciBtID0gYS5sZW5ndGggLSBiLmxlbmd0aDtcbiAgICB2YXIgcTtcblxuICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgcSA9IG5ldyBCTihudWxsKTtcbiAgICAgIHEubGVuZ3RoID0gbSArIDE7XG4gICAgICBxLndvcmRzID0gbmV3IEFycmF5KHEubGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcS5sZW5ndGg7IGkrKykge1xuICAgICAgICBxLndvcmRzW2ldID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGlmZiA9IGEuY2xvbmUoKS5faXNobG5zdWJtdWwoYiwgMSwgbSk7XG4gICAgaWYgKGRpZmYubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIGEgPSBkaWZmO1xuICAgICAgaWYgKHEpIHtcbiAgICAgICAgcS53b3Jkc1ttXSA9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IG0gLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgdmFyIHFqID0gKGEud29yZHNbYi5sZW5ndGggKyBqXSB8IDApICogMHg0MDAwMDAwICtcbiAgICAgICAgKGEud29yZHNbYi5sZW5ndGggKyBqIC0gMV0gfCAwKTtcblxuICAgICAgLy8gTk9URTogKHFqIC8gYmhpKSBpcyAoMHgzZmZmZmZmICogMHg0MDAwMDAwICsgMHgzZmZmZmZmKSAvIDB4MjAwMDAwMCBtYXhcbiAgICAgIC8vICgweDdmZmZmZmYpXG4gICAgICBxaiA9IE1hdGgubWluKChxaiAvIGJoaSkgfCAwLCAweDNmZmZmZmYpO1xuXG4gICAgICBhLl9pc2hsbnN1Ym11bChiLCBxaiwgaik7XG4gICAgICB3aGlsZSAoYS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICBxai0tO1xuICAgICAgICBhLm5lZ2F0aXZlID0gMDtcbiAgICAgICAgYS5faXNobG5zdWJtdWwoYiwgMSwgaik7XG4gICAgICAgIGlmICghYS5pc1plcm8oKSkge1xuICAgICAgICAgIGEubmVnYXRpdmUgXj0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHEpIHtcbiAgICAgICAgcS53b3Jkc1tqXSA9IHFqO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocSkge1xuICAgICAgcS5zdHJpcCgpO1xuICAgIH1cbiAgICBhLnN0cmlwKCk7XG5cbiAgICAvLyBEZW5vcm1hbGl6ZVxuICAgIGlmIChtb2RlICE9PSAnZGl2JyAmJiBzaGlmdCAhPT0gMCkge1xuICAgICAgYS5pdXNocm4oc2hpZnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGRpdjogcSB8fCBudWxsLCBtb2Q6IGEgfTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZGl2bW9kID0gZnVuY3Rpb24gZGl2bW9kIChudW0sIG1vZGUsIHBvc2l0aXZlKSB7XG4gICAgYXNzZXJ0KCFudW0uaXNaZXJvKCkpO1xuXG4gICAgdmFyIGRpdiwgbW9kLCByZXM7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSB7XG4gICAgICByZXMgPSB0aGlzLm5lZygpLmRpdm1vZChudW0sIG1vZGUpO1xuXG4gICAgICBpZiAobW9kZSAhPT0gJ21vZCcpIHtcbiAgICAgICAgZGl2ID0gcmVzLmRpdi5uZWcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZGUgIT09ICdkaXYnKSB7XG4gICAgICAgIG1vZCA9IHJlcy5tb2QubmVnKCk7XG4gICAgICAgIGlmIChwb3NpdGl2ZSAmJiBtb2QubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgICBtb2QuaWFkZChudW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogZGl2LFxuICAgICAgICBtb2Q6IG1vZFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uZWdhdGl2ZSA9PT0gMCAmJiBudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMuZGl2bW9kKG51bS5uZWcoKSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgICBkaXYgPSByZXMuZGl2Lm5lZygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBkaXY6IGRpdiwgbW9kOiByZXMubW9kIH07XG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLm5lZ2F0aXZlICYgbnVtLm5lZ2F0aXZlKSAhPT0gMCkge1xuICAgICAgcmVzID0gdGhpcy5uZWcoKS5kaXZtb2QobnVtLm5lZygpLCBtb2RlKTtcblxuICAgICAgaWYgKG1vZGUgIT09ICdkaXYnKSB7XG4gICAgICAgIG1vZCA9IHJlcy5tb2QubmVnKCk7XG4gICAgICAgIGlmIChwb3NpdGl2ZSAmJiBtb2QubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgICBtb2QuaXN1YihudW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogcmVzLmRpdixcbiAgICAgICAgbW9kOiBtb2RcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQm90aCBudW1iZXJzIGFyZSBwb3NpdGl2ZSBhdCB0aGlzIHBvaW50XG5cbiAgICAvLyBTdHJpcCBib3RoIG51bWJlcnMgdG8gYXBwcm94aW1hdGUgc2hpZnQgdmFsdWVcbiAgICBpZiAobnVtLmxlbmd0aCA+IHRoaXMubGVuZ3RoIHx8IHRoaXMuY21wKG51bSkgPCAwKSB7XG4gICAgICByZXR1cm4geyBkaXY6IG5ldyBCTigwKSwgbW9kOiB0aGlzIH07XG4gICAgfVxuXG4gICAgLy8gVmVyeSBzaG9ydCByZWR1Y3Rpb25cbiAgICBpZiAobnVtLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKG1vZGUgPT09ICdkaXYnKSB7XG4gICAgICAgIHJldHVybiB7IGRpdjogdGhpcy5kaXZuKG51bS53b3Jkc1swXSksIG1vZDogbnVsbCB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kZSA9PT0gJ21vZCcpIHtcbiAgICAgICAgcmV0dXJuIHsgZGl2OiBudWxsLCBtb2Q6IG5ldyBCTih0aGlzLm1vZG4obnVtLndvcmRzWzBdKSkgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiB0aGlzLmRpdm4obnVtLndvcmRzWzBdKSxcbiAgICAgICAgbW9kOiBuZXcgQk4odGhpcy5tb2RuKG51bS53b3Jkc1swXSkpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl93b3JkRGl2KG51bSwgbW9kZSk7XG4gIH07XG5cbiAgLy8gRmluZCBgdGhpc2AgLyBgbnVtYFxuICBCTi5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24gZGl2IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5kaXZtb2QobnVtLCAnZGl2JywgZmFsc2UpLmRpdjtcbiAgfTtcblxuICAvLyBGaW5kIGB0aGlzYCAlIGBudW1gXG4gIEJOLnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiBtb2QgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmRpdm1vZChudW0sICdtb2QnLCBmYWxzZSkubW9kO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51bW9kID0gZnVuY3Rpb24gdW1vZCAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZGl2bW9kKG51bSwgJ21vZCcsIHRydWUpLm1vZDtcbiAgfTtcblxuICAvLyBGaW5kIFJvdW5kKGB0aGlzYCAvIGBudW1gKVxuICBCTi5wcm90b3R5cGUuZGl2Um91bmQgPSBmdW5jdGlvbiBkaXZSb3VuZCAobnVtKSB7XG4gICAgdmFyIGRtID0gdGhpcy5kaXZtb2QobnVtKTtcblxuICAgIC8vIEZhc3QgY2FzZSAtIGV4YWN0IGRpdmlzaW9uXG4gICAgaWYgKGRtLm1vZC5pc1plcm8oKSkgcmV0dXJuIGRtLmRpdjtcblxuICAgIHZhciBtb2QgPSBkbS5kaXYubmVnYXRpdmUgIT09IDAgPyBkbS5tb2QuaXN1YihudW0pIDogZG0ubW9kO1xuXG4gICAgdmFyIGhhbGYgPSBudW0udXNocm4oMSk7XG4gICAgdmFyIHIyID0gbnVtLmFuZGxuKDEpO1xuICAgIHZhciBjbXAgPSBtb2QuY21wKGhhbGYpO1xuXG4gICAgLy8gUm91bmQgZG93blxuICAgIGlmIChjbXAgPCAwIHx8IHIyID09PSAxICYmIGNtcCA9PT0gMCkgcmV0dXJuIGRtLmRpdjtcblxuICAgIC8vIFJvdW5kIHVwXG4gICAgcmV0dXJuIGRtLmRpdi5uZWdhdGl2ZSAhPT0gMCA/IGRtLmRpdi5pc3VibigxKSA6IGRtLmRpdi5pYWRkbigxKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubW9kbiA9IGZ1bmN0aW9uIG1vZG4gKG51bSkge1xuICAgIGFzc2VydChudW0gPD0gMHgzZmZmZmZmKTtcbiAgICB2YXIgcCA9ICgxIDw8IDI2KSAlIG51bTtcblxuICAgIHZhciBhY2MgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBhY2MgPSAocCAqIGFjYyArICh0aGlzLndvcmRzW2ldIHwgMCkpICUgbnVtO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH07XG5cbiAgLy8gSW4tcGxhY2UgZGl2aXNpb24gYnkgbnVtYmVyXG4gIEJOLnByb3RvdHlwZS5pZGl2biA9IGZ1bmN0aW9uIGlkaXZuIChudW0pIHtcbiAgICBhc3NlcnQobnVtIDw9IDB4M2ZmZmZmZik7XG5cbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgdyA9ICh0aGlzLndvcmRzW2ldIHwgMCkgKyBjYXJyeSAqIDB4NDAwMDAwMDtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAodyAvIG51bSkgfCAwO1xuICAgICAgY2FycnkgPSB3ICUgbnVtO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmRpdm4gPSBmdW5jdGlvbiBkaXZuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmVnY2QgPSBmdW5jdGlvbiBlZ2NkIChwKSB7XG4gICAgYXNzZXJ0KHAubmVnYXRpdmUgPT09IDApO1xuICAgIGFzc2VydCghcC5pc1plcm8oKSk7XG5cbiAgICB2YXIgeCA9IHRoaXM7XG4gICAgdmFyIHkgPSBwLmNsb25lKCk7XG5cbiAgICBpZiAoeC5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgeCA9IHgudW1vZChwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IHguY2xvbmUoKTtcbiAgICB9XG5cbiAgICAvLyBBICogeCArIEIgKiB5ID0geFxuICAgIHZhciBBID0gbmV3IEJOKDEpO1xuICAgIHZhciBCID0gbmV3IEJOKDApO1xuXG4gICAgLy8gQyAqIHggKyBEICogeSA9IHlcbiAgICB2YXIgQyA9IG5ldyBCTigwKTtcbiAgICB2YXIgRCA9IG5ldyBCTigxKTtcblxuICAgIHZhciBnID0gMDtcblxuICAgIHdoaWxlICh4LmlzRXZlbigpICYmIHkuaXNFdmVuKCkpIHtcbiAgICAgIHguaXVzaHJuKDEpO1xuICAgICAgeS5pdXNocm4oMSk7XG4gICAgICArK2c7XG4gICAgfVxuXG4gICAgdmFyIHlwID0geS5jbG9uZSgpO1xuICAgIHZhciB4cCA9IHguY2xvbmUoKTtcblxuICAgIHdoaWxlICgheC5pc1plcm8oKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGltID0gMTsgKHgud29yZHNbMF0gJiBpbSkgPT09IDAgJiYgaSA8IDI2OyArK2ksIGltIDw8PSAxKTtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICB4Lml1c2hybihpKTtcbiAgICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgICBpZiAoQS5pc09kZCgpIHx8IEIuaXNPZGQoKSkge1xuICAgICAgICAgICAgQS5pYWRkKHlwKTtcbiAgICAgICAgICAgIEIuaXN1Yih4cCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQS5pdXNocm4oMSk7XG4gICAgICAgICAgQi5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGptID0gMTsgKHkud29yZHNbMF0gJiBqbSkgPT09IDAgJiYgaiA8IDI2OyArK2osIGptIDw8PSAxKTtcbiAgICAgIGlmIChqID4gMCkge1xuICAgICAgICB5Lml1c2hybihqKTtcbiAgICAgICAgd2hpbGUgKGotLSA+IDApIHtcbiAgICAgICAgICBpZiAoQy5pc09kZCgpIHx8IEQuaXNPZGQoKSkge1xuICAgICAgICAgICAgQy5pYWRkKHlwKTtcbiAgICAgICAgICAgIEQuaXN1Yih4cCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQy5pdXNocm4oMSk7XG4gICAgICAgICAgRC5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHguY21wKHkpID49IDApIHtcbiAgICAgICAgeC5pc3ViKHkpO1xuICAgICAgICBBLmlzdWIoQyk7XG4gICAgICAgIEIuaXN1YihEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHkuaXN1Yih4KTtcbiAgICAgICAgQy5pc3ViKEEpO1xuICAgICAgICBELmlzdWIoQik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGE6IEMsXG4gICAgICBiOiBELFxuICAgICAgZ2NkOiB5Lml1c2hsbihnKVxuICAgIH07XG4gIH07XG5cbiAgLy8gVGhpcyBpcyByZWR1Y2VkIGluY2FybmF0aW9uIG9mIHRoZSBiaW5hcnkgRUVBXG4gIC8vIGFib3ZlLCBkZXNpZ25hdGVkIHRvIGludmVydCBtZW1iZXJzIG9mIHRoZVxuICAvLyBfcHJpbWVfIGZpZWxkcyBGKHApIGF0IGEgbWF4aW1hbCBzcGVlZFxuICBCTi5wcm90b3R5cGUuX2ludm1wID0gZnVuY3Rpb24gX2ludm1wIChwKSB7XG4gICAgYXNzZXJ0KHAubmVnYXRpdmUgPT09IDApO1xuICAgIGFzc2VydCghcC5pc1plcm8oKSk7XG5cbiAgICB2YXIgYSA9IHRoaXM7XG4gICAgdmFyIGIgPSBwLmNsb25lKCk7XG5cbiAgICBpZiAoYS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgYSA9IGEudW1vZChwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IGEuY2xvbmUoKTtcbiAgICB9XG5cbiAgICB2YXIgeDEgPSBuZXcgQk4oMSk7XG4gICAgdmFyIHgyID0gbmV3IEJOKDApO1xuXG4gICAgdmFyIGRlbHRhID0gYi5jbG9uZSgpO1xuXG4gICAgd2hpbGUgKGEuY21wbigxKSA+IDAgJiYgYi5jbXBuKDEpID4gMCkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGltID0gMTsgKGEud29yZHNbMF0gJiBpbSkgPT09IDAgJiYgaSA8IDI2OyArK2ksIGltIDw8PSAxKTtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBhLml1c2hybihpKTtcbiAgICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgICBpZiAoeDEuaXNPZGQoKSkge1xuICAgICAgICAgICAgeDEuaWFkZChkZWx0YSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgeDEuaXVzaHJuKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBqbSA9IDE7IChiLndvcmRzWzBdICYgam0pID09PSAwICYmIGogPCAyNjsgKytqLCBqbSA8PD0gMSk7XG4gICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgYi5pdXNocm4oaik7XG4gICAgICAgIHdoaWxlIChqLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKHgyLmlzT2RkKCkpIHtcbiAgICAgICAgICAgIHgyLmlhZGQoZGVsdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHgyLml1c2hybigxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYS5jbXAoYikgPj0gMCkge1xuICAgICAgICBhLmlzdWIoYik7XG4gICAgICAgIHgxLmlzdWIoeDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYi5pc3ViKGEpO1xuICAgICAgICB4Mi5pc3ViKHgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzO1xuICAgIGlmIChhLmNtcG4oMSkgPT09IDApIHtcbiAgICAgIHJlcyA9IHgxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSB4MjtcbiAgICB9XG5cbiAgICBpZiAocmVzLmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMuaWFkZChwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5nY2QgPSBmdW5jdGlvbiBnY2QgKG51bSkge1xuICAgIGlmICh0aGlzLmlzWmVybygpKSByZXR1cm4gbnVtLmNsb25lKCk7XG4gICAgaWYgKG51bS5pc1plcm8oKSkgcmV0dXJuIHRoaXMuY2xvbmUoKTtcblxuICAgIHZhciBhID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciBiID0gbnVtLmNsb25lKCk7XG4gICAgYS5uZWdhdGl2ZSA9IDA7XG4gICAgYi5uZWdhdGl2ZSA9IDA7XG5cbiAgICAvLyBSZW1vdmUgY29tbW9uIGZhY3RvciBvZiB0d29cbiAgICBmb3IgKHZhciBzaGlmdCA9IDA7IGEuaXNFdmVuKCkgJiYgYi5pc0V2ZW4oKTsgc2hpZnQrKykge1xuICAgICAgYS5pdXNocm4oMSk7XG4gICAgICBiLml1c2hybigxKTtcbiAgICB9XG5cbiAgICBkbyB7XG4gICAgICB3aGlsZSAoYS5pc0V2ZW4oKSkge1xuICAgICAgICBhLml1c2hybigxKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChiLmlzRXZlbigpKSB7XG4gICAgICAgIGIuaXVzaHJuKDEpO1xuICAgICAgfVxuXG4gICAgICB2YXIgciA9IGEuY21wKGIpO1xuICAgICAgaWYgKHIgPCAwKSB7XG4gICAgICAgIC8vIFN3YXAgYGFgIGFuZCBgYmAgdG8gbWFrZSBgYWAgYWx3YXlzIGJpZ2dlciB0aGFuIGBiYFxuICAgICAgICB2YXIgdCA9IGE7XG4gICAgICAgIGEgPSBiO1xuICAgICAgICBiID0gdDtcbiAgICAgIH0gZWxzZSBpZiAociA9PT0gMCB8fCBiLmNtcG4oMSkgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGEuaXN1YihiKTtcbiAgICB9IHdoaWxlICh0cnVlKTtcblxuICAgIHJldHVybiBiLml1c2hsbihzaGlmdCk7XG4gIH07XG5cbiAgLy8gSW52ZXJ0IG51bWJlciBpbiB0aGUgZmllbGQgRihudW0pXG4gIEJOLnByb3RvdHlwZS5pbnZtID0gZnVuY3Rpb24gaW52bSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZWdjZChudW0pLmEudW1vZChudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc0V2ZW4gPSBmdW5jdGlvbiBpc0V2ZW4gKCkge1xuICAgIHJldHVybiAodGhpcy53b3Jkc1swXSAmIDEpID09PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc09kZCA9IGZ1bmN0aW9uIGlzT2RkICgpIHtcbiAgICByZXR1cm4gKHRoaXMud29yZHNbMF0gJiAxKSA9PT0gMTtcbiAgfTtcblxuICAvLyBBbmQgZmlyc3Qgd29yZCBhbmQgbnVtXG4gIEJOLnByb3RvdHlwZS5hbmRsbiA9IGZ1bmN0aW9uIGFuZGxuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy53b3Jkc1swXSAmIG51bTtcbiAgfTtcblxuICAvLyBJbmNyZW1lbnQgYXQgdGhlIGJpdCBwb3NpdGlvbiBpbi1saW5lXG4gIEJOLnByb3RvdHlwZS5iaW5jbiA9IGZ1bmN0aW9uIGJpbmNuIChiaXQpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdCA9PT0gJ251bWJlcicpO1xuICAgIHZhciByID0gYml0ICUgMjY7XG4gICAgdmFyIHMgPSAoYml0IC0gcikgLyAyNjtcbiAgICB2YXIgcSA9IDEgPDwgcjtcblxuICAgIC8vIEZhc3QgY2FzZTogYml0IGlzIG11Y2ggaGlnaGVyIHRoYW4gYWxsIGV4aXN0aW5nIHdvcmRzXG4gICAgaWYgKHRoaXMubGVuZ3RoIDw9IHMpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaSA8IHMgKyAxOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IDA7XG4gICAgICB9XG4gICAgICB0aGlzLndvcmRzW3NdIHw9IHE7XG4gICAgICB0aGlzLmxlbmd0aCA9IHMgKyAxO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gQWRkIGJpdCBhbmQgcHJvcGFnYXRlLCBpZiBuZWVkZWRcbiAgICB2YXIgY2FycnkgPSBxO1xuICAgIGZvciAoaSA9IHM7IGNhcnJ5ICE9PSAwICYmIGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdyA9IHRoaXMud29yZHNbaV0gfCAwO1xuICAgICAgdyArPSBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+Pj4gMjY7XG4gICAgICB3ICY9IDB4M2ZmZmZmZjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB3O1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBjYXJyeTtcbiAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc1plcm8gPSBmdW5jdGlvbiBpc1plcm8gKCkge1xuICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLndvcmRzWzBdID09PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5jbXBuID0gZnVuY3Rpb24gY21wbiAobnVtKSB7XG4gICAgdmFyIG5lZ2F0aXZlID0gbnVtIDwgMDtcblxuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwICYmICFuZWdhdGl2ZSkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG5lZ2F0aXZlKSByZXR1cm4gMTtcblxuICAgIHRoaXMuc3RyaXAoKTtcblxuICAgIHZhciByZXM7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMSkge1xuICAgICAgcmVzID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5lZ2F0aXZlKSB7XG4gICAgICAgIG51bSA9IC1udW07XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChudW0gPD0gMHgzZmZmZmZmLCAnTnVtYmVyIGlzIHRvbyBiaWcnKTtcblxuICAgICAgdmFyIHcgPSB0aGlzLndvcmRzWzBdIHwgMDtcbiAgICAgIHJlcyA9IHcgPT09IG51bSA/IDAgOiB3IDwgbnVtID8gLTEgOiAxO1xuICAgIH1cbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgcmVzID0gLXJlcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvLyBDb21wYXJlIHR3byBudW1iZXJzIGFuZCByZXR1cm46XG4gIC8vIDEgLSBpZiBgdGhpc2AgPiBgbnVtYFxuICAvLyAwIC0gaWYgYHRoaXNgID09IGBudW1gXG4gIC8vIC0xIC0gaWYgYHRoaXNgIDwgYG51bWBcbiAgQk4ucHJvdG90eXBlLmNtcCA9IGZ1bmN0aW9uIGNtcCAobnVtKSB7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgPT09IDAgJiYgbnVtLm5lZ2F0aXZlICE9PSAwKSByZXR1cm4gMTtcblxuICAgIHZhciByZXMgPSB0aGlzLnVjbXAobnVtKTtcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkgcmV0dXJuIC1yZXM7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIFVuc2lnbmVkIGNvbXBhcmlzb25cbiAgQk4ucHJvdG90eXBlLnVjbXAgPSBmdW5jdGlvbiB1Y21wIChudW0pIHtcbiAgICAvLyBBdCB0aGlzIHBvaW50IGJvdGggbnVtYmVycyBoYXZlIHRoZSBzYW1lIHNpZ25cbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gMTtcbiAgICBpZiAodGhpcy5sZW5ndGggPCBudW0ubGVuZ3RoKSByZXR1cm4gLTE7XG5cbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGEgPSB0aGlzLndvcmRzW2ldIHwgMDtcbiAgICAgIHZhciBiID0gbnVtLndvcmRzW2ldIHwgMDtcblxuICAgICAgaWYgKGEgPT09IGIpIGNvbnRpbnVlO1xuICAgICAgaWYgKGEgPCBiKSB7XG4gICAgICAgIHJlcyA9IC0xO1xuICAgICAgfSBlbHNlIGlmIChhID4gYikge1xuICAgICAgICByZXMgPSAxO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0biA9IGZ1bmN0aW9uIGd0biAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID09PSAxO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndCA9IGZ1bmN0aW9uIGd0IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA9PT0gMTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ3RlbiA9IGZ1bmN0aW9uIGd0ZW4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcG4obnVtKSA+PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndGUgPSBmdW5jdGlvbiBndGUgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID49IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0biA9IGZ1bmN0aW9uIGx0biAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID09PSAtMTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHQgPSBmdW5jdGlvbiBsdCAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPT09IC0xO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5sdGVuID0gZnVuY3Rpb24gbHRlbiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pIDw9IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0ZSA9IGZ1bmN0aW9uIGx0ZSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPD0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZXFuID0gZnVuY3Rpb24gZXFuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPT09IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmVxID0gZnVuY3Rpb24gZXEgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID09PSAwO1xuICB9O1xuXG4gIC8vXG4gIC8vIEEgcmVkdWNlIGNvbnRleHQsIGNvdWxkIGJlIHVzaW5nIG1vbnRnb21lcnkgb3Igc29tZXRoaW5nIGJldHRlciwgZGVwZW5kaW5nXG4gIC8vIG9uIHRoZSBgbWAgaXRzZWxmLlxuICAvL1xuICBCTi5yZWQgPSBmdW5jdGlvbiByZWQgKG51bSkge1xuICAgIHJldHVybiBuZXcgUmVkKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvUmVkID0gZnVuY3Rpb24gdG9SZWQgKGN0eCkge1xuICAgIGFzc2VydCghdGhpcy5yZWQsICdBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0Jyk7XG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDAsICdyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcycpO1xuICAgIHJldHVybiBjdHguY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChjdHgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5mcm9tUmVkID0gZnVuY3Rpb24gZnJvbVJlZCAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAnZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCcpO1xuICAgIHJldHVybiB0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2ZvcmNlUmVkID0gZnVuY3Rpb24gX2ZvcmNlUmVkIChjdHgpIHtcbiAgICB0aGlzLnJlZCA9IGN0eDtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZm9yY2VSZWQgPSBmdW5jdGlvbiBmb3JjZVJlZCAoY3R4KSB7XG4gICAgYXNzZXJ0KCF0aGlzLnJlZCwgJ0FscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQnKTtcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VSZWQoY3R4KTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkQWRkID0gZnVuY3Rpb24gcmVkQWRkIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmFkZCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJQWRkID0gZnVuY3Rpb24gcmVkSUFkZCAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaWFkZCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRTdWIgPSBmdW5jdGlvbiByZWRTdWIgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuc3ViKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElTdWIgPSBmdW5jdGlvbiByZWRJU3ViIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pc3ViKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFNobCA9IGZ1bmN0aW9uIHJlZFNobCAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC51c2hsKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZE11bCA9IGZ1bmN0aW9uIHJlZE11bCAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsIG51bSk7XG4gICAgcmV0dXJuIHRoaXMucmVkLm11bCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJTXVsID0gZnVuY3Rpb24gcmVkSU11bCAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsIG51bSk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmltdWwodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkU3FyID0gZnVuY3Rpb24gcmVkU3FyICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnNxcih0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkSVNxciA9IGZ1bmN0aW9uIHJlZElTcXIgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmlzcXIodGhpcyk7XG4gIH07XG5cbiAgLy8gU3F1YXJlIHJvb3Qgb3ZlciBwXG4gIEJOLnByb3RvdHlwZS5yZWRTcXJ0ID0gZnVuY3Rpb24gcmVkU3FydCAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuc3FydCh0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkSW52bSA9IGZ1bmN0aW9uIHJlZEludm0gKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmludm0odGhpcyk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG5lZ2F0aXZlIGNsb25lIG9mIGB0aGlzYCAlIGByZWQgbW9kdWxvYFxuICBCTi5wcm90b3R5cGUucmVkTmVnID0gZnVuY3Rpb24gcmVkTmVnICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLm5lZyh0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkUG93ID0gZnVuY3Rpb24gcmVkUG93IChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQgJiYgIW51bS5yZWQsICdyZWRQb3cobm9ybWFsTnVtKScpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5wb3codGhpcywgbnVtKTtcbiAgfTtcblxuICAvLyBQcmltZSBudW1iZXJzIHdpdGggZWZmaWNpZW50IHJlZHVjdGlvblxuICB2YXIgcHJpbWVzID0ge1xuICAgIGsyNTY6IG51bGwsXG4gICAgcDIyNDogbnVsbCxcbiAgICBwMTkyOiBudWxsLFxuICAgIHAyNTUxOTogbnVsbFxuICB9O1xuXG4gIC8vIFBzZXVkby1NZXJzZW5uZSBwcmltZVxuICBmdW5jdGlvbiBNUHJpbWUgKG5hbWUsIHApIHtcbiAgICAvLyBQID0gMiBeIE4gLSBLXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnAgPSBuZXcgQk4ocCwgMTYpO1xuICAgIHRoaXMubiA9IHRoaXMucC5iaXRMZW5ndGgoKTtcbiAgICB0aGlzLmsgPSBuZXcgQk4oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApO1xuXG4gICAgdGhpcy50bXAgPSB0aGlzLl90bXAoKTtcbiAgfVxuXG4gIE1QcmltZS5wcm90b3R5cGUuX3RtcCA9IGZ1bmN0aW9uIF90bXAgKCkge1xuICAgIHZhciB0bXAgPSBuZXcgQk4obnVsbCk7XG4gICAgdG1wLndvcmRzID0gbmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4gLyAxMykpO1xuICAgIHJldHVybiB0bXA7XG4gIH07XG5cbiAgTVByaW1lLnByb3RvdHlwZS5pcmVkdWNlID0gZnVuY3Rpb24gaXJlZHVjZSAobnVtKSB7XG4gICAgLy8gQXNzdW1lcyB0aGF0IGBudW1gIGlzIGxlc3MgdGhhbiBgUF4yYFxuICAgIC8vIG51bSA9IEhJICogKDIgXiBOIC0gSykgKyBISSAqIEsgKyBMTyA9IEhJICogSyArIExPIChtb2QgUClcbiAgICB2YXIgciA9IG51bTtcbiAgICB2YXIgcmxlbjtcblxuICAgIGRvIHtcbiAgICAgIHRoaXMuc3BsaXQociwgdGhpcy50bXApO1xuICAgICAgciA9IHRoaXMuaW11bEsocik7XG4gICAgICByID0gci5pYWRkKHRoaXMudG1wKTtcbiAgICAgIHJsZW4gPSByLmJpdExlbmd0aCgpO1xuICAgIH0gd2hpbGUgKHJsZW4gPiB0aGlzLm4pO1xuXG4gICAgdmFyIGNtcCA9IHJsZW4gPCB0aGlzLm4gPyAtMSA6IHIudWNtcCh0aGlzLnApO1xuICAgIGlmIChjbXAgPT09IDApIHtcbiAgICAgIHIud29yZHNbMF0gPSAwO1xuICAgICAgci5sZW5ndGggPSAxO1xuICAgIH0gZWxzZSBpZiAoY21wID4gMCkge1xuICAgICAgci5pc3ViKHRoaXMucCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHIuc3RyaXAoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBNUHJpbWUucHJvdG90eXBlLnNwbGl0ID0gZnVuY3Rpb24gc3BsaXQgKGlucHV0LCBvdXQpIHtcbiAgICBpbnB1dC5pdXNocm4odGhpcy5uLCAwLCBvdXQpO1xuICB9O1xuXG4gIE1QcmltZS5wcm90b3R5cGUuaW11bEsgPSBmdW5jdGlvbiBpbXVsSyAobnVtKSB7XG4gICAgcmV0dXJuIG51bS5pbXVsKHRoaXMuayk7XG4gIH07XG5cbiAgZnVuY3Rpb24gSzI1NiAoKSB7XG4gICAgTVByaW1lLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgJ2syNTYnLFxuICAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmJyk7XG4gIH1cbiAgaW5oZXJpdHMoSzI1NiwgTVByaW1lKTtcblxuICBLMjU2LnByb3RvdHlwZS5zcGxpdCA9IGZ1bmN0aW9uIHNwbGl0IChpbnB1dCwgb3V0cHV0KSB7XG4gICAgLy8gMjU2ID0gOSAqIDI2ICsgMjJcbiAgICB2YXIgbWFzayA9IDB4M2ZmZmZmO1xuXG4gICAgdmFyIG91dExlbiA9IE1hdGgubWluKGlucHV0Lmxlbmd0aCwgOSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdXRMZW47IGkrKykge1xuICAgICAgb3V0cHV0LndvcmRzW2ldID0gaW5wdXQud29yZHNbaV07XG4gICAgfVxuICAgIG91dHB1dC5sZW5ndGggPSBvdXRMZW47XG5cbiAgICBpZiAoaW5wdXQubGVuZ3RoIDw9IDkpIHtcbiAgICAgIGlucHV0LndvcmRzWzBdID0gMDtcbiAgICAgIGlucHV0Lmxlbmd0aCA9IDE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2hpZnQgYnkgOSBsaW1ic1xuICAgIHZhciBwcmV2ID0gaW5wdXQud29yZHNbOV07XG4gICAgb3V0cHV0LndvcmRzW291dHB1dC5sZW5ndGgrK10gPSBwcmV2ICYgbWFzaztcblxuICAgIGZvciAoaSA9IDEwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuZXh0ID0gaW5wdXQud29yZHNbaV0gfCAwO1xuICAgICAgaW5wdXQud29yZHNbaSAtIDEwXSA9ICgobmV4dCAmIG1hc2spIDw8IDQpIHwgKHByZXYgPj4+IDIyKTtcbiAgICAgIHByZXYgPSBuZXh0O1xuICAgIH1cbiAgICBwcmV2ID4+Pj0gMjI7XG4gICAgaW5wdXQud29yZHNbaSAtIDEwXSA9IHByZXY7XG4gICAgaWYgKHByZXYgPT09IDAgJiYgaW5wdXQubGVuZ3RoID4gMTApIHtcbiAgICAgIGlucHV0Lmxlbmd0aCAtPSAxMDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQubGVuZ3RoIC09IDk7XG4gICAgfVxuICB9O1xuXG4gIEsyNTYucHJvdG90eXBlLmltdWxLID0gZnVuY3Rpb24gaW11bEsgKG51bSkge1xuICAgIC8vIEsgPSAweDEwMDAwMDNkMSA9IFsgMHg0MCwgMHgzZDEgXVxuICAgIG51bS53b3Jkc1tudW0ubGVuZ3RoXSA9IDA7XG4gICAgbnVtLndvcmRzW251bS5sZW5ndGggKyAxXSA9IDA7XG4gICAgbnVtLmxlbmd0aCArPSAyO1xuXG4gICAgLy8gYm91bmRlZCBhdDogMHg0MCAqIDB4M2ZmZmZmZiArIDB4M2QwID0gMHgxMDAwMDAzOTBcbiAgICB2YXIgbG8gPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdyA9IG51bS53b3Jkc1tpXSB8IDA7XG4gICAgICBsbyArPSB3ICogMHgzZDE7XG4gICAgICBudW0ud29yZHNbaV0gPSBsbyAmIDB4M2ZmZmZmZjtcbiAgICAgIGxvID0gdyAqIDB4NDAgKyAoKGxvIC8gMHg0MDAwMDAwKSB8IDApO1xuICAgIH1cblxuICAgIC8vIEZhc3QgbGVuZ3RoIHJlZHVjdGlvblxuICAgIGlmIChudW0ud29yZHNbbnVtLmxlbmd0aCAtIDFdID09PSAwKSB7XG4gICAgICBudW0ubGVuZ3RoLS07XG4gICAgICBpZiAobnVtLndvcmRzW251bS5sZW5ndGggLSAxXSA9PT0gMCkge1xuICAgICAgICBudW0ubGVuZ3RoLS07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW07XG4gIH07XG5cbiAgZnVuY3Rpb24gUDIyNCAoKSB7XG4gICAgTVByaW1lLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgJ3AyMjQnLFxuICAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxJyk7XG4gIH1cbiAgaW5oZXJpdHMoUDIyNCwgTVByaW1lKTtcblxuICBmdW5jdGlvbiBQMTkyICgpIHtcbiAgICBNUHJpbWUuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICAncDE5MicsXG4gICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYnKTtcbiAgfVxuICBpbmhlcml0cyhQMTkyLCBNUHJpbWUpO1xuXG4gIGZ1bmN0aW9uIFAyNTUxOSAoKSB7XG4gICAgLy8gMiBeIDI1NSAtIDE5XG4gICAgTVByaW1lLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgJzI1NTE5JyxcbiAgICAgICc3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkJyk7XG4gIH1cbiAgaW5oZXJpdHMoUDI1NTE5LCBNUHJpbWUpO1xuXG4gIFAyNTUxOS5wcm90b3R5cGUuaW11bEsgPSBmdW5jdGlvbiBpbXVsSyAobnVtKSB7XG4gICAgLy8gSyA9IDB4MTNcbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGkgPSAobnVtLndvcmRzW2ldIHwgMCkgKiAweDEzICsgY2Fycnk7XG4gICAgICB2YXIgbG8gPSBoaSAmIDB4M2ZmZmZmZjtcbiAgICAgIGhpID4+Pj0gMjY7XG5cbiAgICAgIG51bS53b3Jkc1tpXSA9IGxvO1xuICAgICAgY2FycnkgPSBoaTtcbiAgICB9XG4gICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICBudW0ud29yZHNbbnVtLmxlbmd0aCsrXSA9IGNhcnJ5O1xuICAgIH1cbiAgICByZXR1cm4gbnVtO1xuICB9O1xuXG4gIC8vIEV4cG9ydGVkIG1vc3RseSBmb3IgdGVzdGluZyBwdXJwb3NlcywgdXNlIHBsYWluIG5hbWUgaW5zdGVhZFxuICBCTi5fcHJpbWUgPSBmdW5jdGlvbiBwcmltZSAobmFtZSkge1xuICAgIC8vIENhY2hlZCB2ZXJzaW9uIG9mIHByaW1lXG4gICAgaWYgKHByaW1lc1tuYW1lXSkgcmV0dXJuIHByaW1lc1tuYW1lXTtcblxuICAgIHZhciBwcmltZTtcbiAgICBpZiAobmFtZSA9PT0gJ2syNTYnKSB7XG4gICAgICBwcmltZSA9IG5ldyBLMjU2KCk7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAncDIyNCcpIHtcbiAgICAgIHByaW1lID0gbmV3IFAyMjQoKTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdwMTkyJykge1xuICAgICAgcHJpbWUgPSBuZXcgUDE5MigpO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3AyNTUxOScpIHtcbiAgICAgIHByaW1lID0gbmV3IFAyNTUxOSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gcHJpbWUgJyArIG5hbWUpO1xuICAgIH1cbiAgICBwcmltZXNbbmFtZV0gPSBwcmltZTtcblxuICAgIHJldHVybiBwcmltZTtcbiAgfTtcblxuICAvL1xuICAvLyBCYXNlIHJlZHVjdGlvbiBlbmdpbmVcbiAgLy9cbiAgZnVuY3Rpb24gUmVkIChtKSB7XG4gICAgaWYgKHR5cGVvZiBtID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIHByaW1lID0gQk4uX3ByaW1lKG0pO1xuICAgICAgdGhpcy5tID0gcHJpbWUucDtcbiAgICAgIHRoaXMucHJpbWUgPSBwcmltZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tID0gbTtcbiAgICAgIHRoaXMucHJpbWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIFJlZC5wcm90b3R5cGUuX3ZlcmlmeTEgPSBmdW5jdGlvbiBfdmVyaWZ5MSAoYSkge1xuICAgIGFzc2VydChhLm5lZ2F0aXZlID09PSAwLCAncmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMnKTtcbiAgICBhc3NlcnQoYS5yZWQsICdyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5fdmVyaWZ5MiA9IGZ1bmN0aW9uIF92ZXJpZnkyIChhLCBiKSB7XG4gICAgYXNzZXJ0KChhLm5lZ2F0aXZlIHwgYi5uZWdhdGl2ZSkgPT09IDAsICdyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcycpO1xuICAgIGFzc2VydChhLnJlZCAmJiBhLnJlZCA9PT0gYi5yZWQsXG4gICAgICAncmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaW1vZCA9IGZ1bmN0aW9uIGltb2QgKGEpIHtcbiAgICBpZiAodGhpcy5wcmltZSkgcmV0dXJuIHRoaXMucHJpbWUuaXJlZHVjZShhKS5fZm9yY2VSZWQodGhpcyk7XG4gICAgcmV0dXJuIGEudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZyAoYSkge1xuICAgIGlmIChhLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gYS5jbG9uZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm0uc3ViKGEpLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5hZGQoYik7XG4gICAgaWYgKHJlcy5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMuaXN1Yih0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlhZGQgPSBmdW5jdGlvbiBpYWRkIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLmlhZGQoYik7XG4gICAgaWYgKHJlcy5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMuaXN1Yih0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24gc3ViIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLnN1YihiKTtcbiAgICBpZiAocmVzLmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMuaWFkZCh0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlzdWIgPSBmdW5jdGlvbiBpc3ViIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLmlzdWIoYik7XG4gICAgaWYgKHJlcy5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzLmlhZGQodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnNobCA9IGZ1bmN0aW9uIHNobCAoYSwgbnVtKSB7XG4gICAgdGhpcy5fdmVyaWZ5MShhKTtcbiAgICByZXR1cm4gdGhpcy5pbW9kKGEudXNobG4obnVtKSk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pbXVsID0gZnVuY3Rpb24gaW11bCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG4gICAgcmV0dXJuIHRoaXMuaW1vZChhLmltdWwoYikpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcbiAgICByZXR1cm4gdGhpcy5pbW9kKGEubXVsKGIpKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlzcXIgPSBmdW5jdGlvbiBpc3FyIChhKSB7XG4gICAgcmV0dXJuIHRoaXMuaW11bChhLCBhLmNsb25lKCkpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3FyID0gZnVuY3Rpb24gc3FyIChhKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsKGEsIGEpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3FydCA9IGZ1bmN0aW9uIHNxcnQgKGEpIHtcbiAgICBpZiAoYS5pc1plcm8oKSkgcmV0dXJuIGEuY2xvbmUoKTtcblxuICAgIHZhciBtb2QzID0gdGhpcy5tLmFuZGxuKDMpO1xuICAgIGFzc2VydChtb2QzICUgMiA9PT0gMSk7XG5cbiAgICAvLyBGYXN0IGNhc2VcbiAgICBpZiAobW9kMyA9PT0gMykge1xuICAgICAgdmFyIHBvdyA9IHRoaXMubS5hZGQobmV3IEJOKDEpKS5pdXNocm4oMik7XG4gICAgICByZXR1cm4gdGhpcy5wb3coYSwgcG93KTtcbiAgICB9XG5cbiAgICAvLyBUb25lbGxpLVNoYW5rcyBhbGdvcml0aG0gKFRvdGFsbHkgdW5vcHRpbWl6ZWQgYW5kIHNsb3cpXG4gICAgLy9cbiAgICAvLyBGaW5kIFEgYW5kIFMsIHRoYXQgUSAqIDIgXiBTID0gKFAgLSAxKVxuICAgIHZhciBxID0gdGhpcy5tLnN1Ym4oMSk7XG4gICAgdmFyIHMgPSAwO1xuICAgIHdoaWxlICghcS5pc1plcm8oKSAmJiBxLmFuZGxuKDEpID09PSAwKSB7XG4gICAgICBzKys7XG4gICAgICBxLml1c2hybigxKTtcbiAgICB9XG4gICAgYXNzZXJ0KCFxLmlzWmVybygpKTtcblxuICAgIHZhciBvbmUgPSBuZXcgQk4oMSkudG9SZWQodGhpcyk7XG4gICAgdmFyIG5PbmUgPSBvbmUucmVkTmVnKCk7XG5cbiAgICAvLyBGaW5kIHF1YWRyYXRpYyBub24tcmVzaWR1ZVxuICAgIC8vIE5PVEU6IE1heCBpcyBzdWNoIGJlY2F1c2Ugb2YgZ2VuZXJhbGl6ZWQgUmllbWFubiBoeXBvdGhlc2lzLlxuICAgIHZhciBscG93ID0gdGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpO1xuICAgIHZhciB6ID0gdGhpcy5tLmJpdExlbmd0aCgpO1xuICAgIHogPSBuZXcgQk4oMiAqIHogKiB6KS50b1JlZCh0aGlzKTtcblxuICAgIHdoaWxlICh0aGlzLnBvdyh6LCBscG93KS5jbXAobk9uZSkgIT09IDApIHtcbiAgICAgIHoucmVkSUFkZChuT25lKTtcbiAgICB9XG5cbiAgICB2YXIgYyA9IHRoaXMucG93KHosIHEpO1xuICAgIHZhciByID0gdGhpcy5wb3coYSwgcS5hZGRuKDEpLml1c2hybigxKSk7XG4gICAgdmFyIHQgPSB0aGlzLnBvdyhhLCBxKTtcbiAgICB2YXIgbSA9IHM7XG4gICAgd2hpbGUgKHQuY21wKG9uZSkgIT09IDApIHtcbiAgICAgIHZhciB0bXAgPSB0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IHRtcC5jbXAob25lKSAhPT0gMDsgaSsrKSB7XG4gICAgICAgIHRtcCA9IHRtcC5yZWRTcXIoKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChpIDwgbSk7XG4gICAgICB2YXIgYiA9IHRoaXMucG93KGMsIG5ldyBCTigxKS5pdXNobG4obSAtIGkgLSAxKSk7XG5cbiAgICAgIHIgPSByLnJlZE11bChiKTtcbiAgICAgIGMgPSBiLnJlZFNxcigpO1xuICAgICAgdCA9IHQucmVkTXVsKGMpO1xuICAgICAgbSA9IGk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pbnZtID0gZnVuY3Rpb24gaW52bSAoYSkge1xuICAgIHZhciBpbnYgPSBhLl9pbnZtcCh0aGlzLm0pO1xuICAgIGlmIChpbnYubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIGludi5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXR1cm4gdGhpcy5pbW9kKGludikucmVkTmVnKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmltb2QoaW52KTtcbiAgICB9XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5wb3cgPSBmdW5jdGlvbiBwb3cgKGEsIG51bSkge1xuICAgIGlmIChudW0uaXNaZXJvKCkpIHJldHVybiBuZXcgQk4oMSk7XG4gICAgaWYgKG51bS5jbXBuKDEpID09PSAwKSByZXR1cm4gYS5jbG9uZSgpO1xuXG4gICAgdmFyIHdpbmRvd1NpemUgPSA0O1xuICAgIHZhciB3bmQgPSBuZXcgQXJyYXkoMSA8PCB3aW5kb3dTaXplKTtcbiAgICB3bmRbMF0gPSBuZXcgQk4oMSkudG9SZWQodGhpcyk7XG4gICAgd25kWzFdID0gYTtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IHduZC5sZW5ndGg7IGkrKykge1xuICAgICAgd25kW2ldID0gdGhpcy5tdWwod25kW2kgLSAxXSwgYSk7XG4gICAgfVxuXG4gICAgdmFyIHJlcyA9IHduZFswXTtcbiAgICB2YXIgY3VycmVudCA9IDA7XG4gICAgdmFyIGN1cnJlbnRMZW4gPSAwO1xuICAgIHZhciBzdGFydCA9IG51bS5iaXRMZW5ndGgoKSAlIDI2O1xuICAgIGlmIChzdGFydCA9PT0gMCkge1xuICAgICAgc3RhcnQgPSAyNjtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBudW0ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciB3b3JkID0gbnVtLndvcmRzW2ldO1xuICAgICAgZm9yICh2YXIgaiA9IHN0YXJ0IC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgdmFyIGJpdCA9ICh3b3JkID4+IGopICYgMTtcbiAgICAgICAgaWYgKHJlcyAhPT0gd25kWzBdKSB7XG4gICAgICAgICAgcmVzID0gdGhpcy5zcXIocmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiaXQgPT09IDAgJiYgY3VycmVudCA9PT0gMCkge1xuICAgICAgICAgIGN1cnJlbnRMZW4gPSAwO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudCA8PD0gMTtcbiAgICAgICAgY3VycmVudCB8PSBiaXQ7XG4gICAgICAgIGN1cnJlbnRMZW4rKztcbiAgICAgICAgaWYgKGN1cnJlbnRMZW4gIT09IHdpbmRvd1NpemUgJiYgKGkgIT09IDAgfHwgaiAhPT0gMCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIHJlcyA9IHRoaXMubXVsKHJlcywgd25kW2N1cnJlbnRdKTtcbiAgICAgICAgY3VycmVudExlbiA9IDA7XG4gICAgICAgIGN1cnJlbnQgPSAwO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSAyNjtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuY29udmVydFRvID0gZnVuY3Rpb24gY29udmVydFRvIChudW0pIHtcbiAgICB2YXIgciA9IG51bS51bW9kKHRoaXMubSk7XG5cbiAgICByZXR1cm4gciA9PT0gbnVtID8gci5jbG9uZSgpIDogcjtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmNvbnZlcnRGcm9tID0gZnVuY3Rpb24gY29udmVydEZyb20gKG51bSkge1xuICAgIHZhciByZXMgPSBudW0uY2xvbmUoKTtcbiAgICByZXMucmVkID0gbnVsbDtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vXG4gIC8vIE1vbnRnb21lcnkgbWV0aG9kIGVuZ2luZVxuICAvL1xuXG4gIEJOLm1vbnQgPSBmdW5jdGlvbiBtb250IChudW0pIHtcbiAgICByZXR1cm4gbmV3IE1vbnQobnVtKTtcbiAgfTtcblxuICBmdW5jdGlvbiBNb250IChtKSB7XG4gICAgUmVkLmNhbGwodGhpcywgbSk7XG5cbiAgICB0aGlzLnNoaWZ0ID0gdGhpcy5tLmJpdExlbmd0aCgpO1xuICAgIGlmICh0aGlzLnNoaWZ0ICUgMjYgIT09IDApIHtcbiAgICAgIHRoaXMuc2hpZnQgKz0gMjYgLSAodGhpcy5zaGlmdCAlIDI2KTtcbiAgICB9XG5cbiAgICB0aGlzLnIgPSBuZXcgQk4oMSkuaXVzaGxuKHRoaXMuc2hpZnQpO1xuICAgIHRoaXMucjIgPSB0aGlzLmltb2QodGhpcy5yLnNxcigpKTtcbiAgICB0aGlzLnJpbnYgPSB0aGlzLnIuX2ludm1wKHRoaXMubSk7XG5cbiAgICB0aGlzLm1pbnYgPSB0aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSk7XG4gICAgdGhpcy5taW52ID0gdGhpcy5taW52LnVtb2QodGhpcy5yKTtcbiAgICB0aGlzLm1pbnYgPSB0aGlzLnIuc3ViKHRoaXMubWludik7XG4gIH1cbiAgaW5oZXJpdHMoTW9udCwgUmVkKTtcblxuICBNb250LnByb3RvdHlwZS5jb252ZXJ0VG8gPSBmdW5jdGlvbiBjb252ZXJ0VG8gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmltb2QobnVtLnVzaGxuKHRoaXMuc2hpZnQpKTtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5jb252ZXJ0RnJvbSA9IGZ1bmN0aW9uIGNvbnZlcnRGcm9tIChudW0pIHtcbiAgICB2YXIgciA9IHRoaXMuaW1vZChudW0ubXVsKHRoaXMucmludikpO1xuICAgIHIucmVkID0gbnVsbDtcbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5pbXVsID0gZnVuY3Rpb24gaW11bCAoYSwgYikge1xuICAgIGlmIChhLmlzWmVybygpIHx8IGIuaXNaZXJvKCkpIHtcbiAgICAgIGEud29yZHNbMF0gPSAwO1xuICAgICAgYS5sZW5ndGggPSAxO1xuICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgdmFyIHQgPSBhLmltdWwoYik7XG4gICAgdmFyIGMgPSB0Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKTtcbiAgICB2YXIgdSA9IHQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCk7XG4gICAgdmFyIHJlcyA9IHU7XG5cbiAgICBpZiAodS5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMgPSB1LmlzdWIodGhpcy5tKTtcbiAgICB9IGVsc2UgaWYgKHUuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcyA9IHUuaWFkZCh0aGlzLm0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xuXG4gIE1vbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bCAoYSwgYikge1xuICAgIGlmIChhLmlzWmVybygpIHx8IGIuaXNaZXJvKCkpIHJldHVybiBuZXcgQk4oMCkuX2ZvcmNlUmVkKHRoaXMpO1xuXG4gICAgdmFyIHQgPSBhLm11bChiKTtcbiAgICB2YXIgYyA9IHQubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pO1xuICAgIHZhciB1ID0gdC5pc3ViKGMpLml1c2hybih0aGlzLnNoaWZ0KTtcbiAgICB2YXIgcmVzID0gdTtcbiAgICBpZiAodS5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMgPSB1LmlzdWIodGhpcy5tKTtcbiAgICB9IGVsc2UgaWYgKHUuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcyA9IHUuaWFkZCh0aGlzLm0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xuXG4gIE1vbnQucHJvdG90eXBlLmludm0gPSBmdW5jdGlvbiBpbnZtIChhKSB7XG4gICAgLy8gKEFSKV4tMSAqIFJeMiA9IChBXi0xICogUl4tMSkgKiBSXjIgPSBBXi0xICogUlxuICAgIHZhciByZXMgPSB0aGlzLmltb2QoYS5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpO1xuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xufSkodHlwZW9mIG1vZHVsZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbW9kdWxlLCB0aGlzKTtcbiIsInZhciByO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJhbmQobGVuKSB7XG4gIGlmICghcilcbiAgICByID0gbmV3IFJhbmQobnVsbCk7XG5cbiAgcmV0dXJuIHIuZ2VuZXJhdGUobGVuKTtcbn07XG5cbmZ1bmN0aW9uIFJhbmQocmFuZCkge1xuICB0aGlzLnJhbmQgPSByYW5kO1xufVxubW9kdWxlLmV4cG9ydHMuUmFuZCA9IFJhbmQ7XG5cblJhbmQucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gZ2VuZXJhdGUobGVuKSB7XG4gIHJldHVybiB0aGlzLl9yYW5kKGxlbik7XG59O1xuXG5pZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHtcbiAgaWYgKHdpbmRvdy5jcnlwdG8gJiYgd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBNb2Rlcm4gYnJvd3NlcnNcbiAgICBSYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uIF9yYW5kKG4pIHtcbiAgICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICAgIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycik7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH07XG4gIH0gZWxzZSBpZiAod2luZG93Lm1zQ3J5cHRvICYmIHdpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBJRVxuICAgIFJhbmQucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24gX3JhbmQobikge1xuICAgICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KG4pO1xuICAgICAgd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnIpO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIE9sZCBqdW5rXG4gICAgUmFuZC5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkIHlldCcpO1xuICAgIH07XG4gIH1cbn0gZWxzZSB7XG4gIC8vIE5vZGUuanMgb3IgV2ViIHdvcmtlclxuICB0cnkge1xuICAgIHZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnknICsgJ3B0bycpO1xuXG4gICAgUmFuZC5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbiBfcmFuZChuKSB7XG4gICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKG4pO1xuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBFbXVsYXRlIGNyeXB0byBBUEkgdXNpbmcgcmFuZHlcbiAgICBSYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uIF9yYW5kKG4pIHtcbiAgICAgIHZhciByZXMgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICByZXNbaV0gPSB0aGlzLnJhbmQuZ2V0Qnl0ZSgpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICB9XG59XG4iLCIvLyBiYXNlZCBvbiB0aGUgYWVzIGltcGxpbWVudGF0aW9uIGluIHRyaXBsZSBzZWNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rZXliYXNlL3RyaXBsZXNlY1xuXG4vLyB3aGljaCBpcyBpbiB0dXJuIGJhc2VkIG9uIHRoZSBvbmUgZnJvbSBjcnlwdG8tanNcbi8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL1xuXG52YXIgdWludF9tYXggPSBNYXRoLnBvdygyLCAzMilcbmZ1bmN0aW9uIGZpeHVwX3VpbnQzMiAoeCkge1xuICB2YXIgcmV0LCB4X3Bvc1xuICByZXQgPSB4ID4gdWludF9tYXggfHwgeCA8IDAgPyAoeF9wb3MgPSBNYXRoLmFicyh4KSAlIHVpbnRfbWF4LCB4IDwgMCA/IHVpbnRfbWF4IC0geF9wb3MgOiB4X3BvcykgOiB4XG4gIHJldHVybiByZXRcbn1cbmZ1bmN0aW9uIHNjcnViX3ZlYyAodikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHYubGVuZ3RoOyB2KyspIHtcbiAgICB2W2ldID0gMFxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBHbG9iYWwgKCkge1xuICB0aGlzLlNCT1ggPSBbXVxuICB0aGlzLklOVl9TQk9YID0gW11cbiAgdGhpcy5TVUJfTUlYID0gW1tdLCBbXSwgW10sIFtdXVxuICB0aGlzLklOVl9TVUJfTUlYID0gW1tdLCBbXSwgW10sIFtdXVxuICB0aGlzLmluaXQoKVxuICB0aGlzLlJDT04gPSBbMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNl1cbn1cblxuR2xvYmFsLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZCwgaSwgc3gsIHQsIHgsIHgyLCB4NCwgeDgsIHhpLCBfaVxuICBkID0gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2ksIF9yZXN1bHRzXG4gICAgX3Jlc3VsdHMgPSBbXVxuICAgIGZvciAoaSA9IF9pID0gMDsgX2kgPCAyNTY7IGkgPSArK19pKSB7XG4gICAgICBpZiAoaSA8IDEyOCkge1xuICAgICAgICBfcmVzdWx0cy5wdXNoKGkgPDwgMSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9yZXN1bHRzLnB1c2goKGkgPDwgMSkgXiAweDExYilcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9yZXN1bHRzXG4gIH0pKClcbiAgeCA9IDBcbiAgeGkgPSAwXG4gIGZvciAoaSA9IF9pID0gMDsgX2kgPCAyNTY7IGkgPSArK19pKSB7XG4gICAgc3ggPSB4aSBeICh4aSA8PCAxKSBeICh4aSA8PCAyKSBeICh4aSA8PCAzKSBeICh4aSA8PCA0KVxuICAgIHN4ID0gKHN4ID4+PiA4KSBeIChzeCAmIDB4ZmYpIF4gMHg2M1xuICAgIHRoaXMuU0JPWFt4XSA9IHN4XG4gICAgdGhpcy5JTlZfU0JPWFtzeF0gPSB4XG4gICAgeDIgPSBkW3hdXG4gICAgeDQgPSBkW3gyXVxuICAgIHg4ID0gZFt4NF1cbiAgICB0ID0gKGRbc3hdICogMHgxMDEpIF4gKHN4ICogMHgxMDEwMTAwKVxuICAgIHRoaXMuU1VCX01JWFswXVt4XSA9ICh0IDw8IDI0KSB8ICh0ID4+PiA4KVxuICAgIHRoaXMuU1VCX01JWFsxXVt4XSA9ICh0IDw8IDE2KSB8ICh0ID4+PiAxNilcbiAgICB0aGlzLlNVQl9NSVhbMl1beF0gPSAodCA8PCA4KSB8ICh0ID4+PiAyNClcbiAgICB0aGlzLlNVQl9NSVhbM11beF0gPSB0XG4gICAgdCA9ICh4OCAqIDB4MTAxMDEwMSkgXiAoeDQgKiAweDEwMDAxKSBeICh4MiAqIDB4MTAxKSBeICh4ICogMHgxMDEwMTAwKVxuICAgIHRoaXMuSU5WX1NVQl9NSVhbMF1bc3hdID0gKHQgPDwgMjQpIHwgKHQgPj4+IDgpXG4gICAgdGhpcy5JTlZfU1VCX01JWFsxXVtzeF0gPSAodCA8PCAxNikgfCAodCA+Pj4gMTYpXG4gICAgdGhpcy5JTlZfU1VCX01JWFsyXVtzeF0gPSAodCA8PCA4KSB8ICh0ID4+PiAyNClcbiAgICB0aGlzLklOVl9TVUJfTUlYWzNdW3N4XSA9IHRcbiAgICBpZiAoeCA9PT0gMCkge1xuICAgICAgeCA9IHhpID0gMVxuICAgIH0gZWxzZSB7XG4gICAgICB4ID0geDIgXiBkW2RbZFt4OCBeIHgyXV1dXG4gICAgICB4aSBePSBkW2RbeGldXVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG52YXIgRyA9IG5ldyBHbG9iYWwoKVxuXG5BRVMuYmxvY2tTaXplID0gNCAqIDRcblxuQUVTLnByb3RvdHlwZS5ibG9ja1NpemUgPSBBRVMuYmxvY2tTaXplXG5cbkFFUy5rZXlTaXplID0gMjU2IC8gOFxuXG5BRVMucHJvdG90eXBlLmtleVNpemUgPSBBRVMua2V5U2l6ZVxuXG5mdW5jdGlvbiBidWZmZXJUb0FycmF5IChidWYpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGggLyA0XG4gIHZhciBvdXQgPSBuZXcgQXJyYXkobGVuKVxuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBvdXRbaV0gPSBidWYucmVhZFVJbnQzMkJFKGkgKiA0KVxuICB9XG4gIHJldHVybiBvdXRcbn1cbmZ1bmN0aW9uIEFFUyAoa2V5KSB7XG4gIHRoaXMuX2tleSA9IGJ1ZmZlclRvQXJyYXkoa2V5KVxuICB0aGlzLl9kb1Jlc2V0KClcbn1cblxuQUVTLnByb3RvdHlwZS5fZG9SZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGludktzUm93LCBrZXlTaXplLCBrZXlXb3Jkcywga3NSb3csIGtzUm93cywgdFxuICBrZXlXb3JkcyA9IHRoaXMuX2tleVxuICBrZXlTaXplID0ga2V5V29yZHMubGVuZ3RoXG4gIHRoaXMuX25Sb3VuZHMgPSBrZXlTaXplICsgNlxuICBrc1Jvd3MgPSAodGhpcy5fblJvdW5kcyArIDEpICogNFxuICB0aGlzLl9rZXlTY2hlZHVsZSA9IFtdXG4gIGZvciAoa3NSb3cgPSAwOyBrc1JvdyA8IGtzUm93czsga3NSb3crKykge1xuICAgIHRoaXMuX2tleVNjaGVkdWxlW2tzUm93XSA9IGtzUm93IDwga2V5U2l6ZSA/IGtleVdvcmRzW2tzUm93XSA6ICh0ID0gdGhpcy5fa2V5U2NoZWR1bGVba3NSb3cgLSAxXSwgKGtzUm93ICUga2V5U2l6ZSkgPT09IDAgPyAodCA9ICh0IDw8IDgpIHwgKHQgPj4+IDI0KSwgdCA9IChHLlNCT1hbdCA+Pj4gMjRdIDw8IDI0KSB8IChHLlNCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChHLlNCT1hbKHQgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBHLlNCT1hbdCAmIDB4ZmZdLCB0IF49IEcuUkNPTlsoa3NSb3cgLyBrZXlTaXplKSB8IDBdIDw8IDI0KSA6IGtleVNpemUgPiA2ICYmIGtzUm93ICUga2V5U2l6ZSA9PT0gNCA/IHQgPSAoRy5TQk9YW3QgPj4+IDI0XSA8PCAyNCkgfCAoRy5TQk9YWyh0ID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoRy5TQk9YWyh0ID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgRy5TQk9YW3QgJiAweGZmXSA6IHZvaWQgMCwgdGhpcy5fa2V5U2NoZWR1bGVba3NSb3cgLSBrZXlTaXplXSBeIHQpXG4gIH1cbiAgdGhpcy5faW52S2V5U2NoZWR1bGUgPSBbXVxuICBmb3IgKGludktzUm93ID0gMDsgaW52S3NSb3cgPCBrc1Jvd3M7IGludktzUm93KyspIHtcbiAgICBrc1JvdyA9IGtzUm93cyAtIGludktzUm93XG4gICAgdCA9IHRoaXMuX2tleVNjaGVkdWxlW2tzUm93IC0gKGludktzUm93ICUgNCA/IDAgOiA0KV1cbiAgICB0aGlzLl9pbnZLZXlTY2hlZHVsZVtpbnZLc1Jvd10gPSBpbnZLc1JvdyA8IDQgfHwga3NSb3cgPD0gNCA/IHQgOiBHLklOVl9TVUJfTUlYWzBdW0cuU0JPWFt0ID4+PiAyNF1dIF4gRy5JTlZfU1VCX01JWFsxXVtHLlNCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdXSBeIEcuSU5WX1NVQl9NSVhbMl1bRy5TQk9YWyh0ID4+PiA4KSAmIDB4ZmZdXSBeIEcuSU5WX1NVQl9NSVhbM11bRy5TQk9YW3QgJiAweGZmXV1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5BRVMucHJvdG90eXBlLmVuY3J5cHRCbG9jayA9IGZ1bmN0aW9uIChNKSB7XG4gIE0gPSBidWZmZXJUb0FycmF5KG5ldyBCdWZmZXIoTSkpXG4gIHZhciBvdXQgPSB0aGlzLl9kb0NyeXB0QmxvY2soTSwgdGhpcy5fa2V5U2NoZWR1bGUsIEcuU1VCX01JWCwgRy5TQk9YKVxuICB2YXIgYnVmID0gbmV3IEJ1ZmZlcigxNilcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzBdLCAwKVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMV0sIDQpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFsyXSwgOClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzNdLCAxMilcbiAgcmV0dXJuIGJ1ZlxufVxuXG5BRVMucHJvdG90eXBlLmRlY3J5cHRCbG9jayA9IGZ1bmN0aW9uIChNKSB7XG4gIE0gPSBidWZmZXJUb0FycmF5KG5ldyBCdWZmZXIoTSkpXG4gIHZhciB0ZW1wID0gW01bM10sIE1bMV1dXG4gIE1bMV0gPSB0ZW1wWzBdXG4gIE1bM10gPSB0ZW1wWzFdXG4gIHZhciBvdXQgPSB0aGlzLl9kb0NyeXB0QmxvY2soTSwgdGhpcy5faW52S2V5U2NoZWR1bGUsIEcuSU5WX1NVQl9NSVgsIEcuSU5WX1NCT1gpXG4gIHZhciBidWYgPSBuZXcgQnVmZmVyKDE2KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMF0sIDApXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFszXSwgNClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzJdLCA4KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMV0sIDEyKVxuICByZXR1cm4gYnVmXG59XG5cbkFFUy5wcm90b3R5cGUuc2NydWIgPSBmdW5jdGlvbiAoKSB7XG4gIHNjcnViX3ZlYyh0aGlzLl9rZXlTY2hlZHVsZSlcbiAgc2NydWJfdmVjKHRoaXMuX2ludktleVNjaGVkdWxlKVxuICBzY3J1Yl92ZWModGhpcy5fa2V5KVxufVxuXG5BRVMucHJvdG90eXBlLl9kb0NyeXB0QmxvY2sgPSBmdW5jdGlvbiAoTSwga2V5U2NoZWR1bGUsIFNVQl9NSVgsIFNCT1gpIHtcbiAgdmFyIGtzUm93LCBzMCwgczEsIHMyLCBzMywgdDAsIHQxLCB0MiwgdDNcblxuICBzMCA9IE1bMF0gXiBrZXlTY2hlZHVsZVswXVxuICBzMSA9IE1bMV0gXiBrZXlTY2hlZHVsZVsxXVxuICBzMiA9IE1bMl0gXiBrZXlTY2hlZHVsZVsyXVxuICBzMyA9IE1bM10gXiBrZXlTY2hlZHVsZVszXVxuICBrc1JvdyA9IDRcbiAgZm9yICh2YXIgcm91bmQgPSAxOyByb3VuZCA8IHRoaXMuX25Sb3VuZHM7IHJvdW5kKyspIHtcbiAgICB0MCA9IFNVQl9NSVhbMF1bczAgPj4+IDI0XSBeIFNVQl9NSVhbMV1bKHMxID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhbMl1bKHMyID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWFszXVtzMyAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgICB0MSA9IFNVQl9NSVhbMF1bczEgPj4+IDI0XSBeIFNVQl9NSVhbMV1bKHMyID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhbMl1bKHMzID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWFszXVtzMCAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgICB0MiA9IFNVQl9NSVhbMF1bczIgPj4+IDI0XSBeIFNVQl9NSVhbMV1bKHMzID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhbMl1bKHMwID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWFszXVtzMSAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgICB0MyA9IFNVQl9NSVhbMF1bczMgPj4+IDI0XSBeIFNVQl9NSVhbMV1bKHMwID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhbMl1bKHMxID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWFszXVtzMiAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgICBzMCA9IHQwXG4gICAgczEgPSB0MVxuICAgIHMyID0gdDJcbiAgICBzMyA9IHQzXG4gIH1cbiAgdDAgPSAoKFNCT1hbczAgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczEgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMiA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczMgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICB0MSA9ICgoU0JPWFtzMSA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMiA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMzID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMCAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdXG4gIHQyID0gKChTQk9YW3MyID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMzID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczAgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MxICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgdDMgPSAoKFNCT1hbczMgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczAgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMSA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczIgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICByZXR1cm4gW1xuICAgIGZpeHVwX3VpbnQzMih0MCksXG4gICAgZml4dXBfdWludDMyKHQxKSxcbiAgICBmaXh1cF91aW50MzIodDIpLFxuICAgIGZpeHVwX3VpbnQzMih0MylcbiAgXVxufVxuXG5leHBvcnRzLkFFUyA9IEFFU1xuIiwidmFyIGFlcyA9IHJlcXVpcmUoJy4vYWVzJylcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgR0hBU0ggPSByZXF1aXJlKCcuL2doYXNoJylcbnZhciB4b3IgPSByZXF1aXJlKCdidWZmZXIteG9yJylcbmluaGVyaXRzKFN0cmVhbUNpcGhlciwgVHJhbnNmb3JtKVxubW9kdWxlLmV4cG9ydHMgPSBTdHJlYW1DaXBoZXJcblxuZnVuY3Rpb24gU3RyZWFtQ2lwaGVyIChtb2RlLCBrZXksIGl2LCBkZWNyeXB0KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdHJlYW1DaXBoZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1DaXBoZXIobW9kZSwga2V5LCBpdilcbiAgfVxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzKVxuICB0aGlzLl9maW5JRCA9IEJ1ZmZlci5jb25jYXQoW2l2LCBuZXcgQnVmZmVyKFswLCAwLCAwLCAxXSldKVxuICBpdiA9IEJ1ZmZlci5jb25jYXQoW2l2LCBuZXcgQnVmZmVyKFswLCAwLCAwLCAyXSldKVxuICB0aGlzLl9jaXBoZXIgPSBuZXcgYWVzLkFFUyhrZXkpXG4gIHRoaXMuX3ByZXYgPSBuZXcgQnVmZmVyKGl2Lmxlbmd0aClcbiAgdGhpcy5fY2FjaGUgPSBuZXcgQnVmZmVyKCcnKVxuICB0aGlzLl9zZWNDYWNoZSA9IG5ldyBCdWZmZXIoJycpXG4gIHRoaXMuX2RlY3J5cHQgPSBkZWNyeXB0XG4gIHRoaXMuX2FsZW4gPSAwXG4gIHRoaXMuX2xlbiA9IDBcbiAgaXYuY29weSh0aGlzLl9wcmV2KVxuICB0aGlzLl9tb2RlID0gbW9kZVxuICB2YXIgaCA9IG5ldyBCdWZmZXIoNClcbiAgaC5maWxsKDApXG4gIHRoaXMuX2doYXNoID0gbmV3IEdIQVNIKHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2soaCkpXG4gIHRoaXMuX2F1dGhUYWcgPSBudWxsXG4gIHRoaXMuX2NhbGxlZCA9IGZhbHNlXG59XG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgaWYgKCF0aGlzLl9jYWxsZWQgJiYgdGhpcy5fYWxlbikge1xuICAgIHZhciBydW1wID0gMTYgLSAodGhpcy5fYWxlbiAlIDE2KVxuICAgIGlmIChydW1wIDwgMTYpIHtcbiAgICAgIHJ1bXAgPSBuZXcgQnVmZmVyKHJ1bXApXG4gICAgICBydW1wLmZpbGwoMClcbiAgICAgIHRoaXMuX2doYXNoLnVwZGF0ZShydW1wKVxuICAgIH1cbiAgfVxuICB0aGlzLl9jYWxsZWQgPSB0cnVlXG4gIHZhciBvdXQgPSB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcywgY2h1bmspXG4gIGlmICh0aGlzLl9kZWNyeXB0KSB7XG4gICAgdGhpcy5fZ2hhc2gudXBkYXRlKGNodW5rKVxuICB9IGVsc2Uge1xuICAgIHRoaXMuX2doYXNoLnVwZGF0ZShvdXQpXG4gIH1cbiAgdGhpcy5fbGVuICs9IGNodW5rLmxlbmd0aFxuICByZXR1cm4gb3V0XG59XG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLl9maW5hbCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX2RlY3J5cHQgJiYgIXRoaXMuX2F1dGhUYWcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YScpXG4gIH1cbiAgdmFyIHRhZyA9IHhvcih0aGlzLl9naGFzaC5maW5hbCh0aGlzLl9hbGVuICogOCwgdGhpcy5fbGVuICogOCksIHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKVxuICBpZiAodGhpcy5fZGVjcnlwdCkge1xuICAgIGlmICh4b3JUZXN0KHRhZywgdGhpcy5fYXV0aFRhZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhJylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fYXV0aFRhZyA9IHRhZ1xuICB9XG4gIHRoaXMuX2NpcGhlci5zY3J1YigpXG59XG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLmdldEF1dGhUYWcgPSBmdW5jdGlvbiBnZXRBdXRoVGFnICgpIHtcbiAgaWYgKCF0aGlzLl9kZWNyeXB0ICYmIEJ1ZmZlci5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSkge1xuICAgIHJldHVybiB0aGlzLl9hdXRoVGFnXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZScpXG4gIH1cbn1cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuc2V0QXV0aFRhZyA9IGZ1bmN0aW9uIHNldEF1dGhUYWcgKHRhZykge1xuICBpZiAodGhpcy5fZGVjcnlwdCkge1xuICAgIHRoaXMuX2F1dGhUYWcgPSB0YWdcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlJylcbiAgfVxufVxuU3RyZWFtQ2lwaGVyLnByb3RvdHlwZS5zZXRBQUQgPSBmdW5jdGlvbiBzZXRBQUQgKGJ1Zikge1xuICBpZiAoIXRoaXMuX2NhbGxlZCkge1xuICAgIHRoaXMuX2doYXNoLnVwZGF0ZShidWYpXG4gICAgdGhpcy5fYWxlbiArPSBidWYubGVuZ3RoXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxuICB9XG59XG5mdW5jdGlvbiB4b3JUZXN0IChhLCBiKSB7XG4gIHZhciBvdXQgPSAwXG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICBvdXQrK1xuICB9XG4gIHZhciBsZW4gPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIG91dCArPSAoYVtpXSBeIGJbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuIiwidmFyIGNpcGhlcnMgPSByZXF1aXJlKCcuL2VuY3J5cHRlcicpXG5leHBvcnRzLmNyZWF0ZUNpcGhlciA9IGV4cG9ydHMuQ2lwaGVyID0gY2lwaGVycy5jcmVhdGVDaXBoZXJcbmV4cG9ydHMuY3JlYXRlQ2lwaGVyaXYgPSBleHBvcnRzLkNpcGhlcml2ID0gY2lwaGVycy5jcmVhdGVDaXBoZXJpdlxudmFyIGRlY2lwaGVycyA9IHJlcXVpcmUoJy4vZGVjcnlwdGVyJylcbmV4cG9ydHMuY3JlYXRlRGVjaXBoZXIgPSBleHBvcnRzLkRlY2lwaGVyID0gZGVjaXBoZXJzLmNyZWF0ZURlY2lwaGVyXG5leHBvcnRzLmNyZWF0ZURlY2lwaGVyaXYgPSBleHBvcnRzLkRlY2lwaGVyaXYgPSBkZWNpcGhlcnMuY3JlYXRlRGVjaXBoZXJpdlxudmFyIG1vZGVzID0gcmVxdWlyZSgnLi9tb2RlcycpXG5mdW5jdGlvbiBnZXRDaXBoZXJzICgpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1vZGVzKVxufVxuZXhwb3J0cy5saXN0Q2lwaGVycyA9IGV4cG9ydHMuZ2V0Q2lwaGVycyA9IGdldENpcGhlcnNcbiIsInZhciBhZXMgPSByZXF1aXJlKCcuL2FlcycpXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnY2lwaGVyLWJhc2UnKVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIG1vZGVzID0gcmVxdWlyZSgnLi9tb2RlcycpXG52YXIgU3RyZWFtQ2lwaGVyID0gcmVxdWlyZSgnLi9zdHJlYW1DaXBoZXInKVxudmFyIEF1dGhDaXBoZXIgPSByZXF1aXJlKCcuL2F1dGhDaXBoZXInKVxudmFyIGVidGsgPSByZXF1aXJlKCdldnBfYnl0ZXN0b2tleScpXG5cbmluaGVyaXRzKERlY2lwaGVyLCBUcmFuc2Zvcm0pXG5mdW5jdGlvbiBEZWNpcGhlciAobW9kZSwga2V5LCBpdikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGVjaXBoZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBEZWNpcGhlcihtb2RlLCBrZXksIGl2KVxuICB9XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMpXG4gIHRoaXMuX2NhY2hlID0gbmV3IFNwbGl0dGVyKClcbiAgdGhpcy5fbGFzdCA9IHZvaWQgMFxuICB0aGlzLl9jaXBoZXIgPSBuZXcgYWVzLkFFUyhrZXkpXG4gIHRoaXMuX3ByZXYgPSBuZXcgQnVmZmVyKGl2Lmxlbmd0aClcbiAgaXYuY29weSh0aGlzLl9wcmV2KVxuICB0aGlzLl9tb2RlID0gbW9kZVxuICB0aGlzLl9hdXRvcGFkZGluZyA9IHRydWVcbn1cbkRlY2lwaGVyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5fY2FjaGUuYWRkKGRhdGEpXG4gIHZhciBjaHVua1xuICB2YXIgdGhpbmdcbiAgdmFyIG91dCA9IFtdXG4gIHdoaWxlICgoY2h1bmsgPSB0aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpKSkge1xuICAgIHRoaW5nID0gdGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsIGNodW5rKVxuICAgIG91dC5wdXNoKHRoaW5nKVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KG91dClcbn1cbkRlY2lwaGVyLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjaHVuayA9IHRoaXMuX2NhY2hlLmZsdXNoKClcbiAgaWYgKHRoaXMuX2F1dG9wYWRkaW5nKSB7XG4gICAgcmV0dXJuIHVucGFkKHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLCBjaHVuaykpXG4gIH0gZWxzZSBpZiAoY2h1bmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCcpXG4gIH1cbn1cbkRlY2lwaGVyLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZyA9IGZ1bmN0aW9uIChzZXRUbykge1xuICB0aGlzLl9hdXRvcGFkZGluZyA9ICEhc2V0VG9cbiAgcmV0dXJuIHRoaXNcbn1cbmZ1bmN0aW9uIFNwbGl0dGVyICgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNwbGl0dGVyKSkge1xuICAgIHJldHVybiBuZXcgU3BsaXR0ZXIoKVxuICB9XG4gIHRoaXMuY2FjaGUgPSBuZXcgQnVmZmVyKCcnKVxufVxuU3BsaXR0ZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHRoaXMuY2FjaGUgPSBCdWZmZXIuY29uY2F0KFt0aGlzLmNhY2hlLCBkYXRhXSlcbn1cblxuU3BsaXR0ZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChhdXRvUGFkZGluZykge1xuICB2YXIgb3V0XG4gIGlmIChhdXRvUGFkZGluZykge1xuICAgIGlmICh0aGlzLmNhY2hlLmxlbmd0aCA+IDE2KSB7XG4gICAgICBvdXQgPSB0aGlzLmNhY2hlLnNsaWNlKDAsIDE2KVxuICAgICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuc2xpY2UoMTYpXG4gICAgICByZXR1cm4gb3V0XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0aGlzLmNhY2hlLmxlbmd0aCA+PSAxNikge1xuICAgICAgb3V0ID0gdGhpcy5jYWNoZS5zbGljZSgwLCAxNilcbiAgICAgIHRoaXMuY2FjaGUgPSB0aGlzLmNhY2hlLnNsaWNlKDE2KVxuICAgICAgcmV0dXJuIG91dFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuU3BsaXR0ZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5jYWNoZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVxuICB9XG59XG5mdW5jdGlvbiB1bnBhZCAobGFzdCkge1xuICB2YXIgcGFkZGVkID0gbGFzdFsxNV1cbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgcGFkZGVkKSB7XG4gICAgaWYgKGxhc3RbKGkgKyAoMTYgLSBwYWRkZWQpKV0gIT09IHBhZGRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gZGVjcnlwdCBkYXRhJylcbiAgICB9XG4gIH1cbiAgaWYgKHBhZGRlZCA9PT0gMTYpIHtcbiAgICByZXR1cm5cbiAgfVxuICByZXR1cm4gbGFzdC5zbGljZSgwLCAxNiAtIHBhZGRlZClcbn1cblxudmFyIG1vZGVsaXN0ID0ge1xuICBFQ0I6IHJlcXVpcmUoJy4vbW9kZXMvZWNiJyksXG4gIENCQzogcmVxdWlyZSgnLi9tb2Rlcy9jYmMnKSxcbiAgQ0ZCOiByZXF1aXJlKCcuL21vZGVzL2NmYicpLFxuICBDRkI4OiByZXF1aXJlKCcuL21vZGVzL2NmYjgnKSxcbiAgQ0ZCMTogcmVxdWlyZSgnLi9tb2Rlcy9jZmIxJyksXG4gIE9GQjogcmVxdWlyZSgnLi9tb2Rlcy9vZmInKSxcbiAgQ1RSOiByZXF1aXJlKCcuL21vZGVzL2N0cicpLFxuICBHQ006IHJlcXVpcmUoJy4vbW9kZXMvY3RyJylcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVjaXBoZXJpdiAoc3VpdGUsIHBhc3N3b3JkLCBpdikge1xuICB2YXIgY29uZmlnID0gbW9kZXNbc3VpdGUudG9Mb3dlckNhc2UoKV1cbiAgaWYgKCFjb25maWcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG4gIGlmICh0eXBlb2YgaXYgPT09ICdzdHJpbmcnKSB7XG4gICAgaXYgPSBuZXcgQnVmZmVyKGl2KVxuICB9XG4gIGlmICh0eXBlb2YgcGFzc3dvcmQgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFzc3dvcmQgPSBuZXcgQnVmZmVyKHBhc3N3b3JkKVxuICB9XG4gIGlmIChwYXNzd29yZC5sZW5ndGggIT09IGNvbmZpZy5rZXkgLyA4KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBrZXkgbGVuZ3RoICcgKyBwYXNzd29yZC5sZW5ndGgpXG4gIH1cbiAgaWYgKGl2Lmxlbmd0aCAhPT0gY29uZmlnLml2KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBpdiBsZW5ndGggJyArIGl2Lmxlbmd0aClcbiAgfVxuICBpZiAoY29uZmlnLnR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1DaXBoZXIobW9kZWxpc3RbY29uZmlnLm1vZGVdLCBwYXNzd29yZCwgaXYsIHRydWUpXG4gIH0gZWxzZSBpZiAoY29uZmlnLnR5cGUgPT09ICdhdXRoJykge1xuICAgIHJldHVybiBuZXcgQXV0aENpcGhlcihtb2RlbGlzdFtjb25maWcubW9kZV0sIHBhc3N3b3JkLCBpdiwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gbmV3IERlY2lwaGVyKG1vZGVsaXN0W2NvbmZpZy5tb2RlXSwgcGFzc3dvcmQsIGl2KVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWNpcGhlciAoc3VpdGUsIHBhc3N3b3JkKSB7XG4gIHZhciBjb25maWcgPSBtb2Rlc1tzdWl0ZS50b0xvd2VyQ2FzZSgpXVxuICBpZiAoIWNvbmZpZykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc3VpdGUgdHlwZScpXG4gIH1cbiAgdmFyIGtleXMgPSBlYnRrKHBhc3N3b3JkLCBmYWxzZSwgY29uZmlnLmtleSwgY29uZmlnLml2KVxuICByZXR1cm4gY3JlYXRlRGVjaXBoZXJpdihzdWl0ZSwga2V5cy5rZXksIGtleXMuaXYpXG59XG5leHBvcnRzLmNyZWF0ZURlY2lwaGVyID0gY3JlYXRlRGVjaXBoZXJcbmV4cG9ydHMuY3JlYXRlRGVjaXBoZXJpdiA9IGNyZWF0ZURlY2lwaGVyaXZcbiIsInZhciBhZXMgPSByZXF1aXJlKCcuL2FlcycpXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnY2lwaGVyLWJhc2UnKVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIG1vZGVzID0gcmVxdWlyZSgnLi9tb2RlcycpXG52YXIgZWJ0ayA9IHJlcXVpcmUoJ2V2cF9ieXRlc3Rva2V5JylcbnZhciBTdHJlYW1DaXBoZXIgPSByZXF1aXJlKCcuL3N0cmVhbUNpcGhlcicpXG52YXIgQXV0aENpcGhlciA9IHJlcXVpcmUoJy4vYXV0aENpcGhlcicpXG5pbmhlcml0cyhDaXBoZXIsIFRyYW5zZm9ybSlcbmZ1bmN0aW9uIENpcGhlciAobW9kZSwga2V5LCBpdikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2lwaGVyKSkge1xuICAgIHJldHVybiBuZXcgQ2lwaGVyKG1vZGUsIGtleSwgaXYpXG4gIH1cbiAgVHJhbnNmb3JtLmNhbGwodGhpcylcbiAgdGhpcy5fY2FjaGUgPSBuZXcgU3BsaXR0ZXIoKVxuICB0aGlzLl9jaXBoZXIgPSBuZXcgYWVzLkFFUyhrZXkpXG4gIHRoaXMuX3ByZXYgPSBuZXcgQnVmZmVyKGl2Lmxlbmd0aClcbiAgaXYuY29weSh0aGlzLl9wcmV2KVxuICB0aGlzLl9tb2RlID0gbW9kZVxuICB0aGlzLl9hdXRvcGFkZGluZyA9IHRydWVcbn1cbkNpcGhlci5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHRoaXMuX2NhY2hlLmFkZChkYXRhKVxuICB2YXIgY2h1bmtcbiAgdmFyIHRoaW5nXG4gIHZhciBvdXQgPSBbXVxuICB3aGlsZSAoKGNodW5rID0gdGhpcy5fY2FjaGUuZ2V0KCkpKSB7XG4gICAgdGhpbmcgPSB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcywgY2h1bmspXG4gICAgb3V0LnB1c2godGhpbmcpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQob3V0KVxufVxuQ2lwaGVyLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjaHVuayA9IHRoaXMuX2NhY2hlLmZsdXNoKClcbiAgaWYgKHRoaXMuX2F1dG9wYWRkaW5nKSB7XG4gICAgY2h1bmsgPSB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcywgY2h1bmspXG4gICAgdGhpcy5fY2lwaGVyLnNjcnViKClcbiAgICByZXR1cm4gY2h1bmtcbiAgfSBlbHNlIGlmIChjaHVuay50b1N0cmluZygnaGV4JykgIT09ICcxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMCcpIHtcbiAgICB0aGlzLl9jaXBoZXIuc2NydWIoKVxuICAgIHRocm93IG5ldyBFcnJvcignZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoJylcbiAgfVxufVxuQ2lwaGVyLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZyA9IGZ1bmN0aW9uIChzZXRUbykge1xuICB0aGlzLl9hdXRvcGFkZGluZyA9ICEhc2V0VG9cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gU3BsaXR0ZXIgKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3BsaXR0ZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBTcGxpdHRlcigpXG4gIH1cbiAgdGhpcy5jYWNoZSA9IG5ldyBCdWZmZXIoJycpXG59XG5TcGxpdHRlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5jYWNoZSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuY2FjaGUsIGRhdGFdKVxufVxuXG5TcGxpdHRlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5jYWNoZS5sZW5ndGggPiAxNSkge1xuICAgIHZhciBvdXQgPSB0aGlzLmNhY2hlLnNsaWNlKDAsIDE2KVxuICAgIHRoaXMuY2FjaGUgPSB0aGlzLmNhY2hlLnNsaWNlKDE2KVxuICAgIHJldHVybiBvdXRcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuU3BsaXR0ZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbGVuID0gMTYgLSB0aGlzLmNhY2hlLmxlbmd0aFxuICB2YXIgcGFkQnVmZiA9IG5ldyBCdWZmZXIobGVuKVxuXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIHBhZEJ1ZmYud3JpdGVVSW50OChsZW4sIGkpXG4gIH1cbiAgdmFyIG91dCA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuY2FjaGUsIHBhZEJ1ZmZdKVxuICByZXR1cm4gb3V0XG59XG52YXIgbW9kZWxpc3QgPSB7XG4gIEVDQjogcmVxdWlyZSgnLi9tb2Rlcy9lY2InKSxcbiAgQ0JDOiByZXF1aXJlKCcuL21vZGVzL2NiYycpLFxuICBDRkI6IHJlcXVpcmUoJy4vbW9kZXMvY2ZiJyksXG4gIENGQjg6IHJlcXVpcmUoJy4vbW9kZXMvY2ZiOCcpLFxuICBDRkIxOiByZXF1aXJlKCcuL21vZGVzL2NmYjEnKSxcbiAgT0ZCOiByZXF1aXJlKCcuL21vZGVzL29mYicpLFxuICBDVFI6IHJlcXVpcmUoJy4vbW9kZXMvY3RyJyksXG4gIEdDTTogcmVxdWlyZSgnLi9tb2Rlcy9jdHInKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDaXBoZXJpdiAoc3VpdGUsIHBhc3N3b3JkLCBpdikge1xuICB2YXIgY29uZmlnID0gbW9kZXNbc3VpdGUudG9Mb3dlckNhc2UoKV1cbiAgaWYgKCFjb25maWcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG4gIGlmICh0eXBlb2YgaXYgPT09ICdzdHJpbmcnKSB7XG4gICAgaXYgPSBuZXcgQnVmZmVyKGl2KVxuICB9XG4gIGlmICh0eXBlb2YgcGFzc3dvcmQgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFzc3dvcmQgPSBuZXcgQnVmZmVyKHBhc3N3b3JkKVxuICB9XG4gIGlmIChwYXNzd29yZC5sZW5ndGggIT09IGNvbmZpZy5rZXkgLyA4KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBrZXkgbGVuZ3RoICcgKyBwYXNzd29yZC5sZW5ndGgpXG4gIH1cbiAgaWYgKGl2Lmxlbmd0aCAhPT0gY29uZmlnLml2KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBpdiBsZW5ndGggJyArIGl2Lmxlbmd0aClcbiAgfVxuICBpZiAoY29uZmlnLnR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1DaXBoZXIobW9kZWxpc3RbY29uZmlnLm1vZGVdLCBwYXNzd29yZCwgaXYpXG4gIH0gZWxzZSBpZiAoY29uZmlnLnR5cGUgPT09ICdhdXRoJykge1xuICAgIHJldHVybiBuZXcgQXV0aENpcGhlcihtb2RlbGlzdFtjb25maWcubW9kZV0sIHBhc3N3b3JkLCBpdilcbiAgfVxuICByZXR1cm4gbmV3IENpcGhlcihtb2RlbGlzdFtjb25maWcubW9kZV0sIHBhc3N3b3JkLCBpdilcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNpcGhlciAoc3VpdGUsIHBhc3N3b3JkKSB7XG4gIHZhciBjb25maWcgPSBtb2Rlc1tzdWl0ZS50b0xvd2VyQ2FzZSgpXVxuICBpZiAoIWNvbmZpZykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc3VpdGUgdHlwZScpXG4gIH1cbiAgdmFyIGtleXMgPSBlYnRrKHBhc3N3b3JkLCBmYWxzZSwgY29uZmlnLmtleSwgY29uZmlnLml2KVxuICByZXR1cm4gY3JlYXRlQ2lwaGVyaXYoc3VpdGUsIGtleXMua2V5LCBrZXlzLml2KVxufVxuXG5leHBvcnRzLmNyZWF0ZUNpcGhlcml2ID0gY3JlYXRlQ2lwaGVyaXZcbmV4cG9ydHMuY3JlYXRlQ2lwaGVyID0gY3JlYXRlQ2lwaGVyXG4iLCJ2YXIgemVyb3MgPSBuZXcgQnVmZmVyKDE2KVxuemVyb3MuZmlsbCgwKVxubW9kdWxlLmV4cG9ydHMgPSBHSEFTSFxuZnVuY3Rpb24gR0hBU0ggKGtleSkge1xuICB0aGlzLmggPSBrZXlcbiAgdGhpcy5zdGF0ZSA9IG5ldyBCdWZmZXIoMTYpXG4gIHRoaXMuc3RhdGUuZmlsbCgwKVxuICB0aGlzLmNhY2hlID0gbmV3IEJ1ZmZlcignJylcbn1cbi8vIGZyb20gaHR0cDovL2JpdHdpc2VzaGlmdGxlZnQuZ2l0aHViLmlvL3NqY2wvZG9jL3N5bWJvbHMvc3JjL2NvcmVfZ2NtLmpzLmh0bWxcbi8vIGJ5IEp1aG8gVsOkaMOkLUhlcnR0dWFcbkdIQVNILnByb3RvdHlwZS5naGFzaCA9IGZ1bmN0aW9uIChibG9jaykge1xuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBibG9jay5sZW5ndGgpIHtcbiAgICB0aGlzLnN0YXRlW2ldIF49IGJsb2NrW2ldXG4gIH1cbiAgdGhpcy5fbXVsdGlwbHkoKVxufVxuXG5HSEFTSC5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgVmkgPSB0b0FycmF5KHRoaXMuaClcbiAgdmFyIFppID0gWzAsIDAsIDAsIDBdXG4gIHZhciBqLCB4aSwgbHNiX1ZpXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IDEyOCkge1xuICAgIHhpID0gKHRoaXMuc3RhdGVbfn4oaSAvIDgpXSAmICgxIDw8ICg3IC0gaSAlIDgpKSkgIT09IDBcbiAgICBpZiAoeGkpIHtcbiAgICAgIC8vIFpfaSsxID0gWl9pIF4gVl9pXG4gICAgICBaaSA9IHhvcihaaSwgVmkpXG4gICAgfVxuXG4gICAgLy8gU3RvcmUgdGhlIHZhbHVlIG9mIExTQihWX2kpXG4gICAgbHNiX1ZpID0gKFZpWzNdICYgMSkgIT09IDBcblxuICAgIC8vIFZfaSsxID0gVl9pID4+IDFcbiAgICBmb3IgKGogPSAzOyBqID4gMDsgai0tKSB7XG4gICAgICBWaVtqXSA9IChWaVtqXSA+Pj4gMSkgfCAoKFZpW2ogLSAxXSAmIDEpIDw8IDMxKVxuICAgIH1cbiAgICBWaVswXSA9IFZpWzBdID4+PiAxXG5cbiAgICAvLyBJZiBMU0IoVl9pKSBpcyAxLCBWX2krMSA9IChWX2kgPj4gMSkgXiBSXG4gICAgaWYgKGxzYl9WaSkge1xuICAgICAgVmlbMF0gPSBWaVswXSBeICgweGUxIDw8IDI0KVxuICAgIH1cbiAgfVxuICB0aGlzLnN0YXRlID0gZnJvbUFycmF5KFppKVxufVxuR0hBU0gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChidWYpIHtcbiAgdGhpcy5jYWNoZSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuY2FjaGUsIGJ1Zl0pXG4gIHZhciBjaHVua1xuICB3aGlsZSAodGhpcy5jYWNoZS5sZW5ndGggPj0gMTYpIHtcbiAgICBjaHVuayA9IHRoaXMuY2FjaGUuc2xpY2UoMCwgMTYpXG4gICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuc2xpY2UoMTYpXG4gICAgdGhpcy5naGFzaChjaHVuaylcbiAgfVxufVxuR0hBU0gucHJvdG90eXBlLmZpbmFsID0gZnVuY3Rpb24gKGFibCwgYmwpIHtcbiAgaWYgKHRoaXMuY2FjaGUubGVuZ3RoKSB7XG4gICAgdGhpcy5naGFzaChCdWZmZXIuY29uY2F0KFt0aGlzLmNhY2hlLCB6ZXJvc10sIDE2KSlcbiAgfVxuICB0aGlzLmdoYXNoKGZyb21BcnJheShbXG4gICAgMCwgYWJsLFxuICAgIDAsIGJsXG4gIF0pKVxuICByZXR1cm4gdGhpcy5zdGF0ZVxufVxuXG5mdW5jdGlvbiB0b0FycmF5IChidWYpIHtcbiAgcmV0dXJuIFtcbiAgICBidWYucmVhZFVJbnQzMkJFKDApLFxuICAgIGJ1Zi5yZWFkVUludDMyQkUoNCksXG4gICAgYnVmLnJlYWRVSW50MzJCRSg4KSxcbiAgICBidWYucmVhZFVJbnQzMkJFKDEyKVxuICBdXG59XG5mdW5jdGlvbiBmcm9tQXJyYXkgKG91dCkge1xuICBvdXQgPSBvdXQubWFwKGZpeHVwX3VpbnQzMilcbiAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoMTYpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFswXSwgMClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzFdLCA0KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMl0sIDgpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFszXSwgMTIpXG4gIHJldHVybiBidWZcbn1cbnZhciB1aW50X21heCA9IE1hdGgucG93KDIsIDMyKVxuZnVuY3Rpb24gZml4dXBfdWludDMyICh4KSB7XG4gIHZhciByZXQsIHhfcG9zXG4gIHJldCA9IHggPiB1aW50X21heCB8fCB4IDwgMCA/ICh4X3BvcyA9IE1hdGguYWJzKHgpICUgdWludF9tYXgsIHggPCAwID8gdWludF9tYXggLSB4X3BvcyA6IHhfcG9zKSA6IHhcbiAgcmV0dXJuIHJldFxufVxuZnVuY3Rpb24geG9yIChhLCBiKSB7XG4gIHJldHVybiBbXG4gICAgYVswXSBeIGJbMF0sXG4gICAgYVsxXSBeIGJbMV0sXG4gICAgYVsyXSBeIGJbMl0sXG4gICAgYVszXSBeIGJbM11cbiAgXVxufVxuIiwiZXhwb3J0c1snYWVzLTEyOC1lY2InXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAwLFxuICBtb2RlOiAnRUNCJyxcbiAgdHlwZTogJ2Jsb2NrJ1xufVxuZXhwb3J0c1snYWVzLTE5Mi1lY2InXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxOTIsXG4gIGl2OiAwLFxuICBtb2RlOiAnRUNCJyxcbiAgdHlwZTogJ2Jsb2NrJ1xufVxuZXhwb3J0c1snYWVzLTI1Ni1lY2InXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAwLFxuICBtb2RlOiAnRUNCJyxcbiAgdHlwZTogJ2Jsb2NrJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1jYmMnXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NCQycsXG4gIHR5cGU6ICdibG9jaydcbn1cbmV4cG9ydHNbJ2Flcy0xOTItY2JjJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTkyLFxuICBpdjogMTYsXG4gIG1vZGU6ICdDQkMnLFxuICB0eXBlOiAnYmxvY2snXG59XG5leHBvcnRzWydhZXMtMjU2LWNiYyddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDI1NixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0JDJyxcbiAgdHlwZTogJ2Jsb2NrJ1xufVxuZXhwb3J0c1snYWVzMTI4J10gPSBleHBvcnRzWydhZXMtMTI4LWNiYyddXG5leHBvcnRzWydhZXMxOTInXSA9IGV4cG9ydHNbJ2Flcy0xOTItY2JjJ11cbmV4cG9ydHNbJ2FlczI1NiddID0gZXhwb3J0c1snYWVzLTI1Ni1jYmMnXVxuZXhwb3J0c1snYWVzLTEyOC1jZmInXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NGQicsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTkyLWNmYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0ZCJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0yNTYtY2ZiJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMjU2LFxuICBpdjogMTYsXG4gIG1vZGU6ICdDRkInLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1jZmI4J10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTI4LFxuICBpdjogMTYsXG4gIG1vZGU6ICdDRkI4JyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0xOTItY2ZiOCddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0ZCOCcsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMjU2LWNmYjgnXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NGQjgnLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1jZmIxJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTI4LFxuICBpdjogMTYsXG4gIG1vZGU6ICdDRkIxJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0xOTItY2ZiMSddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0ZCMScsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMjU2LWNmYjEnXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NGQjEnLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1vZmInXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ09GQicsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTkyLW9mYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDE2LFxuICBtb2RlOiAnT0ZCJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0yNTYtb2ZiJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMjU2LFxuICBpdjogMTYsXG4gIG1vZGU6ICdPRkInLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1jdHInXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NUUicsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTkyLWN0ciddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ1RSJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0yNTYtY3RyJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMjU2LFxuICBpdjogMTYsXG4gIG1vZGU6ICdDVFInLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1nY20nXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxMixcbiAgbW9kZTogJ0dDTScsXG4gIHR5cGU6ICdhdXRoJ1xufVxuZXhwb3J0c1snYWVzLTE5Mi1nY20nXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxOTIsXG4gIGl2OiAxMixcbiAgbW9kZTogJ0dDTScsXG4gIHR5cGU6ICdhdXRoJ1xufVxuZXhwb3J0c1snYWVzLTI1Ni1nY20nXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAxMixcbiAgbW9kZTogJ0dDTScsXG4gIHR5cGU6ICdhdXRoJ1xufVxuIiwidmFyIHhvciA9IHJlcXVpcmUoJ2J1ZmZlci14b3InKVxuXG5leHBvcnRzLmVuY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgYmxvY2spIHtcbiAgdmFyIGRhdGEgPSB4b3IoYmxvY2ssIHNlbGYuX3ByZXYpXG5cbiAgc2VsZi5fcHJldiA9IHNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soZGF0YSlcbiAgcmV0dXJuIHNlbGYuX3ByZXZcbn1cblxuZXhwb3J0cy5kZWNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGJsb2NrKSB7XG4gIHZhciBwYWQgPSBzZWxmLl9wcmV2XG5cbiAgc2VsZi5fcHJldiA9IGJsb2NrXG4gIHZhciBvdXQgPSBzZWxmLl9jaXBoZXIuZGVjcnlwdEJsb2NrKGJsb2NrKVxuXG4gIHJldHVybiB4b3Iob3V0LCBwYWQpXG59XG4iLCJ2YXIgeG9yID0gcmVxdWlyZSgnYnVmZmVyLXhvcicpXG5cbmV4cG9ydHMuZW5jcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBkYXRhLCBkZWNyeXB0KSB7XG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKCcnKVxuICB2YXIgbGVuXG5cbiAgd2hpbGUgKGRhdGEubGVuZ3RoKSB7XG4gICAgaWYgKHNlbGYuX2NhY2hlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc2VsZi5fY2FjaGUgPSBzZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHNlbGYuX3ByZXYpXG4gICAgICBzZWxmLl9wcmV2ID0gbmV3IEJ1ZmZlcignJylcbiAgICB9XG5cbiAgICBpZiAoc2VsZi5fY2FjaGUubGVuZ3RoIDw9IGRhdGEubGVuZ3RoKSB7XG4gICAgICBsZW4gPSBzZWxmLl9jYWNoZS5sZW5ndGhcbiAgICAgIG91dCA9IEJ1ZmZlci5jb25jYXQoW291dCwgZW5jcnlwdFN0YXJ0KHNlbGYsIGRhdGEuc2xpY2UoMCwgbGVuKSwgZGVjcnlwdCldKVxuICAgICAgZGF0YSA9IGRhdGEuc2xpY2UobGVuKVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgPSBCdWZmZXIuY29uY2F0KFtvdXQsIGVuY3J5cHRTdGFydChzZWxmLCBkYXRhLCBkZWNyeXB0KV0pXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cbmZ1bmN0aW9uIGVuY3J5cHRTdGFydCAoc2VsZiwgZGF0YSwgZGVjcnlwdCkge1xuICB2YXIgbGVuID0gZGF0YS5sZW5ndGhcbiAgdmFyIG91dCA9IHhvcihkYXRhLCBzZWxmLl9jYWNoZSlcbiAgc2VsZi5fY2FjaGUgPSBzZWxmLl9jYWNoZS5zbGljZShsZW4pXG4gIHNlbGYuX3ByZXYgPSBCdWZmZXIuY29uY2F0KFtzZWxmLl9wcmV2LCBkZWNyeXB0ID8gZGF0YSA6IG91dF0pXG4gIHJldHVybiBvdXRcbn1cbiIsImZ1bmN0aW9uIGVuY3J5cHRCeXRlIChzZWxmLCBieXRlUGFyYW0sIGRlY3J5cHQpIHtcbiAgdmFyIHBhZFxuICB2YXIgaSA9IC0xXG4gIHZhciBsZW4gPSA4XG4gIHZhciBvdXQgPSAwXG4gIHZhciBiaXQsIHZhbHVlXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBwYWQgPSBzZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHNlbGYuX3ByZXYpXG4gICAgYml0ID0gKGJ5dGVQYXJhbSAmICgxIDw8ICg3IC0gaSkpKSA/IDB4ODAgOiAwXG4gICAgdmFsdWUgPSBwYWRbMF0gXiBiaXRcbiAgICBvdXQgKz0gKCh2YWx1ZSAmIDB4ODApID4+IChpICUgOCkpXG4gICAgc2VsZi5fcHJldiA9IHNoaWZ0SW4oc2VsZi5fcHJldiwgZGVjcnlwdCA/IGJpdCA6IHZhbHVlKVxuICB9XG4gIHJldHVybiBvdXRcbn1cbmV4cG9ydHMuZW5jcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBjaHVuaywgZGVjcnlwdCkge1xuICB2YXIgbGVuID0gY2h1bmsubGVuZ3RoXG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKGxlbilcbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgb3V0W2ldID0gZW5jcnlwdEJ5dGUoc2VsZiwgY2h1bmtbaV0sIGRlY3J5cHQpXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuZnVuY3Rpb24gc2hpZnRJbiAoYnVmZmVyLCB2YWx1ZSkge1xuICB2YXIgbGVuID0gYnVmZmVyLmxlbmd0aFxuICB2YXIgaSA9IC0xXG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKGJ1ZmZlci5sZW5ndGgpXG4gIGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW2J1ZmZlciwgbmV3IEJ1ZmZlcihbdmFsdWVdKV0pXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBvdXRbaV0gPSBidWZmZXJbaV0gPDwgMSB8IGJ1ZmZlcltpICsgMV0gPj4gKDcpXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuIiwiZnVuY3Rpb24gZW5jcnlwdEJ5dGUgKHNlbGYsIGJ5dGVQYXJhbSwgZGVjcnlwdCkge1xuICB2YXIgcGFkID0gc2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhzZWxmLl9wcmV2KVxuICB2YXIgb3V0ID0gcGFkWzBdIF4gYnl0ZVBhcmFtXG4gIHNlbGYuX3ByZXYgPSBCdWZmZXIuY29uY2F0KFtzZWxmLl9wcmV2LnNsaWNlKDEpLCBuZXcgQnVmZmVyKFtkZWNyeXB0ID8gYnl0ZVBhcmFtIDogb3V0XSldKVxuICByZXR1cm4gb3V0XG59XG5leHBvcnRzLmVuY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgY2h1bmssIGRlY3J5cHQpIHtcbiAgdmFyIGxlbiA9IGNodW5rLmxlbmd0aFxuICB2YXIgb3V0ID0gbmV3IEJ1ZmZlcihsZW4pXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIG91dFtpXSA9IGVuY3J5cHRCeXRlKHNlbGYsIGNodW5rW2ldLCBkZWNyeXB0KVxuICB9XG4gIHJldHVybiBvdXRcbn1cbiIsInZhciB4b3IgPSByZXF1aXJlKCdidWZmZXIteG9yJylcblxuZnVuY3Rpb24gaW5jcjMyIChpdikge1xuICB2YXIgbGVuID0gaXYubGVuZ3RoXG4gIHZhciBpdGVtXG4gIHdoaWxlIChsZW4tLSkge1xuICAgIGl0ZW0gPSBpdi5yZWFkVUludDgobGVuKVxuICAgIGlmIChpdGVtID09PSAyNTUpIHtcbiAgICAgIGl2LndyaXRlVUludDgoMCwgbGVuKVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtKytcbiAgICAgIGl2LndyaXRlVUludDgoaXRlbSwgbGVuKVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QmxvY2sgKHNlbGYpIHtcbiAgdmFyIG91dCA9IHNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soc2VsZi5fcHJldilcbiAgaW5jcjMyKHNlbGYuX3ByZXYpXG4gIHJldHVybiBvdXRcbn1cblxuZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGNodW5rKSB7XG4gIHdoaWxlIChzZWxmLl9jYWNoZS5sZW5ndGggPCBjaHVuay5sZW5ndGgpIHtcbiAgICBzZWxmLl9jYWNoZSA9IEJ1ZmZlci5jb25jYXQoW3NlbGYuX2NhY2hlLCBnZXRCbG9jayhzZWxmKV0pXG4gIH1cbiAgdmFyIHBhZCA9IHNlbGYuX2NhY2hlLnNsaWNlKDAsIGNodW5rLmxlbmd0aClcbiAgc2VsZi5fY2FjaGUgPSBzZWxmLl9jYWNoZS5zbGljZShjaHVuay5sZW5ndGgpXG4gIHJldHVybiB4b3IoY2h1bmssIHBhZClcbn1cbiIsImV4cG9ydHMuZW5jcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBibG9jaykge1xuICByZXR1cm4gc2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhibG9jaylcbn1cbmV4cG9ydHMuZGVjcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBibG9jaykge1xuICByZXR1cm4gc2VsZi5fY2lwaGVyLmRlY3J5cHRCbG9jayhibG9jaylcbn1cbiIsInZhciB4b3IgPSByZXF1aXJlKCdidWZmZXIteG9yJylcblxuZnVuY3Rpb24gZ2V0QmxvY2sgKHNlbGYpIHtcbiAgc2VsZi5fcHJldiA9IHNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soc2VsZi5fcHJldilcbiAgcmV0dXJuIHNlbGYuX3ByZXZcbn1cblxuZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGNodW5rKSB7XG4gIHdoaWxlIChzZWxmLl9jYWNoZS5sZW5ndGggPCBjaHVuay5sZW5ndGgpIHtcbiAgICBzZWxmLl9jYWNoZSA9IEJ1ZmZlci5jb25jYXQoW3NlbGYuX2NhY2hlLCBnZXRCbG9jayhzZWxmKV0pXG4gIH1cblxuICB2YXIgcGFkID0gc2VsZi5fY2FjaGUuc2xpY2UoMCwgY2h1bmsubGVuZ3RoKVxuICBzZWxmLl9jYWNoZSA9IHNlbGYuX2NhY2hlLnNsaWNlKGNodW5rLmxlbmd0aClcbiAgcmV0dXJuIHhvcihjaHVuaywgcGFkKVxufVxuIiwidmFyIGFlcyA9IHJlcXVpcmUoJy4vYWVzJylcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG5cbmluaGVyaXRzKFN0cmVhbUNpcGhlciwgVHJhbnNmb3JtKVxubW9kdWxlLmV4cG9ydHMgPSBTdHJlYW1DaXBoZXJcbmZ1bmN0aW9uIFN0cmVhbUNpcGhlciAobW9kZSwga2V5LCBpdiwgZGVjcnlwdCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3RyZWFtQ2lwaGVyKSkge1xuICAgIHJldHVybiBuZXcgU3RyZWFtQ2lwaGVyKG1vZGUsIGtleSwgaXYpXG4gIH1cbiAgVHJhbnNmb3JtLmNhbGwodGhpcylcbiAgdGhpcy5fY2lwaGVyID0gbmV3IGFlcy5BRVMoa2V5KVxuICB0aGlzLl9wcmV2ID0gbmV3IEJ1ZmZlcihpdi5sZW5ndGgpXG4gIHRoaXMuX2NhY2hlID0gbmV3IEJ1ZmZlcignJylcbiAgdGhpcy5fc2VjQ2FjaGUgPSBuZXcgQnVmZmVyKCcnKVxuICB0aGlzLl9kZWNyeXB0ID0gZGVjcnlwdFxuICBpdi5jb3B5KHRoaXMuX3ByZXYpXG4gIHRoaXMuX21vZGUgPSBtb2RlXG59XG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgcmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLCBjaHVuaywgdGhpcy5fZGVjcnlwdClcbn1cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuX2ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9jaXBoZXIuc2NydWIoKVxufVxuIiwidmFyIGVidGsgPSByZXF1aXJlKCdldnBfYnl0ZXN0b2tleScpXG52YXIgYWVzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1hZXMvYnJvd3NlcicpXG52YXIgREVTID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1kZXMnKVxudmFyIGRlc01vZGVzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1kZXMvbW9kZXMnKVxudmFyIGFlc01vZGVzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1hZXMvbW9kZXMnKVxuZnVuY3Rpb24gY3JlYXRlQ2lwaGVyIChzdWl0ZSwgcGFzc3dvcmQpIHtcbiAgdmFyIGtleUxlbiwgaXZMZW5cbiAgc3VpdGUgPSBzdWl0ZS50b0xvd2VyQ2FzZSgpXG4gIGlmIChhZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICBrZXlMZW4gPSBhZXNNb2Rlc1tzdWl0ZV0ua2V5XG4gICAgaXZMZW4gPSBhZXNNb2Rlc1tzdWl0ZV0uaXZcbiAgfSBlbHNlIGlmIChkZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICBrZXlMZW4gPSBkZXNNb2Rlc1tzdWl0ZV0ua2V5ICogOFxuICAgIGl2TGVuID0gZGVzTW9kZXNbc3VpdGVdLml2XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBzdWl0ZSB0eXBlJylcbiAgfVxuICB2YXIga2V5cyA9IGVidGsocGFzc3dvcmQsIGZhbHNlLCBrZXlMZW4sIGl2TGVuKVxuICByZXR1cm4gY3JlYXRlQ2lwaGVyaXYoc3VpdGUsIGtleXMua2V5LCBrZXlzLml2KVxufVxuZnVuY3Rpb24gY3JlYXRlRGVjaXBoZXIgKHN1aXRlLCBwYXNzd29yZCkge1xuICB2YXIga2V5TGVuLCBpdkxlblxuICBzdWl0ZSA9IHN1aXRlLnRvTG93ZXJDYXNlKClcbiAgaWYgKGFlc01vZGVzW3N1aXRlXSkge1xuICAgIGtleUxlbiA9IGFlc01vZGVzW3N1aXRlXS5rZXlcbiAgICBpdkxlbiA9IGFlc01vZGVzW3N1aXRlXS5pdlxuICB9IGVsc2UgaWYgKGRlc01vZGVzW3N1aXRlXSkge1xuICAgIGtleUxlbiA9IGRlc01vZGVzW3N1aXRlXS5rZXkgKiA4XG4gICAgaXZMZW4gPSBkZXNNb2Rlc1tzdWl0ZV0uaXZcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG4gIHZhciBrZXlzID0gZWJ0ayhwYXNzd29yZCwgZmFsc2UsIGtleUxlbiwgaXZMZW4pXG4gIHJldHVybiBjcmVhdGVEZWNpcGhlcml2KHN1aXRlLCBrZXlzLmtleSwga2V5cy5pdilcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2lwaGVyaXYgKHN1aXRlLCBrZXksIGl2KSB7XG4gIHN1aXRlID0gc3VpdGUudG9Mb3dlckNhc2UoKVxuICBpZiAoYWVzTW9kZXNbc3VpdGVdKSB7XG4gICAgcmV0dXJuIGFlcy5jcmVhdGVDaXBoZXJpdihzdWl0ZSwga2V5LCBpdilcbiAgfSBlbHNlIGlmIChkZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICByZXR1cm4gbmV3IERFUyh7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGl2OiBpdixcbiAgICAgIG1vZGU6IHN1aXRlXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVEZWNpcGhlcml2IChzdWl0ZSwga2V5LCBpdikge1xuICBzdWl0ZSA9IHN1aXRlLnRvTG93ZXJDYXNlKClcbiAgaWYgKGFlc01vZGVzW3N1aXRlXSkge1xuICAgIHJldHVybiBhZXMuY3JlYXRlRGVjaXBoZXJpdihzdWl0ZSwga2V5LCBpdilcbiAgfSBlbHNlIGlmIChkZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICByZXR1cm4gbmV3IERFUyh7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGl2OiBpdixcbiAgICAgIG1vZGU6IHN1aXRlLFxuICAgICAgZGVjcnlwdDogdHJ1ZVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBzdWl0ZSB0eXBlJylcbiAgfVxufVxuZXhwb3J0cy5jcmVhdGVDaXBoZXIgPSBleHBvcnRzLkNpcGhlciA9IGNyZWF0ZUNpcGhlclxuZXhwb3J0cy5jcmVhdGVDaXBoZXJpdiA9IGV4cG9ydHMuQ2lwaGVyaXYgPSBjcmVhdGVDaXBoZXJpdlxuZXhwb3J0cy5jcmVhdGVEZWNpcGhlciA9IGV4cG9ydHMuRGVjaXBoZXIgPSBjcmVhdGVEZWNpcGhlclxuZXhwb3J0cy5jcmVhdGVEZWNpcGhlcml2ID0gZXhwb3J0cy5EZWNpcGhlcml2ID0gY3JlYXRlRGVjaXBoZXJpdlxuZnVuY3Rpb24gZ2V0Q2lwaGVycyAoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhkZXNNb2RlcykuY29uY2F0KGFlcy5nZXRDaXBoZXJzKCkpXG59XG5leHBvcnRzLmxpc3RDaXBoZXJzID0gZXhwb3J0cy5nZXRDaXBoZXJzID0gZ2V0Q2lwaGVyc1xuIiwidmFyIENpcGhlckJhc2UgPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgZGVzID0gcmVxdWlyZSgnZGVzLmpzJylcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcblxudmFyIG1vZGVzID0ge1xuICAnZGVzLWVkZTMtY2JjJzogZGVzLkNCQy5pbnN0YW50aWF0ZShkZXMuRURFKSxcbiAgJ2Rlcy1lZGUzJzogZGVzLkVERSxcbiAgJ2Rlcy1lZGUtY2JjJzogZGVzLkNCQy5pbnN0YW50aWF0ZShkZXMuRURFKSxcbiAgJ2Rlcy1lZGUnOiBkZXMuRURFLFxuICAnZGVzLWNiYyc6IGRlcy5DQkMuaW5zdGFudGlhdGUoZGVzLkRFUyksXG4gICdkZXMtZWNiJzogZGVzLkRFU1xufVxubW9kZXMuZGVzID0gbW9kZXNbJ2Rlcy1jYmMnXVxubW9kZXMuZGVzMyA9IG1vZGVzWydkZXMtZWRlMy1jYmMnXVxubW9kdWxlLmV4cG9ydHMgPSBERVNcbmluaGVyaXRzKERFUywgQ2lwaGVyQmFzZSlcbmZ1bmN0aW9uIERFUyAob3B0cykge1xuICBDaXBoZXJCYXNlLmNhbGwodGhpcylcbiAgdmFyIG1vZGVOYW1lID0gb3B0cy5tb2RlLnRvTG93ZXJDYXNlKClcbiAgdmFyIG1vZGUgPSBtb2Rlc1ttb2RlTmFtZV1cbiAgdmFyIHR5cGVcbiAgaWYgKG9wdHMuZGVjcnlwdCkge1xuICAgIHR5cGUgPSAnZGVjcnlwdCdcbiAgfSBlbHNlIHtcbiAgICB0eXBlID0gJ2VuY3J5cHQnXG4gIH1cbiAgdmFyIGtleSA9IG9wdHMua2V5XG4gIGlmIChtb2RlTmFtZSA9PT0gJ2Rlcy1lZGUnIHx8IG1vZGVOYW1lID09PSAnZGVzLWVkZS1jYmMnKSB7XG4gICAga2V5ID0gQnVmZmVyLmNvbmNhdChba2V5LCBrZXkuc2xpY2UoMCwgOCldKVxuICB9XG4gIHZhciBpdiA9IG9wdHMuaXZcbiAgdGhpcy5fZGVzID0gbW9kZS5jcmVhdGUoe1xuICAgIGtleToga2V5LFxuICAgIGl2OiBpdixcbiAgICB0eXBlOiB0eXBlXG4gIH0pXG59XG5ERVMucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICByZXR1cm4gbmV3IEJ1ZmZlcih0aGlzLl9kZXMudXBkYXRlKGRhdGEpKVxufVxuREVTLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgQnVmZmVyKHRoaXMuX2Rlcy5maW5hbCgpKVxufVxuIiwiZXhwb3J0c1snZGVzLWVjYiddID0ge1xuICBrZXk6IDgsXG4gIGl2OiAwXG59XG5leHBvcnRzWydkZXMtY2JjJ10gPSBleHBvcnRzLmRlcyA9IHtcbiAga2V5OiA4LFxuICBpdjogOFxufVxuZXhwb3J0c1snZGVzLWVkZTMtY2JjJ10gPSBleHBvcnRzLmRlczMgPSB7XG4gIGtleTogMjQsXG4gIGl2OiA4XG59XG5leHBvcnRzWydkZXMtZWRlMyddID0ge1xuICBrZXk6IDI0LFxuICBpdjogMFxufVxuZXhwb3J0c1snZGVzLWVkZS1jYmMnXSA9IHtcbiAga2V5OiAxNixcbiAgaXY6IDhcbn1cbmV4cG9ydHNbJ2Rlcy1lZGUnXSA9IHtcbiAga2V5OiAxNixcbiAgaXY6IDBcbn1cbiIsInZhciBibiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgcmFuZG9tQnl0ZXMgPSByZXF1aXJlKCdyYW5kb21ieXRlcycpO1xubW9kdWxlLmV4cG9ydHMgPSBjcnQ7XG5mdW5jdGlvbiBibGluZChwcml2KSB7XG4gIHZhciByID0gZ2V0cihwcml2KTtcbiAgdmFyIGJsaW5kZXIgPSByLnRvUmVkKGJuLm1vbnQocHJpdi5tb2R1bHVzKSlcbiAgLnJlZFBvdyhuZXcgYm4ocHJpdi5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKTtcbiAgcmV0dXJuIHtcbiAgICBibGluZGVyOiBibGluZGVyLFxuICAgIHVuYmxpbmRlcjpyLmludm0ocHJpdi5tb2R1bHVzKVxuICB9O1xufVxuZnVuY3Rpb24gY3J0KG1zZywgcHJpdikge1xuICB2YXIgYmxpbmRzID0gYmxpbmQocHJpdik7XG4gIHZhciBsZW4gPSBwcml2Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO1xuICB2YXIgbW9kID0gYm4ubW9udChwcml2Lm1vZHVsdXMpO1xuICB2YXIgYmxpbmRlZCA9IG5ldyBibihtc2cpLm11bChibGluZHMuYmxpbmRlcikudW1vZChwcml2Lm1vZHVsdXMpO1xuICB2YXIgYzEgPSBibGluZGVkLnRvUmVkKGJuLm1vbnQocHJpdi5wcmltZTEpKTtcbiAgdmFyIGMyID0gYmxpbmRlZC50b1JlZChibi5tb250KHByaXYucHJpbWUyKSk7XG4gIHZhciBxaW52ID0gcHJpdi5jb2VmZmljaWVudDtcbiAgdmFyIHAgPSBwcml2LnByaW1lMTtcbiAgdmFyIHEgPSBwcml2LnByaW1lMjtcbiAgdmFyIG0xID0gYzEucmVkUG93KHByaXYuZXhwb25lbnQxKTtcbiAgdmFyIG0yID0gYzIucmVkUG93KHByaXYuZXhwb25lbnQyKTtcbiAgbTEgPSBtMS5mcm9tUmVkKCk7XG4gIG0yID0gbTIuZnJvbVJlZCgpO1xuICB2YXIgaCA9IG0xLmlzdWIobTIpLmltdWwocWludikudW1vZChwKTtcbiAgaC5pbXVsKHEpO1xuICBtMi5pYWRkKGgpO1xuICByZXR1cm4gbmV3IEJ1ZmZlcihtMi5pbXVsKGJsaW5kcy51bmJsaW5kZXIpLnVtb2QocHJpdi5tb2R1bHVzKS50b0FycmF5KGZhbHNlLCBsZW4pKTtcbn1cbmNydC5nZXRyID0gZ2V0cjtcbmZ1bmN0aW9uIGdldHIocHJpdikge1xuICB2YXIgbGVuID0gcHJpdi5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtcbiAgdmFyIHIgPSBuZXcgYm4ocmFuZG9tQnl0ZXMobGVuKSk7XG4gIHdoaWxlIChyLmNtcChwcml2Lm1vZHVsdXMpID49ICAwIHx8ICFyLnVtb2QocHJpdi5wcmltZTEpIHx8ICFyLnVtb2QocHJpdi5wcmltZTIpKSB7XG4gICAgciA9IG5ldyBibihyYW5kb21CeXRlcyhsZW4pKTtcbiAgfVxuICByZXR1cm4gcjtcbn1cbiIsIid1c2Ugc3RyaWN0J1xuZXhwb3J0c1snUlNBLVNIQTIyNCddID0gZXhwb3J0cy5zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiA9IHtcbiAgc2lnbjogJ3JzYScsXG4gIGhhc2g6ICdzaGEyMjQnLFxuICBpZDogbmV3IEJ1ZmZlcignMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMnLCAnaGV4Jylcbn1cbmV4cG9ydHNbJ1JTQS1TSEEyNTYnXSA9IGV4cG9ydHMuc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24gPSB7XG4gIHNpZ246ICdyc2EnLFxuICBoYXNoOiAnc2hhMjU2JyxcbiAgaWQ6IG5ldyBCdWZmZXIoJzMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwJywgJ2hleCcpXG59XG5leHBvcnRzWydSU0EtU0hBMzg0J10gPSBleHBvcnRzLnNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uID0ge1xuICBzaWduOiAncnNhJyxcbiAgaGFzaDogJ3NoYTM4NCcsXG4gIGlkOiBuZXcgQnVmZmVyKCczMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCcsICdoZXgnKVxufVxuZXhwb3J0c1snUlNBLVNIQTUxMiddID0gZXhwb3J0cy5zaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiA9IHtcbiAgc2lnbjogJ3JzYScsXG4gIGhhc2g6ICdzaGE1MTInLFxuICBpZDogbmV3IEJ1ZmZlcignMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAnLCAnaGV4Jylcbn1cbmV4cG9ydHNbJ1JTQS1TSEExJ10gPSB7XG4gIHNpZ246ICdyc2EnLFxuICBoYXNoOiAnc2hhMScsXG4gIGlkOiBuZXcgQnVmZmVyKCczMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQnLCAnaGV4Jylcbn1cbmV4cG9ydHNbJ2VjZHNhLXdpdGgtU0hBMSddID0ge1xuICBzaWduOiAnZWNkc2EnLFxuICBoYXNoOiAnc2hhMScsXG4gIGlkOiBuZXcgQnVmZmVyKCcnLCAnaGV4Jylcbn1cblxuZXhwb3J0cy5EU0EgPSBleHBvcnRzWydEU0EtU0hBMSddID0gZXhwb3J0c1snRFNBLVNIQSddID0ge1xuICBzaWduOiAnZHNhJyxcbiAgaGFzaDogJ3NoYTEnLFxuICBpZDogbmV3IEJ1ZmZlcignJywgJ2hleCcpXG59XG5leHBvcnRzWydEU0EtU0hBMjI0J10gPSBleHBvcnRzWydEU0EtV0lUSC1TSEEyMjQnXSA9IHtcbiAgc2lnbjogJ2RzYScsXG4gIGhhc2g6ICdzaGEyMjQnLFxuICBpZDogbmV3IEJ1ZmZlcignJywgJ2hleCcpXG59XG5leHBvcnRzWydEU0EtU0hBMjU2J10gPSBleHBvcnRzWydEU0EtV0lUSC1TSEEyNTYnXSA9IHtcbiAgc2lnbjogJ2RzYScsXG4gIGhhc2g6ICdzaGEyNTYnLFxuICBpZDogbmV3IEJ1ZmZlcignJywgJ2hleCcpXG59XG5leHBvcnRzWydEU0EtU0hBMzg0J10gPSBleHBvcnRzWydEU0EtV0lUSC1TSEEzODQnXSA9IHtcbiAgc2lnbjogJ2RzYScsXG4gIGhhc2g6ICdzaGEzODQnLFxuICBpZDogbmV3IEJ1ZmZlcignJywgJ2hleCcpXG59XG5leHBvcnRzWydEU0EtU0hBNTEyJ10gPSBleHBvcnRzWydEU0EtV0lUSC1TSEE1MTInXSA9IHtcbiAgc2lnbjogJ2RzYScsXG4gIGhhc2g6ICdzaGE1MTInLFxuICBpZDogbmV3IEJ1ZmZlcignJywgJ2hleCcpXG59XG5leHBvcnRzWydEU0EtUklQRU1EMTYwJ10gPSB7XG4gIHNpZ246ICdkc2EnLFxuICBoYXNoOiAncm1kMTYwJyxcbiAgaWQ6IG5ldyBCdWZmZXIoJycsICdoZXgnKVxufVxuZXhwb3J0c1snUlNBLVJJUEVNRDE2MCddID0gZXhwb3J0cy5yaXBlbWQxNjBXaXRoUlNBID0ge1xuICBzaWduOiAncnNhJyxcbiAgaGFzaDogJ3JtZDE2MCcsXG4gIGlkOiBuZXcgQnVmZmVyKCczMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQnLCAnaGV4Jylcbn1cbmV4cG9ydHNbJ1JTQS1NRDUnXSA9IGV4cG9ydHMubWQ1V2l0aFJTQUVuY3J5cHRpb24gPSB7XG4gIHNpZ246ICdyc2EnLFxuICBoYXNoOiAnbWQ1JyxcbiAgaWQ6IG5ldyBCdWZmZXIoJzMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCcsICdoZXgnKVxufVxuIiwidmFyIF9hbGdvcyA9IHJlcXVpcmUoJy4vYWxnb3MnKVxudmFyIGNyZWF0ZUhhc2ggPSByZXF1aXJlKCdjcmVhdGUtaGFzaCcpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vc2lnbicpXG52YXIgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcbnZhciB2ZXJpZnkgPSByZXF1aXJlKCcuL3ZlcmlmeScpXG5cbnZhciBhbGdvcyA9IHt9XG5PYmplY3Qua2V5cyhfYWxnb3MpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBhbGdvc1trZXldID0gYWxnb3Nba2V5LnRvTG93ZXJDYXNlKCldID0gX2FsZ29zW2tleV1cbn0pXG5cbmZ1bmN0aW9uIFNpZ24gKGFsZ29yaXRobSkge1xuICBzdHJlYW0uV3JpdGFibGUuY2FsbCh0aGlzKVxuXG4gIHZhciBkYXRhID0gYWxnb3NbYWxnb3JpdGhtXVxuICBpZiAoIWRhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbWVzc2FnZSBkaWdlc3QnKVxuICB9XG5cbiAgdGhpcy5faGFzaFR5cGUgPSBkYXRhLmhhc2hcbiAgdGhpcy5faGFzaCA9IGNyZWF0ZUhhc2goZGF0YS5oYXNoKVxuICB0aGlzLl90YWcgPSBkYXRhLmlkXG4gIHRoaXMuX3NpZ25UeXBlID0gZGF0YS5zaWduXG59XG5pbmhlcml0cyhTaWduLCBzdHJlYW0uV3JpdGFibGUpXG5cblNpZ24ucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIF93cml0ZSAoZGF0YSwgXywgZG9uZSkge1xuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKVxuICBkb25lKClcbn1cblxuU2lnbi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlIChkYXRhLCBlbmMpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIGRhdGEgPSBuZXcgQnVmZmVyKGRhdGEsIGVuYylcbiAgfVxuXG4gIHRoaXMuX2hhc2gudXBkYXRlKGRhdGEpXG4gIHJldHVybiB0aGlzXG59XG5cblNpZ24ucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduTWV0aG9kIChrZXksIGVuYykge1xuICB0aGlzLmVuZCgpXG4gIHZhciBoYXNoID0gdGhpcy5faGFzaC5kaWdlc3QoKVxuICB2YXIgc2lnID0gc2lnbihCdWZmZXIuY29uY2F0KFt0aGlzLl90YWcsIGhhc2hdKSwga2V5LCB0aGlzLl9oYXNoVHlwZSwgdGhpcy5fc2lnblR5cGUpXG5cbiAgcmV0dXJuIGVuYyA/IHNpZy50b1N0cmluZyhlbmMpIDogc2lnXG59XG5cbmZ1bmN0aW9uIFZlcmlmeSAoYWxnb3JpdGhtKSB7XG4gIHN0cmVhbS5Xcml0YWJsZS5jYWxsKHRoaXMpXG5cbiAgdmFyIGRhdGEgPSBhbGdvc1thbGdvcml0aG1dXG4gIGlmICghZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXNzYWdlIGRpZ2VzdCcpXG4gIH1cblxuICB0aGlzLl9oYXNoID0gY3JlYXRlSGFzaChkYXRhLmhhc2gpXG4gIHRoaXMuX3RhZyA9IGRhdGEuaWRcbiAgdGhpcy5fc2lnblR5cGUgPSBkYXRhLnNpZ25cbn1cbmluaGVyaXRzKFZlcmlmeSwgc3RyZWFtLldyaXRhYmxlKVxuXG5WZXJpZnkucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIF93cml0ZSAoZGF0YSwgXywgZG9uZSkge1xuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKVxuXG4gIGRvbmUoKVxufVxuXG5WZXJpZnkucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSAoZGF0YSwgZW5jKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICBkYXRhID0gbmV3IEJ1ZmZlcihkYXRhLCBlbmMpXG4gIH1cblxuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKVxuICByZXR1cm4gdGhpc1xufVxuXG5WZXJpZnkucHJvdG90eXBlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeU1ldGhvZCAoa2V5LCBzaWcsIGVuYykge1xuICBpZiAodHlwZW9mIHNpZyA9PT0gJ3N0cmluZycpIHtcbiAgICBzaWcgPSBuZXcgQnVmZmVyKHNpZywgZW5jKVxuICB9XG5cbiAgdGhpcy5lbmQoKVxuICB2YXIgaGFzaCA9IHRoaXMuX2hhc2guZGlnZXN0KClcblxuICByZXR1cm4gdmVyaWZ5KHNpZywgQnVmZmVyLmNvbmNhdChbdGhpcy5fdGFnLCBoYXNoXSksIGtleSwgdGhpcy5fc2lnblR5cGUpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNpZ24gKGFsZ29yaXRobSkge1xuICByZXR1cm4gbmV3IFNpZ24oYWxnb3JpdGhtKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVWZXJpZnkgKGFsZ29yaXRobSkge1xuICByZXR1cm4gbmV3IFZlcmlmeShhbGdvcml0aG0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBTaWduOiBjcmVhdGVTaWduLFxuICBWZXJpZnk6IGNyZWF0ZVZlcmlmeSxcbiAgY3JlYXRlU2lnbjogY3JlYXRlU2lnbixcbiAgY3JlYXRlVmVyaWZ5OiBjcmVhdGVWZXJpZnlcbn1cbiIsIid1c2Ugc3RyaWN0J1xuZXhwb3J0c1snMS4zLjEzMi4wLjEwJ10gPSAnc2VjcDI1NmsxJ1xuXG5leHBvcnRzWycxLjMuMTMyLjAuMzMnXSA9ICdwMjI0J1xuXG5leHBvcnRzWycxLjIuODQwLjEwMDQ1LjMuMS4xJ10gPSAncDE5MidcblxuZXhwb3J0c1snMS4yLjg0MC4xMDA0NS4zLjEuNyddID0gJ3AyNTYnXG5cbmV4cG9ydHNbJzEuMy4xMzIuMC4zNCddID0gJ3AzODQnXG5cbmV4cG9ydHNbJzEuMy4xMzIuMC4zNSddID0gJ3A1MjEnXG4iLCIvLyBtdWNoIG9mIHRoaXMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvc2VsZi1zaWduZWQvYmxvYi9naC1wYWdlcy9saWIvcnNhLmpzXG52YXIgY3JlYXRlSG1hYyA9IHJlcXVpcmUoJ2NyZWF0ZS1obWFjJylcbnZhciBjcnQgPSByZXF1aXJlKCdicm93c2VyaWZ5LXJzYScpXG52YXIgY3VydmVzID0gcmVxdWlyZSgnLi9jdXJ2ZXMnKVxudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnZWxsaXB0aWMnKVxudmFyIHBhcnNlS2V5cyA9IHJlcXVpcmUoJ3BhcnNlLWFzbjEnKVxuXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpXG52YXIgRUMgPSBlbGxpcHRpYy5lY1xuXG5mdW5jdGlvbiBzaWduIChoYXNoLCBrZXksIGhhc2hUeXBlLCBzaWduVHlwZSkge1xuICB2YXIgcHJpdiA9IHBhcnNlS2V5cyhrZXkpXG4gIGlmIChwcml2LmN1cnZlKSB7XG4gICAgaWYgKHNpZ25UeXBlICE9PSAnZWNkc2EnKSB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHByaXZhdGUga2V5IHR5cGUnKVxuXG4gICAgcmV0dXJuIGVjU2lnbihoYXNoLCBwcml2KVxuICB9IGVsc2UgaWYgKHByaXYudHlwZSA9PT0gJ2RzYScpIHtcbiAgICBpZiAoc2lnblR5cGUgIT09ICdkc2EnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHByaXZhdGUga2V5IHR5cGUnKVxuICAgIH1cbiAgICByZXR1cm4gZHNhU2lnbihoYXNoLCBwcml2LCBoYXNoVHlwZSlcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnblR5cGUgIT09ICdyc2EnKSB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHByaXZhdGUga2V5IHR5cGUnKVxuICB9XG5cbiAgdmFyIGxlbiA9IHByaXYubW9kdWx1cy5ieXRlTGVuZ3RoKClcbiAgdmFyIHBhZCA9IFsgMCwgMSBdXG4gIHdoaWxlIChoYXNoLmxlbmd0aCArIHBhZC5sZW5ndGggKyAxIDwgbGVuKSB7XG4gICAgcGFkLnB1c2goMHhmZilcbiAgfVxuICBwYWQucHVzaCgweDAwKVxuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBoYXNoLmxlbmd0aCkge1xuICAgIHBhZC5wdXNoKGhhc2hbaV0pXG4gIH1cblxuICB2YXIgb3V0ID0gY3J0KHBhZCwgcHJpdilcbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiBlY1NpZ24gKGhhc2gsIHByaXYpIHtcbiAgdmFyIGN1cnZlSWQgPSBjdXJ2ZXNbcHJpdi5jdXJ2ZS5qb2luKCcuJyldXG4gIGlmICghY3VydmVJZCkgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGN1cnZlICcgKyBwcml2LmN1cnZlLmpvaW4oJy4nKSlcblxuICB2YXIgY3VydmUgPSBuZXcgRUMoY3VydmVJZClcbiAgdmFyIGtleSA9IGN1cnZlLmdlbktleVBhaXIoKVxuXG4gIGtleS5faW1wb3J0UHJpdmF0ZShwcml2LnByaXZhdGVLZXkpXG4gIHZhciBvdXQgPSBrZXkuc2lnbihoYXNoKVxuXG4gIHJldHVybiBuZXcgQnVmZmVyKG91dC50b0RFUigpKVxufVxuXG5mdW5jdGlvbiBkc2FTaWduIChoYXNoLCBwcml2LCBhbGdvKSB7XG4gIHZhciB4ID0gcHJpdi5wYXJhbXMucHJpdl9rZXlcbiAgdmFyIHAgPSBwcml2LnBhcmFtcy5wXG4gIHZhciBxID0gcHJpdi5wYXJhbXMucVxuICB2YXIgZyA9IHByaXYucGFyYW1zLmdcbiAgdmFyIHIgPSBuZXcgQk4oMClcbiAgdmFyIGtcbiAgdmFyIEggPSBiaXRzMmludChoYXNoLCBxKS5tb2QocSlcbiAgdmFyIHMgPSBmYWxzZVxuICB2YXIga3YgPSBnZXRLZXkoeCwgcSwgaGFzaCwgYWxnbylcbiAgd2hpbGUgKHMgPT09IGZhbHNlKSB7XG4gICAgayA9IG1ha2VLZXkocSwga3YsIGFsZ28pXG4gICAgciA9IG1ha2VSKGcsIGssIHAsIHEpXG4gICAgcyA9IGsuaW52bShxKS5pbXVsKEguYWRkKHgubXVsKHIpKSkubW9kKHEpXG4gICAgaWYgKCFzLmNtcG4oMCkpIHtcbiAgICAgIHMgPSBmYWxzZVxuICAgICAgciA9IG5ldyBCTigwKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdG9ERVIociwgcylcbn1cblxuZnVuY3Rpb24gdG9ERVIgKHIsIHMpIHtcbiAgciA9IHIudG9BcnJheSgpXG4gIHMgPSBzLnRvQXJyYXkoKVxuXG4gIC8vIFBhZCB2YWx1ZXNcbiAgaWYgKHJbMF0gJiAweDgwKSB7XG4gICAgciA9IFsgMCBdLmNvbmNhdChyKVxuICB9XG4gIC8vIFBhZCB2YWx1ZXNcbiAgaWYgKHNbMF0gJiAweDgwKSB7XG4gICAgcyA9IFswXS5jb25jYXQocylcbiAgfVxuXG4gIHZhciB0b3RhbCA9IHIubGVuZ3RoICsgcy5sZW5ndGggKyA0XG4gIHZhciByZXMgPSBbIDB4MzAsIHRvdGFsLCAweDAyLCByLmxlbmd0aCBdXG4gIHJlcyA9IHJlcy5jb25jYXQociwgWyAweDAyLCBzLmxlbmd0aCBdLCBzKVxuICByZXR1cm4gbmV3IEJ1ZmZlcihyZXMpXG59XG5cbmZ1bmN0aW9uIGdldEtleSAoeCwgcSwgaGFzaCwgYWxnbykge1xuICB4ID0gbmV3IEJ1ZmZlcih4LnRvQXJyYXkoKSlcbiAgaWYgKHgubGVuZ3RoIDwgcS5ieXRlTGVuZ3RoKCkpIHtcbiAgICB2YXIgemVyb3MgPSBuZXcgQnVmZmVyKHEuYnl0ZUxlbmd0aCgpIC0geC5sZW5ndGgpXG4gICAgemVyb3MuZmlsbCgwKVxuICAgIHggPSBCdWZmZXIuY29uY2F0KFt6ZXJvcywgeF0pXG4gIH1cbiAgdmFyIGhsZW4gPSBoYXNoLmxlbmd0aFxuICB2YXIgaGJpdHMgPSBiaXRzMm9jdGV0cyhoYXNoLCBxKVxuICB2YXIgdiA9IG5ldyBCdWZmZXIoaGxlbilcbiAgdi5maWxsKDEpXG4gIHZhciBrID0gbmV3IEJ1ZmZlcihobGVuKVxuICBrLmZpbGwoMClcbiAgayA9IGNyZWF0ZUhtYWMoYWxnbywgaylcbiAgICAudXBkYXRlKHYpXG4gICAgLnVwZGF0ZShuZXcgQnVmZmVyKFswXSkpXG4gICAgLnVwZGF0ZSh4KVxuICAgIC51cGRhdGUoaGJpdHMpXG4gICAgLmRpZ2VzdCgpXG4gIHYgPSBjcmVhdGVIbWFjKGFsZ28sIGspXG4gICAgLnVwZGF0ZSh2KVxuICAgIC5kaWdlc3QoKVxuICBrID0gY3JlYXRlSG1hYyhhbGdvLCBrKVxuICAgIC51cGRhdGUodilcbiAgICAudXBkYXRlKG5ldyBCdWZmZXIoWzFdKSlcbiAgICAudXBkYXRlKHgpXG4gICAgLnVwZGF0ZShoYml0cylcbiAgICAuZGlnZXN0KClcbiAgdiA9IGNyZWF0ZUhtYWMoYWxnbywgaylcbiAgICAudXBkYXRlKHYpXG4gICAgLmRpZ2VzdCgpXG4gIHJldHVybiB7XG4gICAgazogayxcbiAgICB2OiB2XG4gIH1cbn1cblxuZnVuY3Rpb24gYml0czJpbnQgKG9iaXRzLCBxKSB7XG4gIHZhciBiaXRzID0gbmV3IEJOKG9iaXRzKVxuICB2YXIgc2hpZnQgPSAob2JpdHMubGVuZ3RoIDw8IDMpIC0gcS5iaXRMZW5ndGgoKVxuICBpZiAoc2hpZnQgPiAwKSB7XG4gICAgYml0cy5pc2hybihzaGlmdClcbiAgfVxuICByZXR1cm4gYml0c1xufVxuXG5mdW5jdGlvbiBiaXRzMm9jdGV0cyAoYml0cywgcSkge1xuICBiaXRzID0gYml0czJpbnQoYml0cywgcSlcbiAgYml0cyA9IGJpdHMubW9kKHEpXG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKGJpdHMudG9BcnJheSgpKVxuICBpZiAob3V0Lmxlbmd0aCA8IHEuYnl0ZUxlbmd0aCgpKSB7XG4gICAgdmFyIHplcm9zID0gbmV3IEJ1ZmZlcihxLmJ5dGVMZW5ndGgoKSAtIG91dC5sZW5ndGgpXG4gICAgemVyb3MuZmlsbCgwKVxuICAgIG91dCA9IEJ1ZmZlci5jb25jYXQoW3plcm9zLCBvdXRdKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gbWFrZUtleSAocSwga3YsIGFsZ28pIHtcbiAgdmFyIHQsIGtcblxuICBkbyB7XG4gICAgdCA9IG5ldyBCdWZmZXIoJycpXG5cbiAgICB3aGlsZSAodC5sZW5ndGggKiA4IDwgcS5iaXRMZW5ndGgoKSkge1xuICAgICAga3YudiA9IGNyZWF0ZUhtYWMoYWxnbywga3YuaylcbiAgICAgICAgLnVwZGF0ZShrdi52KVxuICAgICAgICAuZGlnZXN0KClcbiAgICAgIHQgPSBCdWZmZXIuY29uY2F0KFt0LCBrdi52XSlcbiAgICB9XG5cbiAgICBrID0gYml0czJpbnQodCwgcSlcbiAgICBrdi5rID0gY3JlYXRlSG1hYyhhbGdvLCBrdi5rKVxuICAgICAgLnVwZGF0ZShrdi52KVxuICAgICAgLnVwZGF0ZShuZXcgQnVmZmVyKFswXSkpXG4gICAgICAuZGlnZXN0KClcbiAgICBrdi52ID0gY3JlYXRlSG1hYyhhbGdvLCBrdi5rKVxuICAgICAgLnVwZGF0ZShrdi52KVxuICAgICAgLmRpZ2VzdCgpXG4gIH0gd2hpbGUgKGsuY21wKHEpICE9PSAtMSlcblxuICByZXR1cm4ga1xufVxuXG5mdW5jdGlvbiBtYWtlUiAoZywgaywgcCwgcSkge1xuICByZXR1cm4gZy50b1JlZChCTi5tb250KHApKS5yZWRQb3coaykuZnJvbVJlZCgpLm1vZChxKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNpZ25cbm1vZHVsZS5leHBvcnRzLmdldEtleSA9IGdldEtleVxubW9kdWxlLmV4cG9ydHMubWFrZUtleSA9IG1ha2VLZXlcbiIsIi8vIG11Y2ggb2YgdGhpcyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9zZWxmLXNpZ25lZC9ibG9iL2doLXBhZ2VzL2xpYi9yc2EuanNcbnZhciBjdXJ2ZXMgPSByZXF1aXJlKCcuL2N1cnZlcycpXG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCdlbGxpcHRpYycpXG52YXIgcGFyc2VLZXlzID0gcmVxdWlyZSgncGFyc2UtYXNuMScpXG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJylcbnZhciBFQyA9IGVsbGlwdGljLmVjXG5cbmZ1bmN0aW9uIHZlcmlmeSAoc2lnLCBoYXNoLCBrZXksIHNpZ25UeXBlKSB7XG4gIHZhciBwdWIgPSBwYXJzZUtleXMoa2V5KVxuICBpZiAocHViLnR5cGUgPT09ICdlYycpIHtcbiAgICBpZiAoc2lnblR5cGUgIT09ICdlY2RzYScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignd3JvbmcgcHVibGljIGtleSB0eXBlJylcbiAgICB9XG4gICAgcmV0dXJuIGVjVmVyaWZ5KHNpZywgaGFzaCwgcHViKVxuICB9IGVsc2UgaWYgKHB1Yi50eXBlID09PSAnZHNhJykge1xuICAgIGlmIChzaWduVHlwZSAhPT0gJ2RzYScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignd3JvbmcgcHVibGljIGtleSB0eXBlJylcbiAgICB9XG4gICAgcmV0dXJuIGRzYVZlcmlmeShzaWcsIGhhc2gsIHB1YilcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnblR5cGUgIT09ICdyc2EnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHB1YmxpYyBrZXkgdHlwZScpXG4gICAgfVxuICB9XG4gIHZhciBsZW4gPSBwdWIubW9kdWx1cy5ieXRlTGVuZ3RoKClcbiAgdmFyIHBhZCA9IFsgMSBdXG4gIHZhciBwYWROdW0gPSAwXG4gIHdoaWxlIChoYXNoLmxlbmd0aCArIHBhZC5sZW5ndGggKyAyIDwgbGVuKSB7XG4gICAgcGFkLnB1c2goMHhmZilcbiAgICBwYWROdW0rK1xuICB9XG4gIHBhZC5wdXNoKDB4MDApXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGhhc2gubGVuZ3RoKSB7XG4gICAgcGFkLnB1c2goaGFzaFtpXSlcbiAgfVxuICBwYWQgPSBuZXcgQnVmZmVyKHBhZClcbiAgdmFyIHJlZCA9IEJOLm1vbnQocHViLm1vZHVsdXMpXG4gIHNpZyA9IG5ldyBCTihzaWcpLnRvUmVkKHJlZClcblxuICBzaWcgPSBzaWcucmVkUG93KG5ldyBCTihwdWIucHVibGljRXhwb25lbnQpKVxuXG4gIHNpZyA9IG5ldyBCdWZmZXIoc2lnLmZyb21SZWQoKS50b0FycmF5KCkpXG4gIHZhciBvdXQgPSAwXG4gIGlmIChwYWROdW0gPCA4KSB7XG4gICAgb3V0ID0gMVxuICB9XG4gIGxlbiA9IE1hdGgubWluKHNpZy5sZW5ndGgsIHBhZC5sZW5ndGgpXG4gIGlmIChzaWcubGVuZ3RoICE9PSBwYWQubGVuZ3RoKSB7XG4gICAgb3V0ID0gMVxuICB9XG5cbiAgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBvdXQgfD0gKHNpZ1tpXSBeIHBhZFtpXSlcbiAgfVxuICByZXR1cm4gb3V0ID09PSAwXG59XG5cbmZ1bmN0aW9uIGVjVmVyaWZ5IChzaWcsIGhhc2gsIHB1Yikge1xuICB2YXIgY3VydmVJZCA9IGN1cnZlc1twdWIuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbignLicpXVxuICBpZiAoIWN1cnZlSWQpIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjdXJ2ZSAnICsgcHViLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oJy4nKSlcblxuICB2YXIgY3VydmUgPSBuZXcgRUMoY3VydmVJZClcbiAgdmFyIHB1YmtleSA9IHB1Yi5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGFcblxuICByZXR1cm4gY3VydmUudmVyaWZ5KGhhc2gsIHNpZywgcHVia2V5KVxufVxuXG5mdW5jdGlvbiBkc2FWZXJpZnkgKHNpZywgaGFzaCwgcHViKSB7XG4gIHZhciBwID0gcHViLmRhdGEucFxuICB2YXIgcSA9IHB1Yi5kYXRhLnFcbiAgdmFyIGcgPSBwdWIuZGF0YS5nXG4gIHZhciB5ID0gcHViLmRhdGEucHViX2tleVxuICB2YXIgdW5wYWNrZWQgPSBwYXJzZUtleXMuc2lnbmF0dXJlLmRlY29kZShzaWcsICdkZXInKVxuICB2YXIgcyA9IHVucGFja2VkLnNcbiAgdmFyIHIgPSB1bnBhY2tlZC5yXG4gIGNoZWNrVmFsdWUocywgcSlcbiAgY2hlY2tWYWx1ZShyLCBxKVxuICB2YXIgbW9udHAgPSBCTi5tb250KHApXG4gIHZhciB3ID0gcy5pbnZtKHEpXG4gIHZhciB2ID0gZy50b1JlZChtb250cClcbiAgICAucmVkUG93KG5ldyBCTihoYXNoKS5tdWwodykubW9kKHEpKVxuICAgIC5mcm9tUmVkKClcbiAgICAubXVsKFxuICAgICAgeS50b1JlZChtb250cClcbiAgICAgICAgLnJlZFBvdyhyLm11bCh3KS5tb2QocSkpXG4gICAgICAgIC5mcm9tUmVkKClcbiAgKS5tb2QocCkubW9kKHEpXG4gIHJldHVybiAhdi5jbXAocilcbn1cblxuZnVuY3Rpb24gY2hlY2tWYWx1ZSAoYiwgcSkge1xuICBpZiAoYi5jbXBuKDApIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2lnJylcbiAgfVxuICBpZiAoYi5jbXAocSkgPj0gcSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzaWcnKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyaWZ5XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHhvciAoYSwgYikge1xuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKVxuICB2YXIgYnVmZmVyID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGJ1ZmZlcltpXSA9IGFbaV0gXiBiW2ldXG4gIH1cblxuICByZXR1cm4gYnVmZmVyXG59XG4iLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbnZhciByb290UGFyZW50ID0ge31cblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgVXNlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogRHVlIHRvIHZhcmlvdXMgYnJvd3NlciBidWdzLCBzb21ldGltZXMgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHVzZWQgZXZlblxuICogd2hlbiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0eXBlZCBhcnJheXMuXG4gKlxuICogTm90ZTpcbiAqXG4gKiAgIC0gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWAgaW5zdGFuY2VzLFxuICogICAgIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4LlxuICpcbiAqICAgLSBDaHJvbWUgOS0xMCBpcyBtaXNzaW5nIHRoZSBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uLlxuICpcbiAqICAgLSBJRTEwIGhhcyBhIGJyb2tlbiBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYXJyYXlzIG9mXG4gKiAgICAgaW5jb3JyZWN0IGxlbmd0aCBpbiBzb21lIHNpdHVhdGlvbnMuXG5cbiAqIFdlIGRldGVjdCB0aGVzZSBidWdneSBicm93c2VycyBhbmQgc2V0IGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGAgdG8gYGZhbHNlYCBzbyB0aGV5XG4gKiBnZXQgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgc2xvd2VyIGJ1dCBiZWhhdmVzIGNvcnJlY3RseS5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVCAhPT0gdW5kZWZpbmVkXG4gID8gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgOiB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuZm9vID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgLy8gQXZvaWQgZ29pbmcgdGhyb3VnaCBhbiBBcmd1bWVudHNBZGFwdG9yVHJhbXBvbGluZSBpbiB0aGUgY29tbW9uIGNhc2UuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSByZXR1cm4gbmV3IEJ1ZmZlcihhcmcsIGFyZ3VtZW50c1sxXSlcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcihhcmcpXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpcy5sZW5ndGggPSAwXG4gICAgdGhpcy5wYXJlbnQgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZnJvbU51bWJlcih0aGlzLCBhcmcpXG4gIH1cblxuICAvLyBTbGlnaHRseSBsZXNzIGNvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGlzLCBhcmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogJ3V0ZjgnKVxuICB9XG5cbiAgLy8gVW51c3VhbC5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhpcywgYXJnKVxufVxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tTnVtYmVyICh0aGF0LCBsZW5ndGgpIHtcbiAgdGhhdCA9IGFsbG9jYXRlKHRoYXQsIGxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChsZW5ndGgpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIC8vIEFzc3VtcHRpb246IGJ5dGVMZW5ndGgoKSByZXR1cm4gdmFsdWUgaXMgYWx3YXlzIDwga01heExlbmd0aC5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBhbGxvY2F0ZSh0aGF0LCBsZW5ndGgpXG5cbiAgdGhhdC53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmplY3QpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmplY3QpKSByZXR1cm4gZnJvbUJ1ZmZlcih0aGF0LCBvYmplY3QpXG5cbiAgaWYgKGlzQXJyYXkob2JqZWN0KSkgcmV0dXJuIGZyb21BcnJheSh0aGF0LCBvYmplY3QpXG5cbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbXVzdCBzdGFydCB3aXRoIG51bWJlciwgYnVmZmVyLCBhcnJheSBvciBzdHJpbmcnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAob2JqZWN0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gZnJvbVR5cGVkQXJyYXkodGhhdCwgb2JqZWN0KVxuICAgIH1cbiAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodGhhdCwgb2JqZWN0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChvYmplY3QubGVuZ3RoKSByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmplY3QpXG5cbiAgcmV0dXJuIGZyb21Kc29uT2JqZWN0KHRoYXQsIG9iamVjdClcbn1cblxuZnVuY3Rpb24gZnJvbUJ1ZmZlciAodGhhdCwgYnVmZmVyKSB7XG4gIHZhciBsZW5ndGggPSBjaGVja2VkKGJ1ZmZlci5sZW5ndGgpIHwgMFxuICB0aGF0ID0gYWxsb2NhdGUodGhhdCwgbGVuZ3RoKVxuICBidWZmZXIuY29weSh0aGF0LCAwLCAwLCBsZW5ndGgpXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheSAodGhhdCwgYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGFsbG9jYXRlKHRoYXQsIGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoYXRbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8vIER1cGxpY2F0ZSBvZiBmcm9tQXJyYXkoKSB0byBrZWVwIGZyb21BcnJheSgpIG1vbm9tb3JwaGljLlxuZnVuY3Rpb24gZnJvbVR5cGVkQXJyYXkgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBhbGxvY2F0ZSh0aGF0LCBsZW5ndGgpXG4gIC8vIFRydW5jYXRpbmcgdGhlIGVsZW1lbnRzIGlzIHByb2JhYmx5IG5vdCB3aGF0IHBlb3BsZSBleHBlY3QgZnJvbSB0eXBlZFxuICAvLyBhcnJheXMgd2l0aCBCWVRFU19QRVJfRUxFTUVOVCA+IDEgYnV0IGl0J3MgY29tcGF0aWJsZSB3aXRoIHRoZSBiZWhhdmlvclxuICAvLyBvZiB0aGUgb2xkIEJ1ZmZlciBjb25zdHJ1Y3Rvci5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoYXRbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAodGhhdCwgYXJyYXkpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbVR5cGVkQXJyYXkodGhhdCwgbmV3IFVpbnQ4QXJyYXkoYXJyYXkpKVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBhbGxvY2F0ZSh0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vLyBEZXNlcmlhbGl6ZSB7IHR5cGU6ICdCdWZmZXInLCBkYXRhOiBbMSwyLDMsLi4uXSB9IGludG8gYSBCdWZmZXIgb2JqZWN0LlxuLy8gUmV0dXJucyBhIHplcm8tbGVuZ3RoIGJ1ZmZlciBmb3IgaW5wdXRzIHRoYXQgZG9uJ3QgY29uZm9ybSB0byB0aGUgc3BlYy5cbmZ1bmN0aW9uIGZyb21Kc29uT2JqZWN0ICh0aGF0LCBvYmplY3QpIHtcbiAgdmFyIGFycmF5XG4gIHZhciBsZW5ndGggPSAwXG5cbiAgaWYgKG9iamVjdC50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iamVjdC5kYXRhKSkge1xuICAgIGFycmF5ID0gb2JqZWN0LmRhdGFcbiAgICBsZW5ndGggPSBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIH1cbiAgdGhhdCA9IGFsbG9jYXRlKHRoYXQsIGxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbn0gZWxzZSB7XG4gIC8vIHByZS1zZXQgZm9yIHZhbHVlcyB0aGF0IG1heSBleGlzdCBpbiB0aGUgZnV0dXJlXG4gIEJ1ZmZlci5wcm90b3R5cGUubGVuZ3RoID0gdW5kZWZpbmVkXG4gIEJ1ZmZlci5wcm90b3R5cGUucGFyZW50ID0gdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGFsbG9jYXRlICh0aGF0LCBsZW5ndGgpIHtcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdC5sZW5ndGggPSBsZW5ndGhcbiAgfVxuXG4gIHZhciBmcm9tUG9vbCA9IGxlbmd0aCAhPT0gMCAmJiBsZW5ndGggPD0gQnVmZmVyLnBvb2xTaXplID4+PiAxXG4gIGlmIChmcm9tUG9vbCkgdGhhdC5wYXJlbnQgPSByb290UGFyZW50XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChzdWJqZWN0LCBlbmNvZGluZykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU2xvd0J1ZmZlcikpIHJldHVybiBuZXcgU2xvd0J1ZmZlcihzdWJqZWN0LCBlbmNvZGluZylcblxuICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihzdWJqZWN0LCBlbmNvZGluZylcbiAgZGVsZXRlIGJ1Zi5wYXJlbnRcbiAgcmV0dXJuIGJ1ZlxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgdmFyIGkgPSAwXG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSBicmVha1xuXG4gICAgKytpXG4gIH1cblxuICBpZiAoaSAhPT0gbGVuKSB7XG4gICAgeCA9IGFbaV1cbiAgICB5ID0gYltpXVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICdyYXcnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFpc0FycmF5KGxpc3QpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdsaXN0IGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycy4nKVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWYgPSBuZXcgQnVmZmVyKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV1cbiAgICBpdGVtLmNvcHkoYnVmLCBwb3MpXG4gICAgcG9zICs9IGl0ZW0ubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykgc3RyaW5nID0gJycgKyBzdHJpbmdcblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgIC8vIERlcHJlY2F0ZWRcbiAgICAgIGNhc2UgJ3Jhdyc6XG4gICAgICBjYXNlICdyYXdzJzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICBzdGFydCA9IHN0YXJ0IHwgMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPT09IEluZmluaXR5ID8gdGhpcy5sZW5ndGggOiBlbmQgfCAwXG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcbiAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKGVuZCA8PSBzdGFydCkgcmV0dXJuICcnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gYmluYXJ5U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIGFuZCBgaXMtYnVmZmVyYCAoaW4gU2FmYXJpIDUtNykgdG8gZGV0ZWN0XG4vLyBCdWZmZXIgaW5zdGFuY2VzLlxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiAwXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQpIHtcbiAgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICBieXRlT2Zmc2V0ID4+PSAwXG5cbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gdGhpcy5sZW5ndGgpIHJldHVybiAtMVxuXG4gIC8vIE5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gTWF0aC5tYXgodGhpcy5sZW5ndGggKyBieXRlT2Zmc2V0LCAwKVxuXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSByZXR1cm4gLTEgLy8gc3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcgYWx3YXlzIGZhaWxzXG4gICAgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsIHZhbCwgYnl0ZU9mZnNldClcbiAgfVxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldClcbiAgfVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YodGhpcywgWyB2YWwgXSwgYnl0ZU9mZnNldClcbiAgfVxuXG4gIGZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yICh2YXIgaSA9IDA7IGJ5dGVPZmZzZXQgKyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXJyW2J5dGVPZmZzZXQgKyBpXSA9PT0gdmFsW2ZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4XSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbC5sZW5ndGgpIHJldHVybiBieXRlT2Zmc2V0ICsgZm91bmRJbmRleFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGhleCBzdHJpbmcnKVxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChpc05hTihwYXJzZWQpKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiaW5hcnlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdmFyIHN3YXAgPSBlbmNvZGluZ1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgb2Zmc2V0ID0gbGVuZ3RoIHwgMFxuICAgIGxlbmd0aCA9IHN3YXBcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gYmluYXJ5V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBiaW5hcnlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgaSsrKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICBpZiAobmV3QnVmLmxlbmd0aCkgbmV3QnVmLnBhcmVudCA9IHRoaXMucGFyZW50IHx8IHRoaXNcblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2J1ZmZlciBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndmFsdWUgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignaW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCksIDApXG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCksIDApXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgaSsrKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7IGkrKykge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSB2YWx1ZSA8IDAgPyAxIDogMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IHZhbHVlIDwgMCA/IDEgOiAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignaW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIGZpbGwodmFsdWUsIHN0YXJ0PTAsIGVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCF2YWx1ZSkgdmFsdWUgPSAwXG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCkgZW5kID0gdGhpcy5sZW5ndGhcblxuICBpZiAoZW5kIDwgc3RhcnQpIHRocm93IG5ldyBSYW5nZUVycm9yKCdlbmQgPCBzdGFydCcpXG5cbiAgLy8gRmlsbCAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm5cbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgdGhpc1tpXSA9IHZhbHVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IHV0ZjhUb0J5dGVzKHZhbHVlLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIHRoaXNbaV0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsInZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdzdHJlYW0nKS5UcmFuc2Zvcm1cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKS5TdHJpbmdEZWNvZGVyXG5tb2R1bGUuZXhwb3J0cyA9IENpcGhlckJhc2VcbmluaGVyaXRzKENpcGhlckJhc2UsIFRyYW5zZm9ybSlcbmZ1bmN0aW9uIENpcGhlckJhc2UgKGhhc2hNb2RlKSB7XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMpXG4gIHRoaXMuaGFzaE1vZGUgPSB0eXBlb2YgaGFzaE1vZGUgPT09ICdzdHJpbmcnXG4gIGlmICh0aGlzLmhhc2hNb2RlKSB7XG4gICAgdGhpc1toYXNoTW9kZV0gPSB0aGlzLl9maW5hbE9yRGlnZXN0XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5maW5hbCA9IHRoaXMuX2ZpbmFsT3JEaWdlc3RcbiAgfVxuICB0aGlzLl9kZWNvZGVyID0gbnVsbFxuICB0aGlzLl9lbmNvZGluZyA9IG51bGxcbn1cbkNpcGhlckJhc2UucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBpbnB1dEVuYywgb3V0cHV0RW5jKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICBkYXRhID0gbmV3IEJ1ZmZlcihkYXRhLCBpbnB1dEVuYylcbiAgfVxuICB2YXIgb3V0RGF0YSA9IHRoaXMuX3VwZGF0ZShkYXRhKVxuICBpZiAodGhpcy5oYXNoTW9kZSkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cbiAgaWYgKG91dHB1dEVuYykge1xuICAgIG91dERhdGEgPSB0aGlzLl90b1N0cmluZyhvdXREYXRhLCBvdXRwdXRFbmMpXG4gIH1cbiAgcmV0dXJuIG91dERhdGFcbn1cblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmcgPSBmdW5jdGlvbiAoKSB7fVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5nZXRBdXRoVGFnID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3RyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5zZXRBdXRoVGFnID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3RyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5zZXRBQUQgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcigndHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGRhdGEsIF8sIG5leHQpIHtcbiAgdmFyIGVyclxuICB0cnkge1xuICAgIGlmICh0aGlzLmhhc2hNb2RlKSB7XG4gICAgICB0aGlzLl91cGRhdGUoZGF0YSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKHRoaXMuX3VwZGF0ZShkYXRhKSlcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnIgPSBlXG4gIH0gZmluYWxseSB7XG4gICAgbmV4dChlcnIpXG4gIH1cbn1cbkNpcGhlckJhc2UucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uIChkb25lKSB7XG4gIHZhciBlcnJcbiAgdHJ5IHtcbiAgICB0aGlzLnB1c2godGhpcy5fZmluYWwoKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVyciA9IGVcbiAgfSBmaW5hbGx5IHtcbiAgICBkb25lKGVycilcbiAgfVxufVxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3QgPSBmdW5jdGlvbiAob3V0cHV0RW5jKSB7XG4gIHZhciBvdXREYXRhID0gdGhpcy5fZmluYWwoKSB8fCBuZXcgQnVmZmVyKCcnKVxuICBpZiAob3V0cHV0RW5jKSB7XG4gICAgb3V0RGF0YSA9IHRoaXMuX3RvU3RyaW5nKG91dERhdGEsIG91dHB1dEVuYywgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb3V0RGF0YVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAodmFsdWUsIGVuYywgZmluYWwpIHtcbiAgaWYgKCF0aGlzLl9kZWNvZGVyKSB7XG4gICAgdGhpcy5fZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYylcbiAgICB0aGlzLl9lbmNvZGluZyA9IGVuY1xuICB9XG4gIGlmICh0aGlzLl9lbmNvZGluZyAhPT0gZW5jKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjYW5cXCd0IHN3aXRjaCBlbmNvZGluZ3MnKVxuICB9XG4gIHZhciBvdXQgPSB0aGlzLl9kZWNvZGVyLndyaXRlKHZhbHVlKVxuICBpZiAoZmluYWwpIHtcbiAgICBvdXQgKz0gdGhpcy5fZGVjb2Rlci5lbmQoKVxuICB9XG4gIHJldHVybiBvdXRcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbi8vIGJlY2F1c2UgaXQgaXMgZnJhZ2lsZSBhbmQgY2FuIGJlIGVhc2lseSBmYWtlZCB3aXRoIGBPYmplY3QuY3JlYXRlKClgLlxuXG5mdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICBpZiAoQXJyYXkuaXNBcnJheSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZyk7XG4gIH1cbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKGFyZykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG59XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkID0gaXNOdWxsT3JVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCc7XG59XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGwgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3ltYm9sJyB8fCAgLy8gRVM2IHN5bWJvbFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCc7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmU7XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSBCdWZmZXIuaXNCdWZmZXI7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cbiIsInZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJ2VsbGlwdGljJyk7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUVDREgoY3VydmUpIHtcblx0cmV0dXJuIG5ldyBFQ0RIKGN1cnZlKTtcbn07XG5cbnZhciBhbGlhc2VzID0ge1xuXHRzZWNwMjU2azE6IHtcblx0XHRuYW1lOiAnc2VjcDI1NmsxJyxcblx0XHRieXRlTGVuZ3RoOiAzMlxuXHR9LFxuXHRzZWNwMjI0cjE6IHtcblx0XHRuYW1lOiAncDIyNCcsXG5cdFx0Ynl0ZUxlbmd0aDogMjhcblx0fSxcblx0cHJpbWUyNTZ2MToge1xuXHRcdG5hbWU6ICdwMjU2Jyxcblx0XHRieXRlTGVuZ3RoOiAzMlxuXHR9LFxuXHRwcmltZTE5MnYxOiB7XG5cdFx0bmFtZTogJ3AxOTInLFxuXHRcdGJ5dGVMZW5ndGg6IDI0XG5cdH0sXG5cdGVkMjU1MTk6IHtcblx0XHRuYW1lOiAnZWQyNTUxOScsXG5cdFx0Ynl0ZUxlbmd0aDogMzJcblx0fSxcblx0c2VjcDM4NHIxOiB7XG5cdFx0bmFtZTogJ3AzODQnLFxuXHRcdGJ5dGVMZW5ndGg6IDQ4XG5cdH0sXG5cdHNlY3A1MjFyMToge1xuXHRcdG5hbWU6ICdwNTIxJyxcblx0XHRieXRlTGVuZ3RoOiA2NlxuXHR9XG59O1xuXG5hbGlhc2VzLnAyMjQgPSBhbGlhc2VzLnNlY3AyMjRyMTtcbmFsaWFzZXMucDI1NiA9IGFsaWFzZXMuc2VjcDI1NnIxID0gYWxpYXNlcy5wcmltZTI1NnYxO1xuYWxpYXNlcy5wMTkyID0gYWxpYXNlcy5zZWNwMTkycjEgPSBhbGlhc2VzLnByaW1lMTkydjE7XG5hbGlhc2VzLnAzODQgPSBhbGlhc2VzLnNlY3AzODRyMTtcbmFsaWFzZXMucDUyMSA9IGFsaWFzZXMuc2VjcDUyMXIxO1xuXG5mdW5jdGlvbiBFQ0RIKGN1cnZlKSB7XG5cdHRoaXMuY3VydmVUeXBlID0gYWxpYXNlc1tjdXJ2ZV07XG5cdGlmICghdGhpcy5jdXJ2ZVR5cGUgKSB7XG5cdFx0dGhpcy5jdXJ2ZVR5cGUgPSB7XG5cdFx0XHRuYW1lOiBjdXJ2ZVxuXHRcdH07XG5cdH1cblx0dGhpcy5jdXJ2ZSA9IG5ldyBlbGxpcHRpYy5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKTtcblx0dGhpcy5rZXlzID0gdm9pZCAwO1xufVxuXG5FQ0RILnByb3RvdHlwZS5nZW5lcmF0ZUtleXMgPSBmdW5jdGlvbiAoZW5jLCBmb3JtYXQpIHtcblx0dGhpcy5rZXlzID0gdGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCk7XG5cdHJldHVybiB0aGlzLmdldFB1YmxpY0tleShlbmMsIGZvcm1hdCk7XG59O1xuXG5FQ0RILnByb3RvdHlwZS5jb21wdXRlU2VjcmV0ID0gZnVuY3Rpb24gKG90aGVyLCBpbmVuYywgZW5jKSB7XG5cdGluZW5jID0gaW5lbmMgfHwgJ3V0ZjgnO1xuXHRpZiAoIUJ1ZmZlci5pc0J1ZmZlcihvdGhlcikpIHtcblx0XHRvdGhlciA9IG5ldyBCdWZmZXIob3RoZXIsIGluZW5jKTtcblx0fVxuXHR2YXIgb3RoZXJQdWIgPSB0aGlzLmN1cnZlLmtleUZyb21QdWJsaWMob3RoZXIpLmdldFB1YmxpYygpO1xuXHR2YXIgb3V0ID0gb3RoZXJQdWIubXVsKHRoaXMua2V5cy5nZXRQcml2YXRlKCkpLmdldFgoKTtcblx0cmV0dXJuIGZvcm1hdFJldHVyblZhbHVlKG91dCwgZW5jLCB0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKTtcbn07XG5cbkVDREgucHJvdG90eXBlLmdldFB1YmxpY0tleSA9IGZ1bmN0aW9uIChlbmMsIGZvcm1hdCkge1xuXHR2YXIga2V5ID0gdGhpcy5rZXlzLmdldFB1YmxpYyhmb3JtYXQgPT09ICdjb21wcmVzc2VkJywgdHJ1ZSk7XG5cdGlmIChmb3JtYXQgPT09ICdoeWJyaWQnKSB7XG5cdFx0aWYgKGtleVtrZXkubGVuZ3RoIC0gMV0gJSAyKSB7XG5cdFx0XHRrZXlbMF0gPSA3O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRrZXkgWzBdID0gNjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZvcm1hdFJldHVyblZhbHVlKGtleSwgZW5jKTtcbn07XG5cbkVDREgucHJvdG90eXBlLmdldFByaXZhdGVLZXkgPSBmdW5jdGlvbiAoZW5jKSB7XG5cdHJldHVybiBmb3JtYXRSZXR1cm5WYWx1ZSh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLCBlbmMpO1xufTtcblxuRUNESC5wcm90b3R5cGUuc2V0UHVibGljS2V5ID0gZnVuY3Rpb24gKHB1YiwgZW5jKSB7XG5cdGVuYyA9IGVuYyB8fCAndXRmOCc7XG5cdGlmICghQnVmZmVyLmlzQnVmZmVyKHB1YikpIHtcblx0XHRwdWIgPSBuZXcgQnVmZmVyKHB1YiwgZW5jKTtcblx0fVxuXHR0aGlzLmtleXMuX2ltcG9ydFB1YmxpYyhwdWIpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbkVDREgucHJvdG90eXBlLnNldFByaXZhdGVLZXkgPSBmdW5jdGlvbiAocHJpdiwgZW5jKSB7XG5cdGVuYyA9IGVuYyB8fCAndXRmOCc7XG5cdGlmICghQnVmZmVyLmlzQnVmZmVyKHByaXYpKSB7XG5cdFx0cHJpdiA9IG5ldyBCdWZmZXIocHJpdiwgZW5jKTtcblx0fVxuXHR2YXIgX3ByaXYgPSBuZXcgQk4ocHJpdik7XG5cdF9wcml2ID0gX3ByaXYudG9TdHJpbmcoMTYpO1xuXHR0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoX3ByaXYpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGZvcm1hdFJldHVyblZhbHVlKGJuLCBlbmMsIGxlbikge1xuXHRpZiAoIUFycmF5LmlzQXJyYXkoYm4pKSB7XG5cdFx0Ym4gPSBibi50b0FycmF5KCk7XG5cdH1cblx0dmFyIGJ1ZiA9IG5ldyBCdWZmZXIoYm4pO1xuXHRpZiAobGVuICYmIGJ1Zi5sZW5ndGggPCBsZW4pIHtcblx0XHR2YXIgemVyb3MgPSBuZXcgQnVmZmVyKGxlbiAtIGJ1Zi5sZW5ndGgpO1xuXHRcdHplcm9zLmZpbGwoMCk7XG5cdFx0YnVmID0gQnVmZmVyLmNvbmNhdChbemVyb3MsIGJ1Zl0pO1xuXHR9XG5cdGlmICghZW5jKSB7XG5cdFx0cmV0dXJuIGJ1Zjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYnVmLnRvU3RyaW5nKGVuYyk7XG5cdH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBtZDUgPSByZXF1aXJlKCcuL21kNScpXG52YXIgcm1kMTYwID0gcmVxdWlyZSgncmlwZW1kMTYwJylcbnZhciBzaGEgPSByZXF1aXJlKCdzaGEuanMnKVxuXG52YXIgQmFzZSA9IHJlcXVpcmUoJ2NpcGhlci1iYXNlJylcblxuZnVuY3Rpb24gSGFzaE5vQ29uc3RydWN0b3IoaGFzaCkge1xuICBCYXNlLmNhbGwodGhpcywgJ2RpZ2VzdCcpXG5cbiAgdGhpcy5faGFzaCA9IGhhc2hcbiAgdGhpcy5idWZmZXJzID0gW11cbn1cblxuaW5oZXJpdHMoSGFzaE5vQ29uc3RydWN0b3IsIEJhc2UpXG5cbkhhc2hOb0NvbnN0cnVjdG9yLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5idWZmZXJzLnB1c2goZGF0YSlcbn1cblxuSGFzaE5vQ29uc3RydWN0b3IucHJvdG90eXBlLl9maW5hbCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5jb25jYXQodGhpcy5idWZmZXJzKVxuICB2YXIgciA9IHRoaXMuX2hhc2goYnVmKVxuICB0aGlzLmJ1ZmZlcnMgPSBudWxsXG5cbiAgcmV0dXJuIHJcbn1cblxuZnVuY3Rpb24gSGFzaChoYXNoKSB7XG4gIEJhc2UuY2FsbCh0aGlzLCAnZGlnZXN0JylcblxuICB0aGlzLl9oYXNoID0gaGFzaFxufVxuXG5pbmhlcml0cyhIYXNoLCBCYXNlKVxuXG5IYXNoLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5faGFzaC51cGRhdGUoZGF0YSlcbn1cblxuSGFzaC5wcm90b3R5cGUuX2ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5faGFzaC5kaWdlc3QoKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUhhc2ggKGFsZykge1xuICBhbGcgPSBhbGcudG9Mb3dlckNhc2UoKVxuICBpZiAoJ21kNScgPT09IGFsZykgcmV0dXJuIG5ldyBIYXNoTm9Db25zdHJ1Y3RvcihtZDUpXG4gIGlmICgncm1kMTYwJyA9PT0gYWxnIHx8ICdyaXBlbWQxNjAnID09PSBhbGcpIHJldHVybiBuZXcgSGFzaE5vQ29uc3RydWN0b3Iocm1kMTYwKVxuXG4gIHJldHVybiBuZXcgSGFzaChzaGEoYWxnKSlcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpbnRTaXplID0gNDtcbnZhciB6ZXJvQnVmZmVyID0gbmV3IEJ1ZmZlcihpbnRTaXplKTsgemVyb0J1ZmZlci5maWxsKDApO1xudmFyIGNocnN6ID0gODtcblxuZnVuY3Rpb24gdG9BcnJheShidWYsIGJpZ0VuZGlhbikge1xuICBpZiAoKGJ1Zi5sZW5ndGggJSBpbnRTaXplKSAhPT0gMCkge1xuICAgIHZhciBsZW4gPSBidWYubGVuZ3RoICsgKGludFNpemUgLSAoYnVmLmxlbmd0aCAlIGludFNpemUpKTtcbiAgICBidWYgPSBCdWZmZXIuY29uY2F0KFtidWYsIHplcm9CdWZmZXJdLCBsZW4pO1xuICB9XG5cbiAgdmFyIGFyciA9IFtdO1xuICB2YXIgZm4gPSBiaWdFbmRpYW4gPyBidWYucmVhZEludDMyQkUgOiBidWYucmVhZEludDMyTEU7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSArPSBpbnRTaXplKSB7XG4gICAgYXJyLnB1c2goZm4uY2FsbChidWYsIGkpKTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG5mdW5jdGlvbiB0b0J1ZmZlcihhcnIsIHNpemUsIGJpZ0VuZGlhbikge1xuICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihzaXplKTtcbiAgdmFyIGZuID0gYmlnRW5kaWFuID8gYnVmLndyaXRlSW50MzJCRSA6IGJ1Zi53cml0ZUludDMyTEU7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgZm4uY2FsbChidWYsIGFycltpXSwgaSAqIDQsIHRydWUpO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmZ1bmN0aW9uIGhhc2goYnVmLCBmbiwgaGFzaFNpemUsIGJpZ0VuZGlhbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSBidWYgPSBuZXcgQnVmZmVyKGJ1Zik7XG4gIHZhciBhcnIgPSBmbih0b0FycmF5KGJ1ZiwgYmlnRW5kaWFuKSwgYnVmLmxlbmd0aCAqIGNocnN6KTtcbiAgcmV0dXJuIHRvQnVmZmVyKGFyciwgaGFzaFNpemUsIGJpZ0VuZGlhbik7XG59XG5leHBvcnRzLmhhc2ggPSBoYXNoOyIsIid1c2Ugc3RyaWN0Jztcbi8qXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIE1ENSBNZXNzYWdlXG4gKiBEaWdlc3QgQWxnb3JpdGhtLCBhcyBkZWZpbmVkIGluIFJGQyAxMzIxLlxuICogVmVyc2lvbiAyLjEgQ29weXJpZ2h0IChDKSBQYXVsIEpvaG5zdG9uIDE5OTkgLSAyMDAyLlxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlXG4gKiBTZWUgaHR0cDovL3BhamhvbWUub3JnLnVrL2NyeXB0L21kNSBmb3IgbW9yZSBpbmZvLlxuICovXG5cbnZhciBoZWxwZXJzID0gcmVxdWlyZSgnLi9oZWxwZXJzJyk7XG5cbi8qXG4gKiBDYWxjdWxhdGUgdGhlIE1ENSBvZiBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzLCBhbmQgYSBiaXQgbGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIGNvcmVfbWQ1KHgsIGxlbilcbntcbiAgLyogYXBwZW5kIHBhZGRpbmcgKi9cbiAgeFtsZW4gPj4gNV0gfD0gMHg4MCA8PCAoKGxlbikgJSAzMik7XG4gIHhbKCgobGVuICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IGxlbjtcblxuICB2YXIgYSA9ICAxNzMyNTg0MTkzO1xuICB2YXIgYiA9IC0yNzE3MzM4Nzk7XG4gIHZhciBjID0gLTE3MzI1ODQxOTQ7XG4gIHZhciBkID0gIDI3MTczMzg3ODtcblxuICBmb3IodmFyIGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkgKz0gMTYpXG4gIHtcbiAgICB2YXIgb2xkYSA9IGE7XG4gICAgdmFyIG9sZGIgPSBiO1xuICAgIHZhciBvbGRjID0gYztcbiAgICB2YXIgb2xkZCA9IGQ7XG5cbiAgICBhID0gbWQ1X2ZmKGEsIGIsIGMsIGQsIHhbaSsgMF0sIDcgLCAtNjgwODc2OTM2KTtcbiAgICBkID0gbWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcbiAgICBjID0gbWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSsgMl0sIDE3LCAgNjA2MTA1ODE5KTtcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSsgM10sIDIyLCAtMTA0NDUyNTMzMCk7XG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2krIDRdLCA3ICwgLTE3NjQxODg5Nyk7XG4gICAgZCA9IG1kNV9mZihkLCBhLCBiLCBjLCB4W2krIDVdLCAxMiwgIDEyMDAwODA0MjYpO1xuICAgIGMgPSBtZDVfZmYoYywgZCwgYSwgYiwgeFtpKyA2XSwgMTcsIC0xNDczMjMxMzQxKTtcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSsgN10sIDIyLCAtNDU3MDU5ODMpO1xuICAgIGEgPSBtZDVfZmYoYSwgYiwgYywgZCwgeFtpKyA4XSwgNyAsICAxNzcwMDM1NDE2KTtcbiAgICBkID0gbWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSsgOV0sIDEyLCAtMTk1ODQxNDQxNyk7XG4gICAgYyA9IG1kNV9mZihjLCBkLCBhLCBiLCB4W2krMTBdLCAxNywgLTQyMDYzKTtcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSsxMV0sIDIyLCAtMTk5MDQwNDE2Mik7XG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2krMTJdLCA3ICwgIDE4MDQ2MDM2ODIpO1xuICAgIGQgPSBtZDVfZmYoZCwgYSwgYiwgYywgeFtpKzEzXSwgMTIsIC00MDM0MTEwMSk7XG4gICAgYyA9IG1kNV9mZihjLCBkLCBhLCBiLCB4W2krMTRdLCAxNywgLTE1MDIwMDIyOTApO1xuICAgIGIgPSBtZDVfZmYoYiwgYywgZCwgYSwgeFtpKzE1XSwgMjIsICAxMjM2NTM1MzI5KTtcblxuICAgIGEgPSBtZDVfZ2coYSwgYiwgYywgZCwgeFtpKyAxXSwgNSAsIC0xNjU3OTY1MTApO1xuICAgIGQgPSBtZDVfZ2coZCwgYSwgYiwgYywgeFtpKyA2XSwgOSAsIC0xMDY5NTAxNjMyKTtcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSsxMV0sIDE0LCAgNjQzNzE3NzEzKTtcbiAgICBiID0gbWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSsgMF0sIDIwLCAtMzczODk3MzAyKTtcbiAgICBhID0gbWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSsgNV0sIDUgLCAtNzAxNTU4NjkxKTtcbiAgICBkID0gbWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSsxMF0sIDkgLCAgMzgwMTYwODMpO1xuICAgIGMgPSBtZDVfZ2coYywgZCwgYSwgYiwgeFtpKzE1XSwgMTQsIC02NjA0NzgzMzUpO1xuICAgIGIgPSBtZDVfZ2coYiwgYywgZCwgYSwgeFtpKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xuICAgIGEgPSBtZDVfZ2coYSwgYiwgYywgZCwgeFtpKyA5XSwgNSAsICA1Njg0NDY0MzgpO1xuICAgIGQgPSBtZDVfZ2coZCwgYSwgYiwgYywgeFtpKzE0XSwgOSAsIC0xMDE5ODAzNjkwKTtcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSsgM10sIDE0LCAtMTg3MzYzOTYxKTtcbiAgICBiID0gbWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSsgOF0sIDIwLCAgMTE2MzUzMTUwMSk7XG4gICAgYSA9IG1kNV9nZyhhLCBiLCBjLCBkLCB4W2krMTNdLCA1ICwgLTE0NDQ2ODE0NjcpO1xuICAgIGQgPSBtZDVfZ2coZCwgYSwgYiwgYywgeFtpKyAyXSwgOSAsIC01MTQwMzc4NCk7XG4gICAgYyA9IG1kNV9nZyhjLCBkLCBhLCBiLCB4W2krIDddLCAxNCwgIDE3MzUzMjg0NzMpO1xuICAgIGIgPSBtZDVfZ2coYiwgYywgZCwgYSwgeFtpKzEyXSwgMjAsIC0xOTI2NjA3NzM0KTtcblxuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpKyA1XSwgNCAsIC0zNzg1NTgpO1xuICAgIGQgPSBtZDVfaGgoZCwgYSwgYiwgYywgeFtpKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcbiAgICBjID0gbWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSsxMV0sIDE2LCAgMTgzOTAzMDU2Mik7XG4gICAgYiA9IG1kNV9oaChiLCBjLCBkLCBhLCB4W2krMTRdLCAyMywgLTM1MzA5NTU2KTtcbiAgICBhID0gbWQ1X2hoKGEsIGIsIGMsIGQsIHhbaSsgMV0sIDQgLCAtMTUzMDk5MjA2MCk7XG4gICAgZCA9IG1kNV9oaChkLCBhLCBiLCBjLCB4W2krIDRdLCAxMSwgIDEyNzI4OTMzNTMpO1xuICAgIGMgPSBtZDVfaGgoYywgZCwgYSwgYiwgeFtpKyA3XSwgMTYsIC0xNTU0OTc2MzIpO1xuICAgIGIgPSBtZDVfaGgoYiwgYywgZCwgYSwgeFtpKzEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcbiAgICBhID0gbWQ1X2hoKGEsIGIsIGMsIGQsIHhbaSsxM10sIDQgLCAgNjgxMjc5MTc0KTtcbiAgICBkID0gbWQ1X2hoKGQsIGEsIGIsIGMsIHhbaSsgMF0sIDExLCAtMzU4NTM3MjIyKTtcbiAgICBjID0gbWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSsgM10sIDE2LCAtNzIyNTIxOTc5KTtcbiAgICBiID0gbWQ1X2hoKGIsIGMsIGQsIGEsIHhbaSsgNl0sIDIzLCAgNzYwMjkxODkpO1xuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpKyA5XSwgNCAsIC02NDAzNjQ0ODcpO1xuICAgIGQgPSBtZDVfaGgoZCwgYSwgYiwgYywgeFtpKzEyXSwgMTEsIC00MjE4MTU4MzUpO1xuICAgIGMgPSBtZDVfaGgoYywgZCwgYSwgYiwgeFtpKzE1XSwgMTYsICA1MzA3NDI1MjApO1xuICAgIGIgPSBtZDVfaGgoYiwgYywgZCwgYSwgeFtpKyAyXSwgMjMsIC05OTUzMzg2NTEpO1xuXG4gICAgYSA9IG1kNV9paShhLCBiLCBjLCBkLCB4W2krIDBdLCA2ICwgLTE5ODYzMDg0NCk7XG4gICAgZCA9IG1kNV9paShkLCBhLCBiLCBjLCB4W2krIDddLCAxMCwgIDExMjY4OTE0MTUpO1xuICAgIGMgPSBtZDVfaWkoYywgZCwgYSwgYiwgeFtpKzE0XSwgMTUsIC0xNDE2MzU0OTA1KTtcbiAgICBiID0gbWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSsgNV0sIDIxLCAtNTc0MzQwNTUpO1xuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpKzEyXSwgNiAsICAxNzAwNDg1NTcxKTtcbiAgICBkID0gbWQ1X2lpKGQsIGEsIGIsIGMsIHhbaSsgM10sIDEwLCAtMTg5NDk4NjYwNik7XG4gICAgYyA9IG1kNV9paShjLCBkLCBhLCBiLCB4W2krMTBdLCAxNSwgLTEwNTE1MjMpO1xuICAgIGIgPSBtZDVfaWkoYiwgYywgZCwgYSwgeFtpKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcbiAgICBhID0gbWQ1X2lpKGEsIGIsIGMsIGQsIHhbaSsgOF0sIDYgLCAgMTg3MzMxMzM1OSk7XG4gICAgZCA9IG1kNV9paShkLCBhLCBiLCBjLCB4W2krMTVdLCAxMCwgLTMwNjExNzQ0KTtcbiAgICBjID0gbWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSsgNl0sIDE1LCAtMTU2MDE5ODM4MCk7XG4gICAgYiA9IG1kNV9paShiLCBjLCBkLCBhLCB4W2krMTNdLCAyMSwgIDEzMDkxNTE2NDkpO1xuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpKyA0XSwgNiAsIC0xNDU1MjMwNzApO1xuICAgIGQgPSBtZDVfaWkoZCwgYSwgYiwgYywgeFtpKzExXSwgMTAsIC0xMTIwMjEwMzc5KTtcbiAgICBjID0gbWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSsgMl0sIDE1LCAgNzE4Nzg3MjU5KTtcbiAgICBiID0gbWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSsgOV0sIDIxLCAtMzQzNDg1NTUxKTtcblxuICAgIGEgPSBzYWZlX2FkZChhLCBvbGRhKTtcbiAgICBiID0gc2FmZV9hZGQoYiwgb2xkYik7XG4gICAgYyA9IHNhZmVfYWRkKGMsIG9sZGMpO1xuICAgIGQgPSBzYWZlX2FkZChkLCBvbGRkKTtcbiAgfVxuICByZXR1cm4gQXJyYXkoYSwgYiwgYywgZCk7XG5cbn1cblxuLypcbiAqIFRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIGZvdXIgYmFzaWMgb3BlcmF0aW9ucyB0aGUgYWxnb3JpdGhtIHVzZXMuXG4gKi9cbmZ1bmN0aW9uIG1kNV9jbW4ocSwgYSwgYiwgeCwgcywgdClcbntcbiAgcmV0dXJuIHNhZmVfYWRkKGJpdF9yb2woc2FmZV9hZGQoc2FmZV9hZGQoYSwgcSksIHNhZmVfYWRkKHgsIHQpKSwgcyksYik7XG59XG5mdW5jdGlvbiBtZDVfZmYoYSwgYiwgYywgZCwgeCwgcywgdClcbntcbiAgcmV0dXJuIG1kNV9jbW4oKGIgJiBjKSB8ICgofmIpICYgZCksIGEsIGIsIHgsIHMsIHQpO1xufVxuZnVuY3Rpb24gbWQ1X2dnKGEsIGIsIGMsIGQsIHgsIHMsIHQpXG57XG4gIHJldHVybiBtZDVfY21uKChiICYgZCkgfCAoYyAmICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTtcbn1cbmZ1bmN0aW9uIG1kNV9oaChhLCBiLCBjLCBkLCB4LCBzLCB0KVxue1xuICByZXR1cm4gbWQ1X2NtbihiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xufVxuZnVuY3Rpb24gbWQ1X2lpKGEsIGIsIGMsIGQsIHgsIHMsIHQpXG57XG4gIHJldHVybiBtZDVfY21uKGMgXiAoYiB8ICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuLypcbiAqIEFkZCBpbnRlZ2Vycywgd3JhcHBpbmcgYXQgMl4zMi4gVGhpcyB1c2VzIDE2LWJpdCBvcGVyYXRpb25zIGludGVybmFsbHlcbiAqIHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gc29tZSBKUyBpbnRlcnByZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIHNhZmVfYWRkKHgsIHkpXG57XG4gIHZhciBsc3cgPSAoeCAmIDB4RkZGRikgKyAoeSAmIDB4RkZGRik7XG4gIHZhciBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAobHN3ID4+IDE2KTtcbiAgcmV0dXJuIChtc3cgPDwgMTYpIHwgKGxzdyAmIDB4RkZGRik7XG59XG5cbi8qXG4gKiBCaXR3aXNlIHJvdGF0ZSBhIDMyLWJpdCBudW1iZXIgdG8gdGhlIGxlZnQuXG4gKi9cbmZ1bmN0aW9uIGJpdF9yb2wobnVtLCBjbnQpXG57XG4gIHJldHVybiAobnVtIDw8IGNudCkgfCAobnVtID4+PiAoMzIgLSBjbnQpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZDUoYnVmKSB7XG4gIHJldHVybiBoZWxwZXJzLmhhc2goYnVmLCBjb3JlX21kNSwgMTYpO1xufTsiLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoL2Jyb3dzZXInKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcblxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3N0cmVhbScpLlRyYW5zZm9ybVxuXG52YXIgWkVST1MgPSBuZXcgQnVmZmVyKDEyOClcblpFUk9TLmZpbGwoMClcblxuZnVuY3Rpb24gSG1hYyhhbGcsIGtleSkge1xuICBUcmFuc2Zvcm0uY2FsbCh0aGlzKVxuICBhbGcgPSBhbGcudG9Mb3dlckNhc2UoKVxuICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICBrZXkgPSBuZXcgQnVmZmVyKGtleSlcbiAgfVxuXG4gIHZhciBibG9ja3NpemUgPSAoYWxnID09PSAnc2hhNTEyJyB8fCBhbGcgPT09ICdzaGEzODQnKSA/IDEyOCA6IDY0XG5cbiAgdGhpcy5fYWxnID0gYWxnXG4gIHRoaXMuX2tleSA9IGtleVxuXG4gIGlmIChrZXkubGVuZ3RoID4gYmxvY2tzaXplKSB7XG4gICAga2V5ID0gY3JlYXRlSGFzaChhbGcpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpXG5cbiAgfSBlbHNlIGlmIChrZXkubGVuZ3RoIDwgYmxvY2tzaXplKSB7XG4gICAga2V5ID0gQnVmZmVyLmNvbmNhdChba2V5LCBaRVJPU10sIGJsb2Nrc2l6ZSlcbiAgfVxuXG4gIHZhciBpcGFkID0gdGhpcy5faXBhZCA9IG5ldyBCdWZmZXIoYmxvY2tzaXplKVxuICB2YXIgb3BhZCA9IHRoaXMuX29wYWQgPSBuZXcgQnVmZmVyKGJsb2Nrc2l6ZSlcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2Nrc2l6ZTsgaSsrKSB7XG4gICAgaXBhZFtpXSA9IGtleVtpXSBeIDB4MzZcbiAgICBvcGFkW2ldID0ga2V5W2ldIF4gMHg1Q1xuICB9XG5cbiAgdGhpcy5faGFzaCA9IGNyZWF0ZUhhc2goYWxnKS51cGRhdGUoaXBhZClcbn1cblxuaW5oZXJpdHMoSG1hYywgVHJhbnNmb3JtKVxuXG5IbWFjLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jKSB7XG4gIHRoaXMuX2hhc2gudXBkYXRlKGRhdGEsIGVuYylcblxuICByZXR1cm4gdGhpc1xufVxuXG5IbWFjLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGRhdGEsIF8sIG5leHQpIHtcbiAgdGhpcy5faGFzaC51cGRhdGUoZGF0YSlcblxuICBuZXh0KClcbn1cblxuSG1hYy5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKG5leHQpIHtcbiAgdGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpXG5cbiAgbmV4dCgpXG59XG5cbkhtYWMucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgdmFyIGggPSB0aGlzLl9oYXNoLmRpZ2VzdCgpXG5cbiAgcmV0dXJuIGNyZWF0ZUhhc2godGhpcy5fYWxnKS51cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKGgpLmRpZ2VzdChlbmMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlSG1hYyhhbGcsIGtleSkge1xuICByZXR1cm4gbmV3IEhtYWMoYWxnLCBrZXkpXG59XG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5yYW5kb21CeXRlcyA9IGV4cG9ydHMucm5nID0gZXhwb3J0cy5wc2V1ZG9SYW5kb21CeXRlcyA9IGV4cG9ydHMucHJuZyA9IHJlcXVpcmUoJ3JhbmRvbWJ5dGVzJylcbmV4cG9ydHMuY3JlYXRlSGFzaCA9IGV4cG9ydHMuSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJylcbmV4cG9ydHMuY3JlYXRlSG1hYyA9IGV4cG9ydHMuSG1hYyA9IHJlcXVpcmUoJ2NyZWF0ZS1obWFjJylcblxudmFyIGhhc2hlcyA9IFsnc2hhMScsICdzaGEyMjQnLCAnc2hhMjU2JywgJ3NoYTM4NCcsICdzaGE1MTInLCAnbWQ1JywgJ3JtZDE2MCddLmNvbmNhdChPYmplY3Qua2V5cyhyZXF1aXJlKCdicm93c2VyaWZ5LXNpZ24vYWxnb3MnKSkpXG5leHBvcnRzLmdldEhhc2hlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGhhc2hlc1xufVxuXG52YXIgcCA9IHJlcXVpcmUoJ3Bia2RmMicpXG5leHBvcnRzLnBia2RmMiA9IHAucGJrZGYyXG5leHBvcnRzLnBia2RmMlN5bmMgPSBwLnBia2RmMlN5bmNcblxudmFyIGFlcyA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktY2lwaGVyJylcbjtbXG4gICdDaXBoZXInLFxuICAnY3JlYXRlQ2lwaGVyJyxcbiAgJ0NpcGhlcml2JyxcbiAgJ2NyZWF0ZUNpcGhlcml2JyxcbiAgJ0RlY2lwaGVyJyxcbiAgJ2NyZWF0ZURlY2lwaGVyJyxcbiAgJ0RlY2lwaGVyaXYnLFxuICAnY3JlYXRlRGVjaXBoZXJpdicsXG4gICdnZXRDaXBoZXJzJyxcbiAgJ2xpc3RDaXBoZXJzJ1xuXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgZXhwb3J0c1trZXldID0gYWVzW2tleV1cbn0pXG5cbnZhciBkaCA9IHJlcXVpcmUoJ2RpZmZpZS1oZWxsbWFuJylcbjtbXG4gICdEaWZmaWVIZWxsbWFuR3JvdXAnLFxuICAnY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwJyxcbiAgJ2dldERpZmZpZUhlbGxtYW4nLFxuICAnY3JlYXRlRGlmZmllSGVsbG1hbicsXG4gICdEaWZmaWVIZWxsbWFuJ1xuXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgZXhwb3J0c1trZXldID0gZGhba2V5XVxufSlcblxudmFyIHNpZ24gPSByZXF1aXJlKCdicm93c2VyaWZ5LXNpZ24nKVxuO1tcbiAgJ2NyZWF0ZVNpZ24nLFxuICAnU2lnbicsXG4gICdjcmVhdGVWZXJpZnknLFxuICAnVmVyaWZ5J1xuXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgZXhwb3J0c1trZXldID0gc2lnbltrZXldXG59KVxuXG5leHBvcnRzLmNyZWF0ZUVDREggPSByZXF1aXJlKCdjcmVhdGUtZWNkaCcpXG5cbnZhciBwdWJsaWNFbmNyeXB0ID0gcmVxdWlyZSgncHVibGljLWVuY3J5cHQnKVxuXG47W1xuICAncHVibGljRW5jcnlwdCcsXG4gICdwcml2YXRlRW5jcnlwdCcsXG4gICdwdWJsaWNEZWNyeXB0JyxcbiAgJ3ByaXZhdGVEZWNyeXB0J1xuXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgZXhwb3J0c1trZXldID0gcHVibGljRW5jcnlwdFtrZXldXG59KVxuXG4vLyB0aGUgbGVhc3QgSSBjYW4gZG8gaXMgbWFrZSBlcnJvciBtZXNzYWdlcyBmb3IgdGhlIHJlc3Qgb2YgdGhlIG5vZGUuanMvY3J5cHRvIGFwaS5cbjtbXG4gICdjcmVhdGVDcmVkZW50aWFscydcbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBleHBvcnRzW25hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihbXG4gICAgICAnc29ycnksICcgKyBuYW1lICsgJyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0JyxcbiAgICAgICd3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cycsXG4gICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2NyeXB0by1icm93c2VyaWZ5L2NyeXB0by1icm93c2VyaWZ5J1xuICAgIF0uam9pbignXFxuJykpXG4gIH1cbn0pXG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMudXRpbHMgPSByZXF1aXJlKCcuL2Rlcy91dGlscycpO1xuZXhwb3J0cy5DaXBoZXIgPSByZXF1aXJlKCcuL2Rlcy9jaXBoZXInKTtcbmV4cG9ydHMuREVTID0gcmVxdWlyZSgnLi9kZXMvZGVzJyk7XG5leHBvcnRzLkNCQyA9IHJlcXVpcmUoJy4vZGVzL2NiYycpO1xuZXhwb3J0cy5FREUgPSByZXF1aXJlKCcuL2Rlcy9lZGUnKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbnZhciBwcm90byA9IHt9O1xuXG5mdW5jdGlvbiBDQkNTdGF0ZShpdikge1xuICBhc3NlcnQuZXF1YWwoaXYubGVuZ3RoLCA4LCAnSW52YWxpZCBJViBsZW5ndGgnKTtcblxuICB0aGlzLml2ID0gbmV3IEFycmF5KDgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXYubGVuZ3RoOyBpKyspXG4gICAgdGhpcy5pdltpXSA9IGl2W2ldO1xufVxuXG5mdW5jdGlvbiBpbnN0YW50aWF0ZShCYXNlKSB7XG4gIGZ1bmN0aW9uIENCQyhvcHRpb25zKSB7XG4gICAgQmFzZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuX2NiY0luaXQoKTtcbiAgfVxuICBpbmhlcml0cyhDQkMsIEJhc2UpO1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvdG8pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBDQkMucHJvdG90eXBlW2tleV0gPSBwcm90b1trZXldO1xuICB9XG5cbiAgQ0JDLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBDQkMob3B0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIENCQztcbn1cblxuZXhwb3J0cy5pbnN0YW50aWF0ZSA9IGluc3RhbnRpYXRlO1xuXG5wcm90by5fY2JjSW5pdCA9IGZ1bmN0aW9uIF9jYmNJbml0KCkge1xuICB2YXIgc3RhdGUgPSBuZXcgQ0JDU3RhdGUodGhpcy5vcHRpb25zLml2KTtcbiAgdGhpcy5fY2JjU3RhdGUgPSBzdGF0ZTtcbn07XG5cbnByb3RvLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKGlucCwgaW5PZmYsIG91dCwgb3V0T2ZmKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2NiY1N0YXRlO1xuICB2YXIgc3VwZXJQcm90byA9IHRoaXMuY29uc3RydWN0b3Iuc3VwZXJfLnByb3RvdHlwZTtcblxuICB2YXIgaXYgPSBzdGF0ZS5pdjtcbiAgaWYgKHRoaXMudHlwZSA9PT0gJ2VuY3J5cHQnKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2NrU2l6ZTsgaSsrKVxuICAgICAgaXZbaV0gXj0gaW5wW2luT2ZmICsgaV07XG5cbiAgICBzdXBlclByb3RvLl91cGRhdGUuY2FsbCh0aGlzLCBpdiwgMCwgb3V0LCBvdXRPZmYpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2NrU2l6ZTsgaSsrKVxuICAgICAgaXZbaV0gPSBvdXRbb3V0T2ZmICsgaV07XG4gIH0gZWxzZSB7XG4gICAgc3VwZXJQcm90by5fdXBkYXRlLmNhbGwodGhpcywgaW5wLCBpbk9mZiwgb3V0LCBvdXRPZmYpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2NrU2l6ZTsgaSsrKVxuICAgICAgb3V0W291dE9mZiArIGldIF49IGl2W2ldO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2NrU2l6ZTsgaSsrKVxuICAgICAgaXZbaV0gPSBpbnBbaW5PZmYgKyBpXTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gQ2lwaGVyKG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICB0aGlzLnR5cGUgPSB0aGlzLm9wdGlvbnMudHlwZTtcbiAgdGhpcy5ibG9ja1NpemUgPSA4O1xuICB0aGlzLl9pbml0KCk7XG5cbiAgdGhpcy5idWZmZXIgPSBuZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO1xuICB0aGlzLmJ1ZmZlck9mZiA9IDA7XG59XG5tb2R1bGUuZXhwb3J0cyA9IENpcGhlcjtcblxuQ2lwaGVyLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIF9pbml0KCkge1xuICAvLyBNaWdodCBiZSBvdmVycmlkZWRcbn07XG5cbkNpcGhlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGRhdGEpIHtcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodGhpcy50eXBlID09PSAnZGVjcnlwdCcpXG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZURlY3J5cHQoZGF0YSk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlRW5jcnlwdChkYXRhKTtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX2J1ZmZlciA9IGZ1bmN0aW9uIF9idWZmZXIoZGF0YSwgb2ZmKSB7XG4gIC8vIEFwcGVuZCBkYXRhIHRvIGJ1ZmZlclxuICB2YXIgbWluID0gTWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoIC0gdGhpcy5idWZmZXJPZmYsIGRhdGEubGVuZ3RoIC0gb2ZmKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaW47IGkrKylcbiAgICB0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZiArIGldID0gZGF0YVtvZmYgKyBpXTtcbiAgdGhpcy5idWZmZXJPZmYgKz0gbWluO1xuXG4gIC8vIFNoaWZ0IG5leHRcbiAgcmV0dXJuIG1pbjtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX2ZsdXNoQnVmZmVyID0gZnVuY3Rpb24gX2ZsdXNoQnVmZmVyKG91dCwgb2ZmKSB7XG4gIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwgMCwgb3V0LCBvZmYpO1xuICB0aGlzLmJ1ZmZlck9mZiA9IDA7XG4gIHJldHVybiB0aGlzLmJsb2NrU2l6ZTtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX3VwZGF0ZUVuY3J5cHQgPSBmdW5jdGlvbiBfdXBkYXRlRW5jcnlwdChkYXRhKSB7XG4gIHZhciBpbnB1dE9mZiA9IDA7XG4gIHZhciBvdXRwdXRPZmYgPSAwO1xuXG4gIHZhciBjb3VudCA9ICgodGhpcy5idWZmZXJPZmYgKyBkYXRhLmxlbmd0aCkgLyB0aGlzLmJsb2NrU2l6ZSkgfCAwO1xuICB2YXIgb3V0ID0gbmV3IEFycmF5KGNvdW50ICogdGhpcy5ibG9ja1NpemUpO1xuXG4gIGlmICh0aGlzLmJ1ZmZlck9mZiAhPT0gMCkge1xuICAgIGlucHV0T2ZmICs9IHRoaXMuX2J1ZmZlcihkYXRhLCBpbnB1dE9mZik7XG5cbiAgICBpZiAodGhpcy5idWZmZXJPZmYgPT09IHRoaXMuYnVmZmVyLmxlbmd0aClcbiAgICAgIG91dHB1dE9mZiArPSB0aGlzLl9mbHVzaEJ1ZmZlcihvdXQsIG91dHB1dE9mZik7XG4gIH1cblxuICAvLyBXcml0ZSBibG9ja3NcbiAgdmFyIG1heCA9IGRhdGEubGVuZ3RoIC0gKChkYXRhLmxlbmd0aCAtIGlucHV0T2ZmKSAlIHRoaXMuYmxvY2tTaXplKTtcbiAgZm9yICg7IGlucHV0T2ZmIDwgbWF4OyBpbnB1dE9mZiArPSB0aGlzLmJsb2NrU2l6ZSkge1xuICAgIHRoaXMuX3VwZGF0ZShkYXRhLCBpbnB1dE9mZiwgb3V0LCBvdXRwdXRPZmYpO1xuICAgIG91dHB1dE9mZiArPSB0aGlzLmJsb2NrU2l6ZTtcbiAgfVxuXG4gIC8vIFF1ZXVlIHJlc3RcbiAgZm9yICg7IGlucHV0T2ZmIDwgZGF0YS5sZW5ndGg7IGlucHV0T2ZmKyssIHRoaXMuYnVmZmVyT2ZmKyspXG4gICAgdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZdID0gZGF0YVtpbnB1dE9mZl07XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQgPSBmdW5jdGlvbiBfdXBkYXRlRGVjcnlwdChkYXRhKSB7XG4gIHZhciBpbnB1dE9mZiA9IDA7XG4gIHZhciBvdXRwdXRPZmYgPSAwO1xuXG4gIHZhciBjb3VudCA9IE1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYgKyBkYXRhLmxlbmd0aCkgLyB0aGlzLmJsb2NrU2l6ZSkgLSAxO1xuICB2YXIgb3V0ID0gbmV3IEFycmF5KGNvdW50ICogdGhpcy5ibG9ja1NpemUpO1xuXG4gIC8vIFRPRE8oaW5kdXRueSk6IG9wdGltaXplIGl0LCB0aGlzIGlzIGZhciBmcm9tIG9wdGltYWxcbiAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkge1xuICAgIGlucHV0T2ZmICs9IHRoaXMuX2J1ZmZlcihkYXRhLCBpbnB1dE9mZik7XG4gICAgb3V0cHV0T2ZmICs9IHRoaXMuX2ZsdXNoQnVmZmVyKG91dCwgb3V0cHV0T2ZmKTtcbiAgfVxuXG4gIC8vIEJ1ZmZlciByZXN0IG9mIHRoZSBpbnB1dFxuICBpbnB1dE9mZiArPSB0aGlzLl9idWZmZXIoZGF0YSwgaW5wdXRPZmYpO1xuXG4gIHJldHVybiBvdXQ7XG59O1xuXG5DaXBoZXIucHJvdG90eXBlLmZpbmFsID0gZnVuY3Rpb24gZmluYWwoYnVmZmVyKSB7XG4gIHZhciBmaXJzdDtcbiAgaWYgKGJ1ZmZlcilcbiAgICBmaXJzdCA9IHRoaXMudXBkYXRlKGJ1ZmZlcik7XG5cbiAgdmFyIGxhc3Q7XG4gIGlmICh0aGlzLnR5cGUgPT09ICdlbmNyeXB0JylcbiAgICBsYXN0ID0gdGhpcy5fZmluYWxFbmNyeXB0KCk7XG4gIGVsc2VcbiAgICBsYXN0ID0gdGhpcy5fZmluYWxEZWNyeXB0KCk7XG5cbiAgaWYgKGZpcnN0KVxuICAgIHJldHVybiBmaXJzdC5jb25jYXQobGFzdCk7XG4gIGVsc2VcbiAgICByZXR1cm4gbGFzdDtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX3BhZCA9IGZ1bmN0aW9uIF9wYWQoYnVmZmVyLCBvZmYpIHtcbiAgaWYgKG9mZiA9PT0gMClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgd2hpbGUgKG9mZiA8IGJ1ZmZlci5sZW5ndGgpXG4gICAgYnVmZmVyW29mZisrXSA9IDA7XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5DaXBoZXIucHJvdG90eXBlLl9maW5hbEVuY3J5cHQgPSBmdW5jdGlvbiBfZmluYWxFbmNyeXB0KCkge1xuICBpZiAoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlciwgdGhpcy5idWZmZXJPZmYpKVxuICAgIHJldHVybiBbXTtcblxuICB2YXIgb3V0ID0gbmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtcbiAgdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLCAwLCBvdXQsIDApO1xuICByZXR1cm4gb3V0O1xufTtcblxuQ2lwaGVyLnByb3RvdHlwZS5fdW5wYWQgPSBmdW5jdGlvbiBfdW5wYWQoYnVmZmVyKSB7XG4gIHJldHVybiBidWZmZXI7XG59O1xuXG5DaXBoZXIucHJvdG90eXBlLl9maW5hbERlY3J5cHQgPSBmdW5jdGlvbiBfZmluYWxEZWNyeXB0KCkge1xuICBhc3NlcnQuZXF1YWwodGhpcy5idWZmZXJPZmYsIHRoaXMuYmxvY2tTaXplLCAnTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQnKTtcbiAgdmFyIG91dCA9IG5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7XG4gIHRoaXMuX2ZsdXNoQnVmZmVyKG91dCwgMCk7XG5cbiAgcmV0dXJuIHRoaXMuX3VucGFkKG91dCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxudmFyIGRlcyA9IHJlcXVpcmUoJy4uL2RlcycpO1xudmFyIHV0aWxzID0gZGVzLnV0aWxzO1xudmFyIENpcGhlciA9IGRlcy5DaXBoZXI7XG5cbmZ1bmN0aW9uIERFU1N0YXRlKCkge1xuICB0aGlzLnRtcCA9IG5ldyBBcnJheSgyKTtcbiAgdGhpcy5rZXlzID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gREVTKG9wdGlvbnMpIHtcbiAgQ2lwaGVyLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdmFyIHN0YXRlID0gbmV3IERFU1N0YXRlKCk7XG4gIHRoaXMuX2Rlc1N0YXRlID0gc3RhdGU7XG5cbiAgdGhpcy5kZXJpdmVLZXlzKHN0YXRlLCBvcHRpb25zLmtleSk7XG59XG5pbmhlcml0cyhERVMsIENpcGhlcik7XG5tb2R1bGUuZXhwb3J0cyA9IERFUztcblxuREVTLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgREVTKG9wdGlvbnMpO1xufTtcblxudmFyIHNoaWZ0VGFibGUgPSBbXG4gIDEsIDEsIDIsIDIsIDIsIDIsIDIsIDIsXG4gIDEsIDIsIDIsIDIsIDIsIDIsIDIsIDFcbl07XG5cbkRFUy5wcm90b3R5cGUuZGVyaXZlS2V5cyA9IGZ1bmN0aW9uIGRlcml2ZUtleXMoc3RhdGUsIGtleSkge1xuICBzdGF0ZS5rZXlzID0gbmV3IEFycmF5KDE2ICogMik7XG5cbiAgYXNzZXJ0LmVxdWFsKGtleS5sZW5ndGgsIHRoaXMuYmxvY2tTaXplLCAnSW52YWxpZCBrZXkgbGVuZ3RoJyk7XG5cbiAgdmFyIGtMID0gdXRpbHMucmVhZFVJbnQzMkJFKGtleSwgMCk7XG4gIHZhciBrUiA9IHV0aWxzLnJlYWRVSW50MzJCRShrZXksIDQpO1xuXG4gIHV0aWxzLnBjMShrTCwga1IsIHN0YXRlLnRtcCwgMCk7XG4gIGtMID0gc3RhdGUudG1wWzBdO1xuICBrUiA9IHN0YXRlLnRtcFsxXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5rZXlzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIHNoaWZ0ID0gc2hpZnRUYWJsZVtpID4+PiAxXTtcbiAgICBrTCA9IHV0aWxzLnIyOHNobChrTCwgc2hpZnQpO1xuICAgIGtSID0gdXRpbHMucjI4c2hsKGtSLCBzaGlmdCk7XG4gICAgdXRpbHMucGMyKGtMLCBrUiwgc3RhdGUua2V5cywgaSk7XG4gIH1cbn07XG5cbkRFUy5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUoaW5wLCBpbk9mZiwgb3V0LCBvdXRPZmYpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fZGVzU3RhdGU7XG5cbiAgdmFyIGwgPSB1dGlscy5yZWFkVUludDMyQkUoaW5wLCBpbk9mZik7XG4gIHZhciByID0gdXRpbHMucmVhZFVJbnQzMkJFKGlucCwgaW5PZmYgKyA0KTtcblxuICAvLyBJbml0aWFsIFBlcm11dGF0aW9uXG4gIHV0aWxzLmlwKGwsIHIsIHN0YXRlLnRtcCwgMCk7XG4gIGwgPSBzdGF0ZS50bXBbMF07XG4gIHIgPSBzdGF0ZS50bXBbMV07XG5cbiAgaWYgKHRoaXMudHlwZSA9PT0gJ2VuY3J5cHQnKVxuICAgIHRoaXMuX2VuY3J5cHQoc3RhdGUsIGwsIHIsIHN0YXRlLnRtcCwgMCk7XG4gIGVsc2VcbiAgICB0aGlzLl9kZWNyeXB0KHN0YXRlLCBsLCByLCBzdGF0ZS50bXAsIDApO1xuXG4gIGwgPSBzdGF0ZS50bXBbMF07XG4gIHIgPSBzdGF0ZS50bXBbMV07XG5cbiAgdXRpbHMud3JpdGVVSW50MzJCRShvdXQsIGwsIG91dE9mZik7XG4gIHV0aWxzLndyaXRlVUludDMyQkUob3V0LCByLCBvdXRPZmYgKyA0KTtcbn07XG5cbkRFUy5wcm90b3R5cGUuX3BhZCA9IGZ1bmN0aW9uIF9wYWQoYnVmZmVyLCBvZmYpIHtcbiAgdmFyIHZhbHVlID0gYnVmZmVyLmxlbmd0aCAtIG9mZjtcbiAgZm9yICh2YXIgaSA9IG9mZjsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKylcbiAgICBidWZmZXJbaV0gPSB2YWx1ZTtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkRFUy5wcm90b3R5cGUuX3VucGFkID0gZnVuY3Rpb24gX3VucGFkKGJ1ZmZlcikge1xuICB2YXIgcGFkID0gYnVmZmVyW2J1ZmZlci5sZW5ndGggLSAxXTtcbiAgZm9yICh2YXIgaSA9IGJ1ZmZlci5sZW5ndGggLSBwYWQ7IGkgPCBidWZmZXIubGVuZ3RoOyBpKyspXG4gICAgYXNzZXJ0LmVxdWFsKGJ1ZmZlcltpXSwgcGFkKTtcblxuICByZXR1cm4gYnVmZmVyLnNsaWNlKDAsIGJ1ZmZlci5sZW5ndGggLSBwYWQpO1xufTtcblxuREVTLnByb3RvdHlwZS5fZW5jcnlwdCA9IGZ1bmN0aW9uIF9lbmNyeXB0KHN0YXRlLCBsU3RhcnQsIHJTdGFydCwgb3V0LCBvZmYpIHtcbiAgdmFyIGwgPSBsU3RhcnQ7XG4gIHZhciByID0gclN0YXJ0O1xuXG4gIC8vIEFwcGx5IGYoKSB4MTYgdGltZXNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5rZXlzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGtleUwgPSBzdGF0ZS5rZXlzW2ldO1xuICAgIHZhciBrZXlSID0gc3RhdGUua2V5c1tpICsgMV07XG5cbiAgICAvLyBmKHIsIGspXG4gICAgdXRpbHMuZXhwYW5kKHIsIHN0YXRlLnRtcCwgMCk7XG5cbiAgICBrZXlMIF49IHN0YXRlLnRtcFswXTtcbiAgICBrZXlSIF49IHN0YXRlLnRtcFsxXTtcbiAgICB2YXIgcyA9IHV0aWxzLnN1YnN0aXR1dGUoa2V5TCwga2V5Uik7XG4gICAgdmFyIGYgPSB1dGlscy5wZXJtdXRlKHMpO1xuXG4gICAgdmFyIHQgPSByO1xuICAgIHIgPSAobCBeIGYpID4+PiAwO1xuICAgIGwgPSB0O1xuICB9XG5cbiAgLy8gUmV2ZXJzZSBJbml0aWFsIFBlcm11dGF0aW9uXG4gIHV0aWxzLnJpcChyLCBsLCBvdXQsIG9mZik7XG59O1xuXG5ERVMucHJvdG90eXBlLl9kZWNyeXB0ID0gZnVuY3Rpb24gX2RlY3J5cHQoc3RhdGUsIGxTdGFydCwgclN0YXJ0LCBvdXQsIG9mZikge1xuICB2YXIgbCA9IHJTdGFydDtcbiAgdmFyIHIgPSBsU3RhcnQ7XG5cbiAgLy8gQXBwbHkgZigpIHgxNiB0aW1lc1xuICBmb3IgKHZhciBpID0gc3RhdGUua2V5cy5sZW5ndGggLSAyOyBpID49IDA7IGkgLT0gMikge1xuICAgIHZhciBrZXlMID0gc3RhdGUua2V5c1tpXTtcbiAgICB2YXIga2V5UiA9IHN0YXRlLmtleXNbaSArIDFdO1xuXG4gICAgLy8gZihyLCBrKVxuICAgIHV0aWxzLmV4cGFuZChsLCBzdGF0ZS50bXAsIDApO1xuXG4gICAga2V5TCBePSBzdGF0ZS50bXBbMF07XG4gICAga2V5UiBePSBzdGF0ZS50bXBbMV07XG4gICAgdmFyIHMgPSB1dGlscy5zdWJzdGl0dXRlKGtleUwsIGtleVIpO1xuICAgIHZhciBmID0gdXRpbHMucGVybXV0ZShzKTtcblxuICAgIHZhciB0ID0gbDtcbiAgICBsID0gKHIgXiBmKSA+Pj4gMDtcbiAgICByID0gdDtcbiAgfVxuXG4gIC8vIFJldmVyc2UgSW5pdGlhbCBQZXJtdXRhdGlvblxuICB1dGlscy5yaXAobCwgciwgb3V0LCBvZmYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbnZhciBkZXMgPSByZXF1aXJlKCcuLi9kZXMnKTtcbnZhciBDaXBoZXIgPSBkZXMuQ2lwaGVyO1xudmFyIERFUyA9IGRlcy5ERVM7XG5cbmZ1bmN0aW9uIEVERVN0YXRlKHR5cGUsIGtleSkge1xuICBhc3NlcnQuZXF1YWwoa2V5Lmxlbmd0aCwgMjQsICdJbnZhbGlkIGtleSBsZW5ndGgnKTtcblxuICB2YXIgazEgPSBrZXkuc2xpY2UoMCwgOCk7XG4gIHZhciBrMiA9IGtleS5zbGljZSg4LCAxNik7XG4gIHZhciBrMyA9IGtleS5zbGljZSgxNiwgMjQpO1xuXG4gIGlmICh0eXBlID09PSAnZW5jcnlwdCcpIHtcbiAgICB0aGlzLmNpcGhlcnMgPSBbXG4gICAgICBERVMuY3JlYXRlKHsgdHlwZTogJ2VuY3J5cHQnLCBrZXk6IGsxIH0pLFxuICAgICAgREVTLmNyZWF0ZSh7IHR5cGU6ICdkZWNyeXB0Jywga2V5OiBrMiB9KSxcbiAgICAgIERFUy5jcmVhdGUoeyB0eXBlOiAnZW5jcnlwdCcsIGtleTogazMgfSlcbiAgICBdO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuY2lwaGVycyA9IFtcbiAgICAgIERFUy5jcmVhdGUoeyB0eXBlOiAnZGVjcnlwdCcsIGtleTogazMgfSksXG4gICAgICBERVMuY3JlYXRlKHsgdHlwZTogJ2VuY3J5cHQnLCBrZXk6IGsyIH0pLFxuICAgICAgREVTLmNyZWF0ZSh7IHR5cGU6ICdkZWNyeXB0Jywga2V5OiBrMSB9KVxuICAgIF07XG4gIH1cbn1cblxuZnVuY3Rpb24gRURFKG9wdGlvbnMpIHtcbiAgQ2lwaGVyLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdmFyIHN0YXRlID0gbmV3IEVERVN0YXRlKHRoaXMudHlwZSwgdGhpcy5vcHRpb25zLmtleSk7XG4gIHRoaXMuX2VkZVN0YXRlID0gc3RhdGU7XG59XG5pbmhlcml0cyhFREUsIENpcGhlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gRURFO1xuXG5FREUuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBFREUob3B0aW9ucyk7XG59O1xuXG5FREUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKGlucCwgaW5PZmYsIG91dCwgb3V0T2ZmKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2VkZVN0YXRlO1xuXG4gIHN0YXRlLmNpcGhlcnNbMF0uX3VwZGF0ZShpbnAsIGluT2ZmLCBvdXQsIG91dE9mZik7XG4gIHN0YXRlLmNpcGhlcnNbMV0uX3VwZGF0ZShvdXQsIG91dE9mZiwgb3V0LCBvdXRPZmYpO1xuICBzdGF0ZS5jaXBoZXJzWzJdLl91cGRhdGUob3V0LCBvdXRPZmYsIG91dCwgb3V0T2ZmKTtcbn07XG5cbkVERS5wcm90b3R5cGUuX3BhZCA9IERFUy5wcm90b3R5cGUuX3BhZDtcbkVERS5wcm90b3R5cGUuX3VucGFkID0gREVTLnByb3RvdHlwZS5fdW5wYWQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFKGJ5dGVzLCBvZmYpIHtcbiAgdmFyIHJlcyA9ICAoYnl0ZXNbMCArIG9mZl0gPDwgMjQpIHxcbiAgICAgICAgICAgICAoYnl0ZXNbMSArIG9mZl0gPDwgMTYpIHxcbiAgICAgICAgICAgICAoYnl0ZXNbMiArIG9mZl0gPDwgOCkgfFxuICAgICAgICAgICAgIGJ5dGVzWzMgKyBvZmZdO1xuICByZXR1cm4gcmVzID4+PiAwO1xufTtcblxuZXhwb3J0cy53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRShieXRlcywgdmFsdWUsIG9mZikge1xuICBieXRlc1swICsgb2ZmXSA9IHZhbHVlID4+PiAyNDtcbiAgYnl0ZXNbMSArIG9mZl0gPSAodmFsdWUgPj4+IDE2KSAmIDB4ZmY7XG4gIGJ5dGVzWzIgKyBvZmZdID0gKHZhbHVlID4+PiA4KSAmIDB4ZmY7XG4gIGJ5dGVzWzMgKyBvZmZdID0gdmFsdWUgJiAweGZmO1xufTtcblxuZXhwb3J0cy5pcCA9IGZ1bmN0aW9uIGlwKGluTCwgaW5SLCBvdXQsIG9mZikge1xuICB2YXIgb3V0TCA9IDA7XG4gIHZhciBvdXRSID0gMDtcblxuICBmb3IgKHZhciBpID0gNjsgaSA+PSAwOyBpIC09IDIpIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8PSAyNDsgaiArPSA4KSB7XG4gICAgICBvdXRMIDw8PSAxO1xuICAgICAgb3V0TCB8PSAoaW5SID4+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAwOyBqIDw9IDI0OyBqICs9IDgpIHtcbiAgICAgIG91dEwgPDw9IDE7XG4gICAgICBvdXRMIHw9IChpbkwgPj4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gNjsgaSA+PSAwOyBpIC09IDIpIHtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSAyNTsgaiArPSA4KSB7XG4gICAgICBvdXRSIDw8PSAxO1xuICAgICAgb3V0UiB8PSAoaW5SID4+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IDI1OyBqICs9IDgpIHtcbiAgICAgIG91dFIgPDw9IDE7XG4gICAgICBvdXRSIHw9IChpbkwgPj4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gIH1cblxuICBvdXRbb2ZmICsgMF0gPSBvdXRMID4+PiAwO1xuICBvdXRbb2ZmICsgMV0gPSBvdXRSID4+PiAwO1xufTtcblxuZXhwb3J0cy5yaXAgPSBmdW5jdGlvbiByaXAoaW5MLCBpblIsIG91dCwgb2ZmKSB7XG4gIHZhciBvdXRMID0gMDtcbiAgdmFyIG91dFIgPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDI0OyBqID49IDA7IGogLT0gOCkge1xuICAgICAgb3V0TCA8PD0gMTtcbiAgICAgIG91dEwgfD0gKGluUiA+Pj4gKGogKyBpKSkgJiAxO1xuICAgICAgb3V0TCA8PD0gMTtcbiAgICAgIG91dEwgfD0gKGluTCA+Pj4gKGogKyBpKSkgJiAxO1xuICAgIH1cbiAgfVxuICBmb3IgKHZhciBpID0gNDsgaSA8IDg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAyNDsgaiA+PSAwOyBqIC09IDgpIHtcbiAgICAgIG91dFIgPDw9IDE7XG4gICAgICBvdXRSIHw9IChpblIgPj4+IChqICsgaSkpICYgMTtcbiAgICAgIG91dFIgPDw9IDE7XG4gICAgICBvdXRSIHw9IChpbkwgPj4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gIH1cblxuICBvdXRbb2ZmICsgMF0gPSBvdXRMID4+PiAwO1xuICBvdXRbb2ZmICsgMV0gPSBvdXRSID4+PiAwO1xufTtcblxuZXhwb3J0cy5wYzEgPSBmdW5jdGlvbiBwYzEoaW5MLCBpblIsIG91dCwgb2ZmKSB7XG4gIHZhciBvdXRMID0gMDtcbiAgdmFyIG91dFIgPSAwO1xuXG4gIC8vIDcsIDE1LCAyMywgMzEsIDM5LCA0NywgNTUsIDYzXG4gIC8vIDYsIDE0LCAyMiwgMzAsIDM5LCA0NywgNTUsIDYzXG4gIC8vIDUsIDEzLCAyMSwgMjksIDM5LCA0NywgNTUsIDYzXG4gIC8vIDQsIDEyLCAyMCwgMjhcbiAgZm9yICh2YXIgaSA9IDc7IGkgPj0gNTsgaS0tKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPD0gMjQ7IGogKz0gOCkge1xuICAgICAgb3V0TCA8PD0gMTtcbiAgICAgIG91dEwgfD0gKGluUiA+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAwOyBqIDw9IDI0OyBqICs9IDgpIHtcbiAgICAgIG91dEwgPDw9IDE7XG4gICAgICBvdXRMIHw9IChpbkwgPj4gKGogKyBpKSkgJiAxO1xuICAgIH1cbiAgfVxuICBmb3IgKHZhciBqID0gMDsgaiA8PSAyNDsgaiArPSA4KSB7XG4gICAgb3V0TCA8PD0gMTtcbiAgICBvdXRMIHw9IChpblIgPj4gKGogKyBpKSkgJiAxO1xuICB9XG5cbiAgLy8gMSwgOSwgMTcsIDI1LCAzMywgNDEsIDQ5LCA1N1xuICAvLyAyLCAxMCwgMTgsIDI2LCAzNCwgNDIsIDUwLCA1OFxuICAvLyAzLCAxMSwgMTksIDI3LCAzNSwgNDMsIDUxLCA1OVxuICAvLyAzNiwgNDQsIDUyLCA2MFxuICBmb3IgKHZhciBpID0gMTsgaSA8PSAzOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8PSAyNDsgaiArPSA4KSB7XG4gICAgICBvdXRSIDw8PSAxO1xuICAgICAgb3V0UiB8PSAoaW5SID4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPD0gMjQ7IGogKz0gOCkge1xuICAgICAgb3V0UiA8PD0gMTtcbiAgICAgIG91dFIgfD0gKGluTCA+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICB9XG4gIGZvciAodmFyIGogPSAwOyBqIDw9IDI0OyBqICs9IDgpIHtcbiAgICBvdXRSIDw8PSAxO1xuICAgIG91dFIgfD0gKGluTCA+PiAoaiArIGkpKSAmIDE7XG4gIH1cblxuICBvdXRbb2ZmICsgMF0gPSBvdXRMID4+PiAwO1xuICBvdXRbb2ZmICsgMV0gPSBvdXRSID4+PiAwO1xufTtcblxuZXhwb3J0cy5yMjhzaGwgPSBmdW5jdGlvbiByMjhzaGwobnVtLCBzaGlmdCkge1xuICByZXR1cm4gKChudW0gPDwgc2hpZnQpICYgMHhmZmZmZmZmKSB8IChudW0gPj4+ICgyOCAtIHNoaWZ0KSk7XG59O1xuXG52YXIgcGMydGFibGUgPSBbXG4gIC8vIGluTCA9PiBvdXRMXG4gIDE0LCAxMSwgMTcsIDQsIDI3LCAyMywgMjUsIDAsXG4gIDEzLCAyMiwgNywgMTgsIDUsIDksIDE2LCAyNCxcbiAgMiwgMjAsIDEyLCAyMSwgMSwgOCwgMTUsIDI2LFxuXG4gIC8vIGluUiA9PiBvdXRSXG4gIDE1LCA0LCAyNSwgMTksIDksIDEsIDI2LCAxNixcbiAgNSwgMTEsIDIzLCA4LCAxMiwgNywgMTcsIDAsXG4gIDIyLCAzLCAxMCwgMTQsIDYsIDIwLCAyNywgMjRcbl07XG5cbmV4cG9ydHMucGMyID0gZnVuY3Rpb24gcGMyKGluTCwgaW5SLCBvdXQsIG9mZikge1xuICB2YXIgb3V0TCA9IDA7XG4gIHZhciBvdXRSID0gMDtcblxuICB2YXIgbGVuID0gcGMydGFibGUubGVuZ3RoID4+PiAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgb3V0TCA8PD0gMTtcbiAgICBvdXRMIHw9IChpbkwgPj4+IHBjMnRhYmxlW2ldKSAmIDB4MTtcbiAgfVxuICBmb3IgKHZhciBpID0gbGVuOyBpIDwgcGMydGFibGUubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRSIDw8PSAxO1xuICAgIG91dFIgfD0gKGluUiA+Pj4gcGMydGFibGVbaV0pICYgMHgxO1xuICB9XG5cbiAgb3V0W29mZiArIDBdID0gb3V0TCA+Pj4gMDtcbiAgb3V0W29mZiArIDFdID0gb3V0UiA+Pj4gMDtcbn07XG5cbmV4cG9ydHMuZXhwYW5kID0gZnVuY3Rpb24gZXhwYW5kKHIsIG91dCwgb2ZmKSB7XG4gIHZhciBvdXRMID0gMDtcbiAgdmFyIG91dFIgPSAwO1xuXG4gIG91dEwgPSAoKHIgJiAxKSA8PCA1KSB8IChyID4+PiAyNyk7XG4gIGZvciAodmFyIGkgPSAyMzsgaSA+PSAxNTsgaSAtPSA0KSB7XG4gICAgb3V0TCA8PD0gNjtcbiAgICBvdXRMIHw9IChyID4+PiBpKSAmIDB4M2Y7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDExOyBpID49IDM7IGkgLT0gNCkge1xuICAgIG91dFIgfD0gKHIgPj4+IGkpICYgMHgzZjtcbiAgICBvdXRSIDw8PSA2O1xuICB9XG4gIG91dFIgfD0gKChyICYgMHgxZikgPDwgMSkgfCAociA+Pj4gMzEpO1xuXG4gIG91dFtvZmYgKyAwXSA9IG91dEwgPj4+IDA7XG4gIG91dFtvZmYgKyAxXSA9IG91dFIgPj4+IDA7XG59O1xuXG52YXIgc1RhYmxlID0gW1xuICAxNCwgMCwgNCwgMTUsIDEzLCA3LCAxLCA0LCAyLCAxNCwgMTUsIDIsIDExLCAxMywgOCwgMSxcbiAgMywgMTAsIDEwLCA2LCA2LCAxMiwgMTIsIDExLCA1LCA5LCA5LCA1LCAwLCAzLCA3LCA4LFxuICA0LCAxNSwgMSwgMTIsIDE0LCA4LCA4LCAyLCAxMywgNCwgNiwgOSwgMiwgMSwgMTEsIDcsXG4gIDE1LCA1LCAxMiwgMTEsIDksIDMsIDcsIDE0LCAzLCAxMCwgMTAsIDAsIDUsIDYsIDAsIDEzLFxuXG4gIDE1LCAzLCAxLCAxMywgOCwgNCwgMTQsIDcsIDYsIDE1LCAxMSwgMiwgMywgOCwgNCwgMTQsXG4gIDksIDEyLCA3LCAwLCAyLCAxLCAxMywgMTAsIDEyLCA2LCAwLCA5LCA1LCAxMSwgMTAsIDUsXG4gIDAsIDEzLCAxNCwgOCwgNywgMTAsIDExLCAxLCAxMCwgMywgNCwgMTUsIDEzLCA0LCAxLCAyLFxuICA1LCAxMSwgOCwgNiwgMTIsIDcsIDYsIDEyLCA5LCAwLCAzLCA1LCAyLCAxNCwgMTUsIDksXG5cbiAgMTAsIDEzLCAwLCA3LCA5LCAwLCAxNCwgOSwgNiwgMywgMywgNCwgMTUsIDYsIDUsIDEwLFxuICAxLCAyLCAxMywgOCwgMTIsIDUsIDcsIDE0LCAxMSwgMTIsIDQsIDExLCAyLCAxNSwgOCwgMSxcbiAgMTMsIDEsIDYsIDEwLCA0LCAxMywgOSwgMCwgOCwgNiwgMTUsIDksIDMsIDgsIDAsIDcsXG4gIDExLCA0LCAxLCAxNSwgMiwgMTQsIDEyLCAzLCA1LCAxMSwgMTAsIDUsIDE0LCAyLCA3LCAxMixcblxuICA3LCAxMywgMTMsIDgsIDE0LCAxMSwgMywgNSwgMCwgNiwgNiwgMTUsIDksIDAsIDEwLCAzLFxuICAxLCA0LCAyLCA3LCA4LCAyLCA1LCAxMiwgMTEsIDEsIDEyLCAxMCwgNCwgMTQsIDE1LCA5LFxuICAxMCwgMywgNiwgMTUsIDksIDAsIDAsIDYsIDEyLCAxMCwgMTEsIDEsIDcsIDEzLCAxMywgOCxcbiAgMTUsIDksIDEsIDQsIDMsIDUsIDE0LCAxMSwgNSwgMTIsIDIsIDcsIDgsIDIsIDQsIDE0LFxuXG4gIDIsIDE0LCAxMiwgMTEsIDQsIDIsIDEsIDEyLCA3LCA0LCAxMCwgNywgMTEsIDEzLCA2LCAxLFxuICA4LCA1LCA1LCAwLCAzLCAxNSwgMTUsIDEwLCAxMywgMywgMCwgOSwgMTQsIDgsIDksIDYsXG4gIDQsIDExLCAyLCA4LCAxLCAxMiwgMTEsIDcsIDEwLCAxLCAxMywgMTQsIDcsIDIsIDgsIDEzLFxuICAxNSwgNiwgOSwgMTUsIDEyLCAwLCA1LCA5LCA2LCAxMCwgMywgNCwgMCwgNSwgMTQsIDMsXG5cbiAgMTIsIDEwLCAxLCAxNSwgMTAsIDQsIDE1LCAyLCA5LCA3LCAyLCAxMiwgNiwgOSwgOCwgNSxcbiAgMCwgNiwgMTMsIDEsIDMsIDEzLCA0LCAxNCwgMTQsIDAsIDcsIDExLCA1LCAzLCAxMSwgOCxcbiAgOSwgNCwgMTQsIDMsIDE1LCAyLCA1LCAxMiwgMiwgOSwgOCwgNSwgMTIsIDE1LCAzLCAxMCxcbiAgNywgMTEsIDAsIDE0LCA0LCAxLCAxMCwgNywgMSwgNiwgMTMsIDAsIDExLCA4LCA2LCAxMyxcblxuICA0LCAxMywgMTEsIDAsIDIsIDExLCAxNCwgNywgMTUsIDQsIDAsIDksIDgsIDEsIDEzLCAxMCxcbiAgMywgMTQsIDEyLCAzLCA5LCA1LCA3LCAxMiwgNSwgMiwgMTAsIDE1LCA2LCA4LCAxLCA2LFxuICAxLCA2LCA0LCAxMSwgMTEsIDEzLCAxMywgOCwgMTIsIDEsIDMsIDQsIDcsIDEwLCAxNCwgNyxcbiAgMTAsIDksIDE1LCA1LCA2LCAwLCA4LCAxNSwgMCwgMTQsIDUsIDIsIDksIDMsIDIsIDEyLFxuXG4gIDEzLCAxLCAyLCAxNSwgOCwgMTMsIDQsIDgsIDYsIDEwLCAxNSwgMywgMTEsIDcsIDEsIDQsXG4gIDEwLCAxMiwgOSwgNSwgMywgNiwgMTQsIDExLCA1LCAwLCAwLCAxNCwgMTIsIDksIDcsIDIsXG4gIDcsIDIsIDExLCAxLCA0LCAxNCwgMSwgNywgOSwgNCwgMTIsIDEwLCAxNCwgOCwgMiwgMTMsXG4gIDAsIDE1LCA2LCAxMiwgMTAsIDksIDEzLCAwLCAxNSwgMywgMywgNSwgNSwgNiwgOCwgMTFcbl07XG5cbmV4cG9ydHMuc3Vic3RpdHV0ZSA9IGZ1bmN0aW9uIHN1YnN0aXR1dGUoaW5MLCBpblIpIHtcbiAgdmFyIG91dCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgdmFyIGIgPSAoaW5MID4+PiAoMTggLSBpICogNikpICYgMHgzZjtcbiAgICB2YXIgc2IgPSBzVGFibGVbaSAqIDB4NDAgKyBiXTtcblxuICAgIG91dCA8PD0gNDtcbiAgICBvdXQgfD0gc2I7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICB2YXIgYiA9IChpblIgPj4+ICgxOCAtIGkgKiA2KSkgJiAweDNmO1xuICAgIHZhciBzYiA9IHNUYWJsZVs0ICogMHg0MCArIGkgKiAweDQwICsgYl07XG5cbiAgICBvdXQgPDw9IDQ7XG4gICAgb3V0IHw9IHNiO1xuICB9XG4gIHJldHVybiBvdXQgPj4+IDA7XG59O1xuXG52YXIgcGVybXV0ZVRhYmxlID0gW1xuICAxNiwgMjUsIDEyLCAxMSwgMywgMjAsIDQsIDE1LCAzMSwgMTcsIDksIDYsIDI3LCAxNCwgMSwgMjIsXG4gIDMwLCAyNCwgOCwgMTgsIDAsIDUsIDI5LCAyMywgMTMsIDE5LCAyLCAyNiwgMTAsIDIxLCAyOCwgN1xuXTtcblxuZXhwb3J0cy5wZXJtdXRlID0gZnVuY3Rpb24gcGVybXV0ZShudW0pIHtcbiAgdmFyIG91dCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGVybXV0ZVRhYmxlLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0IDw8PSAxO1xuICAgIG91dCB8PSAobnVtID4+PiBwZXJtdXRlVGFibGVbaV0pICYgMHgxO1xuICB9XG4gIHJldHVybiBvdXQgPj4+IDA7XG59O1xuXG5leHBvcnRzLnBhZFNwbGl0ID0gZnVuY3Rpb24gcGFkU3BsaXQobnVtLCBzaXplLCBncm91cCkge1xuICB2YXIgc3RyID0gbnVtLnRvU3RyaW5nKDIpO1xuICB3aGlsZSAoc3RyLmxlbmd0aCA8IHNpemUpXG4gICAgc3RyID0gJzAnICsgc3RyO1xuXG4gIHZhciBvdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpICs9IGdyb3VwKVxuICAgIG91dC5wdXNoKHN0ci5zbGljZShpLCBpICsgZ3JvdXApKTtcbiAgcmV0dXJuIG91dC5qb2luKCcgJyk7XG59O1xuIiwidmFyIGdlbmVyYXRlUHJpbWUgPSByZXF1aXJlKCcuL2xpYi9nZW5lcmF0ZVByaW1lJylcbnZhciBwcmltZXMgPSByZXF1aXJlKCcuL2xpYi9wcmltZXMuanNvbicpXG5cbnZhciBESCA9IHJlcXVpcmUoJy4vbGliL2RoJylcblxuZnVuY3Rpb24gZ2V0RGlmZmllSGVsbG1hbiAobW9kKSB7XG4gIHZhciBwcmltZSA9IG5ldyBCdWZmZXIocHJpbWVzW21vZF0ucHJpbWUsICdoZXgnKVxuICB2YXIgZ2VuID0gbmV3IEJ1ZmZlcihwcmltZXNbbW9kXS5nZW4sICdoZXgnKVxuXG4gIHJldHVybiBuZXcgREgocHJpbWUsIGdlbilcbn1cblxudmFyIEVOQ09ESU5HUyA9IHtcbiAgJ2JpbmFyeSc6IHRydWUsICdoZXgnOiB0cnVlLCAnYmFzZTY0JzogdHJ1ZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEaWZmaWVIZWxsbWFuIChwcmltZSwgZW5jLCBnZW5lcmF0b3IsIGdlbmMpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihlbmMpIHx8IEVOQ09ESU5HU1tlbmNdID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY3JlYXRlRGlmZmllSGVsbG1hbihwcmltZSwgJ2JpbmFyeScsIGVuYywgZ2VuZXJhdG9yKVxuICB9XG5cbiAgZW5jID0gZW5jIHx8ICdiaW5hcnknXG4gIGdlbmMgPSBnZW5jIHx8ICdiaW5hcnknXG4gIGdlbmVyYXRvciA9IGdlbmVyYXRvciB8fCBuZXcgQnVmZmVyKFsyXSlcblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihnZW5lcmF0b3IpKSB7XG4gICAgZ2VuZXJhdG9yID0gbmV3IEJ1ZmZlcihnZW5lcmF0b3IsIGdlbmMpXG4gIH1cblxuICBpZiAodHlwZW9mIHByaW1lID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBuZXcgREgoZ2VuZXJhdGVQcmltZShwcmltZSwgZ2VuZXJhdG9yKSwgZ2VuZXJhdG9yLCB0cnVlKVxuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIocHJpbWUpKSB7XG4gICAgcHJpbWUgPSBuZXcgQnVmZmVyKHByaW1lLCBlbmMpXG4gIH1cblxuICByZXR1cm4gbmV3IERIKHByaW1lLCBnZW5lcmF0b3IsIHRydWUpXG59XG5cbmV4cG9ydHMuRGlmZmllSGVsbG1hbkdyb3VwID0gZXhwb3J0cy5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAgPSBleHBvcnRzLmdldERpZmZpZUhlbGxtYW4gPSBnZXREaWZmaWVIZWxsbWFuXG5leHBvcnRzLmNyZWF0ZURpZmZpZUhlbGxtYW4gPSBleHBvcnRzLkRpZmZpZUhlbGxtYW4gPSBjcmVhdGVEaWZmaWVIZWxsbWFuXG4iLCJ2YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIE1pbGxlclJhYmluID0gcmVxdWlyZSgnbWlsbGVyLXJhYmluJyk7XG52YXIgbWlsbGVyUmFiaW4gPSBuZXcgTWlsbGVyUmFiaW4oKTtcbnZhciBUV0VOVFlGT1VSID0gbmV3IEJOKDI0KTtcbnZhciBFTEVWRU4gPSBuZXcgQk4oMTEpO1xudmFyIFRFTiA9IG5ldyBCTigxMCk7XG52YXIgVEhSRUUgPSBuZXcgQk4oMyk7XG52YXIgU0VWRU4gPSBuZXcgQk4oNyk7XG52YXIgcHJpbWVzID0gcmVxdWlyZSgnLi9nZW5lcmF0ZVByaW1lJyk7XG52YXIgcmFuZG9tQnl0ZXMgPSByZXF1aXJlKCdyYW5kb21ieXRlcycpO1xubW9kdWxlLmV4cG9ydHMgPSBESDtcblxuZnVuY3Rpb24gc2V0UHVibGljS2V5KHB1YiwgZW5jKSB7XG4gIGVuYyA9IGVuYyB8fCAndXRmOCc7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHB1YikpIHtcbiAgICBwdWIgPSBuZXcgQnVmZmVyKHB1YiwgZW5jKTtcbiAgfVxuICB0aGlzLl9wdWIgPSBuZXcgQk4ocHViKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHNldFByaXZhdGVLZXkocHJpdiwgZW5jKSB7XG4gIGVuYyA9IGVuYyB8fCAndXRmOCc7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHByaXYpKSB7XG4gICAgcHJpdiA9IG5ldyBCdWZmZXIocHJpdiwgZW5jKTtcbiAgfVxuICB0aGlzLl9wcml2ID0gbmV3IEJOKHByaXYpO1xuICByZXR1cm4gdGhpcztcbn1cblxudmFyIHByaW1lQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGNoZWNrUHJpbWUocHJpbWUsIGdlbmVyYXRvcikge1xuICB2YXIgZ2VuID0gZ2VuZXJhdG9yLnRvU3RyaW5nKCdoZXgnKTtcbiAgdmFyIGhleCA9IFtnZW4sIHByaW1lLnRvU3RyaW5nKDE2KV0uam9pbignXycpO1xuICBpZiAoaGV4IGluIHByaW1lQ2FjaGUpIHtcbiAgICByZXR1cm4gcHJpbWVDYWNoZVtoZXhdO1xuICB9XG4gIHZhciBlcnJvciA9IDA7XG5cbiAgaWYgKHByaW1lLmlzRXZlbigpIHx8XG4gICAgIXByaW1lcy5zaW1wbGVTaWV2ZSB8fFxuICAgICFwcmltZXMuZmVybWF0VGVzdChwcmltZSkgfHxcbiAgICAhbWlsbGVyUmFiaW4udGVzdChwcmltZSkpIHtcbiAgICAvL25vdCBhIHByaW1lIHNvICsxXG4gICAgZXJyb3IgKz0gMTtcblxuICAgIGlmIChnZW4gPT09ICcwMicgfHwgZ2VuID09PSAnMDUnKSB7XG4gICAgICAvLyB3ZSdkIGJlIGFibGUgdG8gY2hlY2sgdGhlIGdlbmVyYXRvclxuICAgICAgLy8gaXQgd291bGQgZmFpbCBzbyArOFxuICAgICAgZXJyb3IgKz0gODtcbiAgICB9IGVsc2Uge1xuICAgICAgLy93ZSB3b3VsZG4ndCBiZSBhYmxlIHRvIHRlc3QgdGhlIGdlbmVyYXRvclxuICAgICAgLy8gc28gKzRcbiAgICAgIGVycm9yICs9IDQ7XG4gICAgfVxuICAgIHByaW1lQ2FjaGVbaGV4XSA9IGVycm9yO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfVxuICBpZiAoIW1pbGxlclJhYmluLnRlc3QocHJpbWUuc2hybigxKSkpIHtcbiAgICAvL25vdCBhIHNhZmUgcHJpbWVcbiAgICBlcnJvciArPSAyO1xuICB9XG4gIHZhciByZW07XG4gIHN3aXRjaCAoZ2VuKSB7XG4gICAgY2FzZSAnMDInOlxuICAgICAgaWYgKHByaW1lLm1vZChUV0VOVFlGT1VSKS5jbXAoRUxFVkVOKSkge1xuICAgICAgICAvLyB1bnN1aWRhYmxlIGdlbmVyYXRvclxuICAgICAgICBlcnJvciArPSA4O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnMDUnOlxuICAgICAgcmVtID0gcHJpbWUubW9kKFRFTik7XG4gICAgICBpZiAocmVtLmNtcChUSFJFRSkgJiYgcmVtLmNtcChTRVZFTikpIHtcbiAgICAgICAgLy8gcHJpbWUgbW9kIDEwIG5lZWRzIHRvIGVxdWFsIDMgb3IgN1xuICAgICAgICBlcnJvciArPSA4O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGVycm9yICs9IDQ7XG4gIH1cbiAgcHJpbWVDYWNoZVtoZXhdID0gZXJyb3I7XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZnVuY3Rpb24gREgocHJpbWUsIGdlbmVyYXRvciwgbWFsbGVhYmxlKSB7XG4gIHRoaXMuc2V0R2VuZXJhdG9yKGdlbmVyYXRvcik7XG4gIHRoaXMuX19wcmltZSA9IG5ldyBCTihwcmltZSk7XG4gIHRoaXMuX3ByaW1lID0gQk4ubW9udCh0aGlzLl9fcHJpbWUpO1xuICB0aGlzLl9wcmltZUxlbiA9IHByaW1lLmxlbmd0aDtcbiAgdGhpcy5fcHViID0gdW5kZWZpbmVkO1xuICB0aGlzLl9wcml2ID0gdW5kZWZpbmVkO1xuICB0aGlzLl9wcmltZUNvZGUgPSB1bmRlZmluZWQ7XG4gIGlmIChtYWxsZWFibGUpIHtcbiAgICB0aGlzLnNldFB1YmxpY0tleSA9IHNldFB1YmxpY0tleTtcbiAgICB0aGlzLnNldFByaXZhdGVLZXkgPSBzZXRQcml2YXRlS2V5O1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX3ByaW1lQ29kZSA9IDg7XG4gIH1cbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShESC5wcm90b3R5cGUsICd2ZXJpZnlFcnJvcicsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9wcmltZUNvZGUgIT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLl9wcmltZUNvZGUgPSBjaGVja1ByaW1lKHRoaXMuX19wcmltZSwgdGhpcy5fX2dlbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9wcmltZUNvZGU7XG4gIH1cbn0pO1xuREgucHJvdG90eXBlLmdlbmVyYXRlS2V5cyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLl9wcml2KSB7XG4gICAgdGhpcy5fcHJpdiA9IG5ldyBCTihyYW5kb21CeXRlcyh0aGlzLl9wcmltZUxlbikpO1xuICB9XG4gIHRoaXMuX3B1YiA9IHRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKTtcbiAgcmV0dXJuIHRoaXMuZ2V0UHVibGljS2V5KCk7XG59O1xuXG5ESC5wcm90b3R5cGUuY29tcHV0ZVNlY3JldCA9IGZ1bmN0aW9uIChvdGhlcikge1xuICBvdGhlciA9IG5ldyBCTihvdGhlcik7XG4gIG90aGVyID0gb3RoZXIudG9SZWQodGhpcy5fcHJpbWUpO1xuICB2YXIgc2VjcmV0ID0gb3RoZXIucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKTtcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIoc2VjcmV0LnRvQXJyYXkoKSk7XG4gIHZhciBwcmltZSA9IHRoaXMuZ2V0UHJpbWUoKTtcbiAgaWYgKG91dC5sZW5ndGggPCBwcmltZS5sZW5ndGgpIHtcbiAgICB2YXIgZnJvbnQgPSBuZXcgQnVmZmVyKHByaW1lLmxlbmd0aCAtIG91dC5sZW5ndGgpO1xuICAgIGZyb250LmZpbGwoMCk7XG4gICAgb3V0ID0gQnVmZmVyLmNvbmNhdChbZnJvbnQsIG91dF0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59O1xuXG5ESC5wcm90b3R5cGUuZ2V0UHVibGljS2V5ID0gZnVuY3Rpb24gZ2V0UHVibGljS2V5KGVuYykge1xuICByZXR1cm4gZm9ybWF0UmV0dXJuVmFsdWUodGhpcy5fcHViLCBlbmMpO1xufTtcblxuREgucHJvdG90eXBlLmdldFByaXZhdGVLZXkgPSBmdW5jdGlvbiBnZXRQcml2YXRlS2V5KGVuYykge1xuICByZXR1cm4gZm9ybWF0UmV0dXJuVmFsdWUodGhpcy5fcHJpdiwgZW5jKTtcbn07XG5cbkRILnByb3RvdHlwZS5nZXRQcmltZSA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgcmV0dXJuIGZvcm1hdFJldHVyblZhbHVlKHRoaXMuX19wcmltZSwgZW5jKTtcbn07XG5cbkRILnByb3RvdHlwZS5nZXRHZW5lcmF0b3IgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIHJldHVybiBmb3JtYXRSZXR1cm5WYWx1ZSh0aGlzLl9nZW4sIGVuYyk7XG59O1xuXG5ESC5wcm90b3R5cGUuc2V0R2VuZXJhdG9yID0gZnVuY3Rpb24gKGdlbiwgZW5jKSB7XG4gIGVuYyA9IGVuYyB8fCAndXRmOCc7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGdlbikpIHtcbiAgICBnZW4gPSBuZXcgQnVmZmVyKGdlbiwgZW5jKTtcbiAgfVxuICB0aGlzLl9fZ2VuID0gZ2VuO1xuICB0aGlzLl9nZW4gPSBuZXcgQk4oZ2VuKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmb3JtYXRSZXR1cm5WYWx1ZShibiwgZW5jKSB7XG4gIHZhciBidWYgPSBuZXcgQnVmZmVyKGJuLnRvQXJyYXkoKSk7XG4gIGlmICghZW5jKSB7XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYnVmLnRvU3RyaW5nKGVuYyk7XG4gIH1cbn1cbiIsInZhciByYW5kb21CeXRlcyA9IHJlcXVpcmUoJ3JhbmRvbWJ5dGVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZpbmRQcmltZTtcbmZpbmRQcmltZS5zaW1wbGVTaWV2ZSA9IHNpbXBsZVNpZXZlO1xuZmluZFByaW1lLmZlcm1hdFRlc3QgPSBmZXJtYXRUZXN0O1xudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBUV0VOVFlGT1VSID0gbmV3IEJOKDI0KTtcbnZhciBNaWxsZXJSYWJpbiA9IHJlcXVpcmUoJ21pbGxlci1yYWJpbicpO1xudmFyIG1pbGxlclJhYmluID0gbmV3IE1pbGxlclJhYmluKCk7XG52YXIgT05FID0gbmV3IEJOKDEpO1xudmFyIFRXTyA9IG5ldyBCTigyKTtcbnZhciBGSVZFID0gbmV3IEJOKDUpO1xudmFyIFNJWFRFRU4gPSBuZXcgQk4oMTYpO1xudmFyIEVJR0hUID0gbmV3IEJOKDgpO1xudmFyIFRFTiA9IG5ldyBCTigxMCk7XG52YXIgVEhSRUUgPSBuZXcgQk4oMyk7XG52YXIgU0VWRU4gPSBuZXcgQk4oNyk7XG52YXIgRUxFVkVOID0gbmV3IEJOKDExKTtcbnZhciBGT1VSID0gbmV3IEJOKDQpO1xudmFyIFRXRUxWRSA9IG5ldyBCTigxMik7XG52YXIgcHJpbWVzID0gbnVsbDtcblxuZnVuY3Rpb24gX2dldFByaW1lcygpIHtcbiAgaWYgKHByaW1lcyAhPT0gbnVsbClcbiAgICByZXR1cm4gcHJpbWVzO1xuXG4gIHZhciBsaW1pdCA9IDB4MTAwMDAwO1xuICB2YXIgcmVzID0gW107XG4gIHJlc1swXSA9IDI7XG4gIGZvciAodmFyIGkgPSAxLCBrID0gMzsgayA8IGxpbWl0OyBrICs9IDIpIHtcbiAgICB2YXIgc3FydCA9IE1hdGguY2VpbChNYXRoLnNxcnQoaykpO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgaSAmJiByZXNbal0gPD0gc3FydDsgaisrKVxuICAgICAgaWYgKGsgJSByZXNbal0gPT09IDApXG4gICAgICAgIGJyZWFrO1xuXG4gICAgaWYgKGkgIT09IGogJiYgcmVzW2pdIDw9IHNxcnQpXG4gICAgICBjb250aW51ZTtcblxuICAgIHJlc1tpKytdID0gaztcbiAgfVxuICBwcmltZXMgPSByZXM7XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZVNpZXZlKHApIHtcbiAgdmFyIHByaW1lcyA9IF9nZXRQcmltZXMoKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByaW1lcy5sZW5ndGg7IGkrKylcbiAgICBpZiAocC5tb2RuKHByaW1lc1tpXSkgPT09IDApIHtcbiAgICAgIGlmIChwLmNtcG4ocHJpbWVzW2ldKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZlcm1hdFRlc3QocCkge1xuICB2YXIgcmVkID0gQk4ubW9udChwKTtcbiAgcmV0dXJuIFRXTy50b1JlZChyZWQpLnJlZFBvdyhwLnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpID09PSAwO1xufVxuXG5mdW5jdGlvbiBmaW5kUHJpbWUoYml0cywgZ2VuKSB7XG4gIGlmIChiaXRzIDwgMTYpIHtcbiAgICAvLyB0aGlzIGlzIHdoYXQgb3BlbnNzbCBkb2VzXG4gICAgaWYgKGdlbiA9PT0gMiB8fCBnZW4gPT09IDUpIHtcbiAgICAgIHJldHVybiBuZXcgQk4oWzB4OGMsIDB4N2JdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBCTihbMHg4YywgMHgyN10pO1xuICAgIH1cbiAgfVxuICBnZW4gPSBuZXcgQk4oZ2VuKTtcblxuICB2YXIgbnVtLCBuMjtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIG51bSA9IG5ldyBCTihyYW5kb21CeXRlcyhNYXRoLmNlaWwoYml0cyAvIDgpKSk7XG4gICAgd2hpbGUgKG51bS5iaXRMZW5ndGgoKSA+IGJpdHMpIHtcbiAgICAgIG51bS5pc2hybigxKTtcbiAgICB9XG4gICAgaWYgKG51bS5pc0V2ZW4oKSkge1xuICAgICAgbnVtLmlhZGQoT05FKTtcbiAgICB9XG4gICAgaWYgKCFudW0udGVzdG4oMSkpIHtcbiAgICAgIG51bS5pYWRkKFRXTyk7XG4gICAgfVxuICAgIGlmICghZ2VuLmNtcChUV08pKSB7XG4gICAgICB3aGlsZSAobnVtLm1vZChUV0VOVFlGT1VSKS5jbXAoRUxFVkVOKSkge1xuICAgICAgICBudW0uaWFkZChGT1VSKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFnZW4uY21wKEZJVkUpKSB7XG4gICAgICB3aGlsZSAobnVtLm1vZChURU4pLmNtcChUSFJFRSkpIHtcbiAgICAgICAgbnVtLmlhZGQoRk9VUik7XG4gICAgICB9XG4gICAgfVxuICAgIG4yID0gbnVtLnNocm4oMSk7XG4gICAgaWYgKHNpbXBsZVNpZXZlKG4yKSAmJiBzaW1wbGVTaWV2ZShudW0pICYmXG4gICAgICBmZXJtYXRUZXN0KG4yKSAmJiBmZXJtYXRUZXN0KG51bSkgJiZcbiAgICAgIG1pbGxlclJhYmluLnRlc3QobjIpICYmIG1pbGxlclJhYmluLnRlc3QobnVtKSkge1xuICAgICAgcmV0dXJuIG51bTtcbiAgICB9XG4gIH1cblxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICAgIFwibW9kcDFcIjoge1xuICAgICAgICBcImdlblwiOiBcIjAyXCIsXG4gICAgICAgIFwicHJpbWVcIjogXCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjNhMzYyMGZmZmZmZmZmZmZmZmZmZmZcIlxuICAgIH0sXG4gICAgXCJtb2RwMlwiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U2NTM4MWZmZmZmZmZmZmZmZmZmZmZcIlxuICAgIH0sXG4gICAgXCJtb2RwNVwiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3MzI3ZmZmZmZmZmZmZmZmZmZmZlwiXG4gICAgfSxcbiAgICBcIm1vZHAxNFwiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmXCJcbiAgICB9LFxuICAgIFwibW9kcDE1XCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkzYWQyY2FmZmZmZmZmZmZmZmZmZmZmXCJcbiAgICB9LFxuICAgIFwibW9kcDE2XCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZlwiXG4gICAgfSxcbiAgICBcIm1vZHAxN1wiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkY2M0MDI0ZmZmZmZmZmZmZmZmZmZmZlwiXG4gICAgfSxcbiAgICBcIm1vZHAxOFwiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJhM2JjODMyYjY4ZDlkZDMwMDc0MWZhN2JmOGFmYzQ3ZWQyNTc2ZjY5MzZiYTQyNDY2M2FhYjYzOWM1YWU0ZjU2ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2NTJkZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNmMGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2JjODg2MmY4Mzg1ZGRmYTlkNGI3ZmEyYzA4N2U4Nzk2ODMzMDNlZDViZGQzYTA2MmIzY2Y1YjNhMjc4YTY2ZDJhMTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1OTdlODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIxZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFlY2ZhMjY4MzU5MDQ2ZjRlYjg3OWY5MjQwMDk0MzhiNDgxYzZjZDc4ODlhMDAyZWQ1ZWUzODJiYzkxOTBkYTZmYzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBlMjc2NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZmZmZmZmZmZmZmXCJcbiAgICB9XG59IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZWxsaXB0aWMgPSBleHBvcnRzO1xuXG5lbGxpcHRpYy52ZXJzaW9uID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbmVsbGlwdGljLnV0aWxzID0gcmVxdWlyZSgnLi9lbGxpcHRpYy91dGlscycpO1xuZWxsaXB0aWMucmFuZCA9IHJlcXVpcmUoJ2Jyb3JhbmQnKTtcbmVsbGlwdGljLmhtYWNEUkJHID0gcmVxdWlyZSgnLi9lbGxpcHRpYy9obWFjLWRyYmcnKTtcbmVsbGlwdGljLmN1cnZlID0gcmVxdWlyZSgnLi9lbGxpcHRpYy9jdXJ2ZScpO1xuZWxsaXB0aWMuY3VydmVzID0gcmVxdWlyZSgnLi9lbGxpcHRpYy9jdXJ2ZXMnKTtcblxuLy8gUHJvdG9jb2xzXG5lbGxpcHRpYy5lYyA9IHJlcXVpcmUoJy4vZWxsaXB0aWMvZWMnKTtcbmVsbGlwdGljLmVkZHNhID0gcmVxdWlyZSgnLi9lbGxpcHRpYy9lZGRzYScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGdldE5BRiA9IHV0aWxzLmdldE5BRjtcbnZhciBnZXRKU0YgPSB1dGlscy5nZXRKU0Y7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBCYXNlQ3VydmUodHlwZSwgY29uZikge1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnAgPSBuZXcgQk4oY29uZi5wLCAxNik7XG5cbiAgLy8gVXNlIE1vbnRnb21lcnksIHdoZW4gdGhlcmUgaXMgbm8gZmFzdCByZWR1Y3Rpb24gZm9yIHRoZSBwcmltZVxuICB0aGlzLnJlZCA9IGNvbmYucHJpbWUgPyBCTi5yZWQoY29uZi5wcmltZSkgOiBCTi5tb250KHRoaXMucCk7XG5cbiAgLy8gVXNlZnVsIGZvciBtYW55IGN1cnZlc1xuICB0aGlzLnplcm8gPSBuZXcgQk4oMCkudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLm9uZSA9IG5ldyBCTigxKS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMudHdvID0gbmV3IEJOKDIpLnRvUmVkKHRoaXMucmVkKTtcblxuICAvLyBDdXJ2ZSBjb25maWd1cmF0aW9uLCBvcHRpb25hbFxuICB0aGlzLm4gPSBjb25mLm4gJiYgbmV3IEJOKGNvbmYubiwgMTYpO1xuICB0aGlzLmcgPSBjb25mLmcgJiYgdGhpcy5wb2ludEZyb21KU09OKGNvbmYuZywgY29uZi5nUmVkKTtcblxuICAvLyBUZW1wb3JhcnkgYXJyYXlzXG4gIHRoaXMuX3duYWZUMSA9IG5ldyBBcnJheSg0KTtcbiAgdGhpcy5fd25hZlQyID0gbmV3IEFycmF5KDQpO1xuICB0aGlzLl93bmFmVDMgPSBuZXcgQXJyYXkoNCk7XG4gIHRoaXMuX3duYWZUNCA9IG5ldyBBcnJheSg0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gQmFzZUN1cnZlO1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLnBvaW50ID0gZnVuY3Rpb24gcG9pbnQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG59O1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gdmFsaWRhdGUoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG59O1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLl9maXhlZE5hZk11bCA9IGZ1bmN0aW9uIF9maXhlZE5hZk11bChwLCBrKSB7XG4gIGFzc2VydChwLnByZWNvbXB1dGVkKTtcbiAgdmFyIGRvdWJsZXMgPSBwLl9nZXREb3VibGVzKCk7XG5cbiAgdmFyIG5hZiA9IGdldE5BRihrLCAxKTtcbiAgdmFyIEkgPSAoMSA8PCAoZG91Ymxlcy5zdGVwICsgMSkpIC0gKGRvdWJsZXMuc3RlcCAlIDIgPT09IDAgPyAyIDogMSk7XG4gIEkgLz0gMztcblxuICAvLyBUcmFuc2xhdGUgaW50byBtb3JlIHdpbmRvd2VkIGZvcm1cbiAgdmFyIHJlcHIgPSBbXTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBuYWYubGVuZ3RoOyBqICs9IGRvdWJsZXMuc3RlcCkge1xuICAgIHZhciBuYWZXID0gMDtcbiAgICBmb3IgKHZhciBrID0gaiArIGRvdWJsZXMuc3RlcCAtIDE7IGsgPj0gajsgay0tKVxuICAgICAgbmFmVyA9IChuYWZXIDw8IDEpICsgbmFmW2tdO1xuICAgIHJlcHIucHVzaChuYWZXKTtcbiAgfVxuXG4gIHZhciBhID0gdGhpcy5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gIHZhciBiID0gdGhpcy5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gIGZvciAodmFyIGkgPSBJOyBpID4gMDsgaS0tKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCByZXByLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgbmFmVyA9IHJlcHJbal07XG4gICAgICBpZiAobmFmVyA9PT0gaSlcbiAgICAgICAgYiA9IGIubWl4ZWRBZGQoZG91Ymxlcy5wb2ludHNbal0pO1xuICAgICAgZWxzZSBpZiAobmFmVyA9PT0gLWkpXG4gICAgICAgIGIgPSBiLm1peGVkQWRkKGRvdWJsZXMucG9pbnRzW2pdLm5lZygpKTtcbiAgICB9XG4gICAgYSA9IGEuYWRkKGIpO1xuICB9XG4gIHJldHVybiBhLnRvUCgpO1xufTtcblxuQmFzZUN1cnZlLnByb3RvdHlwZS5fd25hZk11bCA9IGZ1bmN0aW9uIF93bmFmTXVsKHAsIGspIHtcbiAgdmFyIHcgPSA0O1xuXG4gIC8vIFByZWNvbXB1dGUgd2luZG93XG4gIHZhciBuYWZQb2ludHMgPSBwLl9nZXROQUZQb2ludHModyk7XG4gIHcgPSBuYWZQb2ludHMud25kO1xuICB2YXIgd25kID0gbmFmUG9pbnRzLnBvaW50cztcblxuICAvLyBHZXQgTkFGIGZvcm1cbiAgdmFyIG5hZiA9IGdldE5BRihrLCB3KTtcblxuICAvLyBBZGQgYHRoaXNgKihOKzEpIGZvciBldmVyeSB3LU5BRiBpbmRleFxuICB2YXIgYWNjID0gdGhpcy5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gIGZvciAodmFyIGkgPSBuYWYubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAvLyBDb3VudCB6ZXJvZXNcbiAgICBmb3IgKHZhciBrID0gMDsgaSA+PSAwICYmIG5hZltpXSA9PT0gMDsgaS0tKVxuICAgICAgaysrO1xuICAgIGlmIChpID49IDApXG4gICAgICBrKys7XG4gICAgYWNjID0gYWNjLmRibHAoayk7XG5cbiAgICBpZiAoaSA8IDApXG4gICAgICBicmVhaztcbiAgICB2YXIgeiA9IG5hZltpXTtcbiAgICBhc3NlcnQoeiAhPT0gMCk7XG4gICAgaWYgKHAudHlwZSA9PT0gJ2FmZmluZScpIHtcbiAgICAgIC8vIEogKy0gUFxuICAgICAgaWYgKHogPiAwKVxuICAgICAgICBhY2MgPSBhY2MubWl4ZWRBZGQod25kWyh6IC0gMSkgPj4gMV0pO1xuICAgICAgZWxzZVxuICAgICAgICBhY2MgPSBhY2MubWl4ZWRBZGQod25kWygteiAtIDEpID4+IDFdLm5lZygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSiArLSBKXG4gICAgICBpZiAoeiA+IDApXG4gICAgICAgIGFjYyA9IGFjYy5hZGQod25kWyh6IC0gMSkgPj4gMV0pO1xuICAgICAgZWxzZVxuICAgICAgICBhY2MgPSBhY2MuYWRkKHduZFsoLXogLSAxKSA+PiAxXS5uZWcoKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBwLnR5cGUgPT09ICdhZmZpbmUnID8gYWNjLnRvUCgpIDogYWNjO1xufTtcblxuQmFzZUN1cnZlLnByb3RvdHlwZS5fd25hZk11bEFkZCA9IGZ1bmN0aW9uIF93bmFmTXVsQWRkKGRlZlcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZmcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4pIHtcbiAgdmFyIHduZFdpZHRoID0gdGhpcy5fd25hZlQxO1xuICB2YXIgd25kID0gdGhpcy5fd25hZlQyO1xuICB2YXIgbmFmID0gdGhpcy5fd25hZlQzO1xuXG4gIC8vIEZpbGwgYWxsIGFycmF5c1xuICB2YXIgbWF4ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBwID0gcG9pbnRzW2ldO1xuICAgIHZhciBuYWZQb2ludHMgPSBwLl9nZXROQUZQb2ludHMoZGVmVyk7XG4gICAgd25kV2lkdGhbaV0gPSBuYWZQb2ludHMud25kO1xuICAgIHduZFtpXSA9IG5hZlBvaW50cy5wb2ludHM7XG4gIH1cblxuICAvLyBDb21iIHNtYWxsIHdpbmRvdyBOQUZzXG4gIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDE7IGkgLT0gMikge1xuICAgIHZhciBhID0gaSAtIDE7XG4gICAgdmFyIGIgPSBpO1xuICAgIGlmICh3bmRXaWR0aFthXSAhPT0gMSB8fCB3bmRXaWR0aFtiXSAhPT0gMSkge1xuICAgICAgbmFmW2FdID0gZ2V0TkFGKGNvZWZmc1thXSwgd25kV2lkdGhbYV0pO1xuICAgICAgbmFmW2JdID0gZ2V0TkFGKGNvZWZmc1tiXSwgd25kV2lkdGhbYl0pO1xuICAgICAgbWF4ID0gTWF0aC5tYXgobmFmW2FdLmxlbmd0aCwgbWF4KTtcbiAgICAgIG1heCA9IE1hdGgubWF4KG5hZltiXS5sZW5ndGgsIG1heCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgY29tYiA9IFtcbiAgICAgIHBvaW50c1thXSwgLyogMSAqL1xuICAgICAgbnVsbCwgLyogMyAqL1xuICAgICAgbnVsbCwgLyogNSAqL1xuICAgICAgcG9pbnRzW2JdIC8qIDcgKi9cbiAgICBdO1xuXG4gICAgLy8gVHJ5IHRvIGF2b2lkIFByb2plY3RpdmUgcG9pbnRzLCBpZiBwb3NzaWJsZVxuICAgIGlmIChwb2ludHNbYV0ueS5jbXAocG9pbnRzW2JdLnkpID09PSAwKSB7XG4gICAgICBjb21iWzFdID0gcG9pbnRzW2FdLmFkZChwb2ludHNbYl0pO1xuICAgICAgY29tYlsyXSA9IHBvaW50c1thXS50b0ooKS5taXhlZEFkZChwb2ludHNbYl0ubmVnKCkpO1xuICAgIH0gZWxzZSBpZiAocG9pbnRzW2FdLnkuY21wKHBvaW50c1tiXS55LnJlZE5lZygpKSA9PT0gMCkge1xuICAgICAgY29tYlsxXSA9IHBvaW50c1thXS50b0ooKS5taXhlZEFkZChwb2ludHNbYl0pO1xuICAgICAgY29tYlsyXSA9IHBvaW50c1thXS5hZGQocG9pbnRzW2JdLm5lZygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tYlsxXSA9IHBvaW50c1thXS50b0ooKS5taXhlZEFkZChwb2ludHNbYl0pO1xuICAgICAgY29tYlsyXSA9IHBvaW50c1thXS50b0ooKS5taXhlZEFkZChwb2ludHNbYl0ubmVnKCkpO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IFtcbiAgICAgIC0zLCAvKiAtMSAtMSAqL1xuICAgICAgLTEsIC8qIC0xIDAgKi9cbiAgICAgIC01LCAvKiAtMSAxICovXG4gICAgICAtNywgLyogMCAtMSAqL1xuICAgICAgMCwgLyogMCAwICovXG4gICAgICA3LCAvKiAwIDEgKi9cbiAgICAgIDUsIC8qIDEgLTEgKi9cbiAgICAgIDEsIC8qIDEgMCAqL1xuICAgICAgMyAgLyogMSAxICovXG4gICAgXTtcblxuICAgIHZhciBqc2YgPSBnZXRKU0YoY29lZmZzW2FdLCBjb2VmZnNbYl0pO1xuICAgIG1heCA9IE1hdGgubWF4KGpzZlswXS5sZW5ndGgsIG1heCk7XG4gICAgbmFmW2FdID0gbmV3IEFycmF5KG1heCk7XG4gICAgbmFmW2JdID0gbmV3IEFycmF5KG1heCk7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXg7IGorKykge1xuICAgICAgdmFyIGphID0ganNmWzBdW2pdIHwgMDtcbiAgICAgIHZhciBqYiA9IGpzZlsxXVtqXSB8IDA7XG5cbiAgICAgIG5hZlthXVtqXSA9IGluZGV4WyhqYSArIDEpICogMyArIChqYiArIDEpXTtcbiAgICAgIG5hZltiXVtqXSA9IDA7XG4gICAgICB3bmRbYV0gPSBjb21iO1xuICAgIH1cbiAgfVxuXG4gIHZhciBhY2MgPSB0aGlzLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcbiAgdmFyIHRtcCA9IHRoaXMuX3duYWZUNDtcbiAgZm9yICh2YXIgaSA9IG1heDsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgayA9IDA7XG5cbiAgICB3aGlsZSAoaSA+PSAwKSB7XG4gICAgICB2YXIgemVybyA9IHRydWU7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgIHRtcFtqXSA9IG5hZltqXVtpXSB8IDA7XG4gICAgICAgIGlmICh0bXBbal0gIT09IDApXG4gICAgICAgICAgemVybyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCF6ZXJvKVxuICAgICAgICBicmVhaztcbiAgICAgIGsrKztcbiAgICAgIGktLTtcbiAgICB9XG4gICAgaWYgKGkgPj0gMClcbiAgICAgIGsrKztcbiAgICBhY2MgPSBhY2MuZGJscChrKTtcbiAgICBpZiAoaSA8IDApXG4gICAgICBicmVhaztcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIHZhciB6ID0gdG1wW2pdO1xuICAgICAgdmFyIHA7XG4gICAgICBpZiAoeiA9PT0gMClcbiAgICAgICAgY29udGludWU7XG4gICAgICBlbHNlIGlmICh6ID4gMClcbiAgICAgICAgcCA9IHduZFtqXVsoeiAtIDEpID4+IDFdO1xuICAgICAgZWxzZSBpZiAoeiA8IDApXG4gICAgICAgIHAgPSB3bmRbal1bKC16IC0gMSkgPj4gMV0ubmVnKCk7XG5cbiAgICAgIGlmIChwLnR5cGUgPT09ICdhZmZpbmUnKVxuICAgICAgICBhY2MgPSBhY2MubWl4ZWRBZGQocCk7XG4gICAgICBlbHNlXG4gICAgICAgIGFjYyA9IGFjYy5hZGQocCk7XG4gICAgfVxuICB9XG4gIC8vIFplcm9pZnkgcmVmZXJlbmNlc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHduZFtpXSA9IG51bGw7XG4gIHJldHVybiBhY2MudG9QKCk7XG59O1xuXG5mdW5jdGlvbiBCYXNlUG9pbnQoY3VydmUsIHR5cGUpIHtcbiAgdGhpcy5jdXJ2ZSA9IGN1cnZlO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnByZWNvbXB1dGVkID0gbnVsbDtcbn1cbkJhc2VDdXJ2ZS5CYXNlUG9pbnQgPSBCYXNlUG9pbnQ7XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcSgvKm90aGVyKi8pIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZSgpIHtcbiAgcmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyk7XG59O1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLmRlY29kZVBvaW50ID0gZnVuY3Rpb24gZGVjb2RlUG9pbnQoYnl0ZXMsIGVuYykge1xuICBieXRlcyA9IHV0aWxzLnRvQXJyYXkoYnl0ZXMsIGVuYyk7XG5cbiAgdmFyIGxlbiA9IHRoaXMucC5ieXRlTGVuZ3RoKCk7XG4gIGlmIChieXRlc1swXSA9PT0gMHgwNCAmJiBieXRlcy5sZW5ndGggLSAxID09PSAyICogbGVuKSB7XG4gICAgcmV0dXJuIHRoaXMucG9pbnQoYnl0ZXMuc2xpY2UoMSwgMSArIGxlbiksXG4gICAgICAgICAgICAgICAgICAgICAgYnl0ZXMuc2xpY2UoMSArIGxlbiwgMSArIDIgKiBsZW4pKTtcbiAgfSBlbHNlIGlmICgoYnl0ZXNbMF0gPT09IDB4MDIgfHwgYnl0ZXNbMF0gPT09IDB4MDMpICYmXG4gICAgICAgICAgICAgIGJ5dGVzLmxlbmd0aCAtIDEgPT09IGxlbikge1xuICAgIHJldHVybiB0aGlzLnBvaW50RnJvbVgoYnl0ZXMuc2xpY2UoMSwgMSArIGxlbiksIGJ5dGVzWzBdID09PSAweDAzKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gcG9pbnQgZm9ybWF0Jyk7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWQgPSBmdW5jdGlvbiBlbmNvZGVDb21wcmVzc2VkKGVuYykge1xuICByZXR1cm4gdGhpcy5lbmNvZGUoZW5jLCB0cnVlKTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuX2VuY29kZSA9IGZ1bmN0aW9uIF9lbmNvZGUoY29tcGFjdCkge1xuICB2YXIgbGVuID0gdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKTtcbiAgdmFyIHggPSB0aGlzLmdldFgoKS50b0FycmF5KCdiZScsIGxlbik7XG5cbiAgaWYgKGNvbXBhY3QpXG4gICAgcmV0dXJuIFsgdGhpcy5nZXRZKCkuaXNFdmVuKCkgPyAweDAyIDogMHgwMyBdLmNvbmNhdCh4KTtcblxuICByZXR1cm4gWyAweDA0IF0uY29uY2F0KHgsIHRoaXMuZ2V0WSgpLnRvQXJyYXkoJ2JlJywgbGVuKSkgO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoZW5jLCBjb21wYWN0KSB7XG4gIHJldHVybiB1dGlscy5lbmNvZGUodGhpcy5fZW5jb2RlKGNvbXBhY3QpLCBlbmMpO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5wcmVjb21wdXRlID0gZnVuY3Rpb24gcHJlY29tcHV0ZShwb3dlcikge1xuICBpZiAodGhpcy5wcmVjb21wdXRlZClcbiAgICByZXR1cm4gdGhpcztcblxuICB2YXIgcHJlY29tcHV0ZWQgPSB7XG4gICAgZG91YmxlczogbnVsbCxcbiAgICBuYWY6IG51bGwsXG4gICAgYmV0YTogbnVsbFxuICB9O1xuICBwcmVjb21wdXRlZC5uYWYgPSB0aGlzLl9nZXROQUZQb2ludHMoOCk7XG4gIHByZWNvbXB1dGVkLmRvdWJsZXMgPSB0aGlzLl9nZXREb3VibGVzKDQsIHBvd2VyKTtcbiAgcHJlY29tcHV0ZWQuYmV0YSA9IHRoaXMuX2dldEJldGEoKTtcbiAgdGhpcy5wcmVjb21wdXRlZCA9IHByZWNvbXB1dGVkO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5faGFzRG91YmxlcyA9IGZ1bmN0aW9uIF9oYXNEb3VibGVzKGspIHtcbiAgaWYgKCF0aGlzLnByZWNvbXB1dGVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICB2YXIgZG91YmxlcyA9IHRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztcbiAgaWYgKCFkb3VibGVzKVxuICAgIHJldHVybiBmYWxzZTtcblxuICByZXR1cm4gZG91Ymxlcy5wb2ludHMubGVuZ3RoID49IE1hdGguY2VpbCgoay5iaXRMZW5ndGgoKSArIDEpIC8gZG91Ymxlcy5zdGVwKTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuX2dldERvdWJsZXMgPSBmdW5jdGlvbiBfZ2V0RG91YmxlcyhzdGVwLCBwb3dlcikge1xuICBpZiAodGhpcy5wcmVjb21wdXRlZCAmJiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpXG4gICAgcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztcblxuICB2YXIgZG91YmxlcyA9IFsgdGhpcyBdO1xuICB2YXIgYWNjID0gdGhpcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3dlcjsgaSArPSBzdGVwKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdGVwOyBqKyspXG4gICAgICBhY2MgPSBhY2MuZGJsKCk7XG4gICAgZG91Ymxlcy5wdXNoKGFjYyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdGVwOiBzdGVwLFxuICAgIHBvaW50czogZG91Ymxlc1xuICB9O1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzID0gZnVuY3Rpb24gX2dldE5BRlBvaW50cyh3bmQpIHtcbiAgaWYgKHRoaXMucHJlY29tcHV0ZWQgJiYgdGhpcy5wcmVjb21wdXRlZC5uYWYpXG4gICAgcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQubmFmO1xuXG4gIHZhciByZXMgPSBbIHRoaXMgXTtcbiAgdmFyIG1heCA9ICgxIDw8IHduZCkgLSAxO1xuICB2YXIgZGJsID0gbWF4ID09PSAxID8gbnVsbCA6IHRoaXMuZGJsKCk7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbWF4OyBpKyspXG4gICAgcmVzW2ldID0gcmVzW2kgLSAxXS5hZGQoZGJsKTtcbiAgcmV0dXJuIHtcbiAgICB3bmQ6IHduZCxcbiAgICBwb2ludHM6IHJlc1xuICB9O1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5fZ2V0QmV0YSA9IGZ1bmN0aW9uIF9nZXRCZXRhKCkge1xuICByZXR1cm4gbnVsbDtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuZGJscCA9IGZ1bmN0aW9uIGRibHAoaykge1xuICB2YXIgciA9IHRoaXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgazsgaSsrKVxuICAgIHIgPSByLmRibCgpO1xuICByZXR1cm4gcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjdXJ2ZSA9IHJlcXVpcmUoJy4uL2N1cnZlJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG52YXIgQmFzZSA9IGN1cnZlLmJhc2U7XG5cbnZhciBhc3NlcnQgPSBlbGxpcHRpYy51dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIEVkd2FyZHNDdXJ2ZShjb25mKSB7XG4gIC8vIE5PVEU6IEltcG9ydGFudCBhcyB3ZSBhcmUgY3JlYXRpbmcgcG9pbnQgaW4gQmFzZS5jYWxsKClcbiAgdGhpcy50d2lzdGVkID0gKGNvbmYuYSB8IDApICE9PSAxO1xuICB0aGlzLm1PbmVBID0gdGhpcy50d2lzdGVkICYmIChjb25mLmEgfCAwKSA9PT0gLTE7XG4gIHRoaXMuZXh0ZW5kZWQgPSB0aGlzLm1PbmVBO1xuXG4gIEJhc2UuY2FsbCh0aGlzLCAnZWR3YXJkcycsIGNvbmYpO1xuXG4gIHRoaXMuYSA9IG5ldyBCTihjb25mLmEsIDE2KS51bW9kKHRoaXMucmVkLm0pO1xuICB0aGlzLmEgPSB0aGlzLmEudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLmMgPSBuZXcgQk4oY29uZi5jLCAxNikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLmMyID0gdGhpcy5jLnJlZFNxcigpO1xuICB0aGlzLmQgPSBuZXcgQk4oY29uZi5kLCAxNikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLmRkID0gdGhpcy5kLnJlZEFkZCh0aGlzLmQpO1xuXG4gIGFzc2VydCghdGhpcy50d2lzdGVkIHx8IHRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSA9PT0gMCk7XG4gIHRoaXMub25lQyA9IChjb25mLmMgfCAwKSA9PT0gMTtcbn1cbmluaGVyaXRzKEVkd2FyZHNDdXJ2ZSwgQmFzZSk7XG5tb2R1bGUuZXhwb3J0cyA9IEVkd2FyZHNDdXJ2ZTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5fbXVsQSA9IGZ1bmN0aW9uIF9tdWxBKG51bSkge1xuICBpZiAodGhpcy5tT25lQSlcbiAgICByZXR1cm4gbnVtLnJlZE5lZygpO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuYS5yZWRNdWwobnVtKTtcbn07XG5cbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUuX211bEMgPSBmdW5jdGlvbiBfbXVsQyhudW0pIHtcbiAgaWYgKHRoaXMub25lQylcbiAgICByZXR1cm4gbnVtO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuYy5yZWRNdWwobnVtKTtcbn07XG5cbi8vIEp1c3QgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBTaG9ydCBjdXJ2ZVxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5qcG9pbnQgPSBmdW5jdGlvbiBqcG9pbnQoeCwgeSwgeiwgdCkge1xuICByZXR1cm4gdGhpcy5wb2ludCh4LCB5LCB6LCB0KTtcbn07XG5cbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUucG9pbnRGcm9tWCA9IGZ1bmN0aW9uIHBvaW50RnJvbVgoeCwgb2RkKSB7XG4gIHggPSBuZXcgQk4oeCwgMTYpO1xuICBpZiAoIXgucmVkKVxuICAgIHggPSB4LnRvUmVkKHRoaXMucmVkKTtcblxuICB2YXIgeDIgPSB4LnJlZFNxcigpO1xuICB2YXIgcmhzID0gdGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11bCh4MikpO1xuICB2YXIgbGhzID0gdGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKHgyKSk7XG5cbiAgdmFyIHkyID0gcmhzLnJlZE11bChsaHMucmVkSW52bSgpKTtcbiAgdmFyIHkgPSB5Mi5yZWRTcXJ0KCk7XG4gIGlmICh5LnJlZFNxcigpLnJlZFN1Yih5MikuY21wKHRoaXMuemVybykgIT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBvaW50Jyk7XG5cbiAgdmFyIGlzT2RkID0geS5mcm9tUmVkKCkuaXNPZGQoKTtcbiAgaWYgKG9kZCAmJiAhaXNPZGQgfHwgIW9kZCAmJiBpc09kZClcbiAgICB5ID0geS5yZWROZWcoKTtcblxuICByZXR1cm4gdGhpcy5wb2ludCh4LCB5KTtcbn07XG5cbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUucG9pbnRGcm9tWSA9IGZ1bmN0aW9uIHBvaW50RnJvbVkoeSwgb2RkKSB7XG4gIHkgPSBuZXcgQk4oeSwgMTYpO1xuICBpZiAoIXkucmVkKVxuICAgIHkgPSB5LnRvUmVkKHRoaXMucmVkKTtcblxuICAvLyB4XjIgPSAoeV4yIC0gMSkgLyAoZCB5XjIgKyAxKVxuICB2YXIgeTIgPSB5LnJlZFNxcigpO1xuICB2YXIgbGhzID0geTIucmVkU3ViKHRoaXMub25lKTtcbiAgdmFyIHJocyA9IHkyLnJlZE11bCh0aGlzLmQpLnJlZEFkZCh0aGlzLm9uZSk7XG4gIHZhciB4MiA9IGxocy5yZWRNdWwocmhzLnJlZEludm0oKSk7XG5cbiAgaWYgKHgyLmNtcCh0aGlzLnplcm8pID09PSAwKSB7XG4gICAgaWYgKG9kZClcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwb2ludCcpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB0aGlzLnBvaW50KHRoaXMuemVybywgeSk7XG4gIH1cblxuICB2YXIgeCA9IHgyLnJlZFNxcnQoKTtcbiAgaWYgKHgucmVkU3FyKCkucmVkU3ViKHgyKS5jbXAodGhpcy56ZXJvKSAhPT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcG9pbnQnKTtcblxuICBpZiAoeC5pc09kZCgpICE9PSBvZGQpXG4gICAgeCA9IHgucmVkTmVnKCk7XG5cbiAgcmV0dXJuIHRoaXMucG9pbnQoeCwgeSk7XG59O1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gdmFsaWRhdGUocG9pbnQpIHtcbiAgaWYgKHBvaW50LmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdHJ1ZTtcblxuICAvLyBDdXJ2ZTogQSAqIFheMiArIFleMiA9IENeMiAqICgxICsgRCAqIFheMiAqIFleMilcbiAgcG9pbnQubm9ybWFsaXplKCk7XG5cbiAgdmFyIHgyID0gcG9pbnQueC5yZWRTcXIoKTtcbiAgdmFyIHkyID0gcG9pbnQueS5yZWRTcXIoKTtcbiAgdmFyIGxocyA9IHgyLnJlZE11bCh0aGlzLmEpLnJlZEFkZCh5Mik7XG4gIHZhciByaHMgPSB0aGlzLmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bCh4MikucmVkTXVsKHkyKSkpO1xuXG4gIHJldHVybiBsaHMuY21wKHJocykgPT09IDA7XG59O1xuXG5mdW5jdGlvbiBQb2ludChjdXJ2ZSwgeCwgeSwgeiwgdCkge1xuICBCYXNlLkJhc2VQb2ludC5jYWxsKHRoaXMsIGN1cnZlLCAncHJvamVjdGl2ZScpO1xuICBpZiAoeCA9PT0gbnVsbCAmJiB5ID09PSBudWxsICYmIHogPT09IG51bGwpIHtcbiAgICB0aGlzLnggPSB0aGlzLmN1cnZlLnplcm87XG4gICAgdGhpcy55ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gICAgdGhpcy56ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gICAgdGhpcy50ID0gdGhpcy5jdXJ2ZS56ZXJvO1xuICAgIHRoaXMuek9uZSA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy54ID0gbmV3IEJOKHgsIDE2KTtcbiAgICB0aGlzLnkgPSBuZXcgQk4oeSwgMTYpO1xuICAgIHRoaXMueiA9IHogPyBuZXcgQk4oeiwgMTYpIDogdGhpcy5jdXJ2ZS5vbmU7XG4gICAgdGhpcy50ID0gdCAmJiBuZXcgQk4odCwgMTYpO1xuICAgIGlmICghdGhpcy54LnJlZClcbiAgICAgIHRoaXMueCA9IHRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgaWYgKCF0aGlzLnkucmVkKVxuICAgICAgdGhpcy55ID0gdGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICBpZiAoIXRoaXMuei5yZWQpXG4gICAgICB0aGlzLnogPSB0aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIGlmICh0aGlzLnQgJiYgIXRoaXMudC5yZWQpXG4gICAgICB0aGlzLnQgPSB0aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIHRoaXMuek9uZSA9IHRoaXMueiA9PT0gdGhpcy5jdXJ2ZS5vbmU7XG5cbiAgICAvLyBVc2UgZXh0ZW5kZWQgY29vcmRpbmF0ZXNcbiAgICBpZiAodGhpcy5jdXJ2ZS5leHRlbmRlZCAmJiAhdGhpcy50KSB7XG4gICAgICB0aGlzLnQgPSB0aGlzLngucmVkTXVsKHRoaXMueSk7XG4gICAgICBpZiAoIXRoaXMuek9uZSlcbiAgICAgICAgdGhpcy50ID0gdGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKTtcbiAgICB9XG4gIH1cbn1cbmluaGVyaXRzKFBvaW50LCBCYXNlLkJhc2VQb2ludCk7XG5cbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTiA9IGZ1bmN0aW9uIHBvaW50RnJvbUpTT04ob2JqKSB7XG4gIHJldHVybiBQb2ludC5mcm9tSlNPTih0aGlzLCBvYmopO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5wb2ludCA9IGZ1bmN0aW9uIHBvaW50KHgsIHksIHosIHQpIHtcbiAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLCB4LCB5LCB6LCB0KTtcbn07XG5cblBvaW50LmZyb21KU09OID0gZnVuY3Rpb24gZnJvbUpTT04oY3VydmUsIG9iaikge1xuICByZXR1cm4gbmV3IFBvaW50KGN1cnZlLCBvYmpbMF0sIG9ialsxXSwgb2JqWzJdKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiAnPEVDIFBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIFBvaW50IHg6ICcgKyB0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHk6ICcgKyB0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHo6ICcgKyB0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArICc+Jztcbn07XG5cblBvaW50LnByb3RvdHlwZS5pc0luZmluaXR5ID0gZnVuY3Rpb24gaXNJbmZpbml0eSgpIHtcbiAgLy8gWFhYIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgemVybyBpcyBhbHdheXMgemVybyBpbiByZWRcbiAgcmV0dXJuIHRoaXMueC5jbXBuKDApID09PSAwICYmXG4gICAgICAgICB0aGlzLnkuY21wKHRoaXMueikgPT09IDA7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX2V4dERibCA9IGZ1bmN0aW9uIF9leHREYmwoKSB7XG4gIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by10d2lzdGVkLWV4dGVuZGVkLTEuaHRtbFxuICAvLyAgICAgI2RvdWJsaW5nLWRibC0yMDA4LWh3Y2RcbiAgLy8gNE0gKyA0U1xuXG4gIC8vIEEgPSBYMV4yXG4gIHZhciBhID0gdGhpcy54LnJlZFNxcigpO1xuICAvLyBCID0gWTFeMlxuICB2YXIgYiA9IHRoaXMueS5yZWRTcXIoKTtcbiAgLy8gQyA9IDIgKiBaMV4yXG4gIHZhciBjID0gdGhpcy56LnJlZFNxcigpO1xuICBjID0gYy5yZWRJQWRkKGMpO1xuICAvLyBEID0gYSAqIEFcbiAgdmFyIGQgPSB0aGlzLmN1cnZlLl9tdWxBKGEpO1xuICAvLyBFID0gKFgxICsgWTEpXjIgLSBBIC0gQlxuICB2YXIgZSA9IHRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYik7XG4gIC8vIEcgPSBEICsgQlxuICB2YXIgZyA9IGQucmVkQWRkKGIpO1xuICAvLyBGID0gRyAtIENcbiAgdmFyIGYgPSBnLnJlZFN1YihjKTtcbiAgLy8gSCA9IEQgLSBCXG4gIHZhciBoID0gZC5yZWRTdWIoYik7XG4gIC8vIFgzID0gRSAqIEZcbiAgdmFyIG54ID0gZS5yZWRNdWwoZik7XG4gIC8vIFkzID0gRyAqIEhcbiAgdmFyIG55ID0gZy5yZWRNdWwoaCk7XG4gIC8vIFQzID0gRSAqIEhcbiAgdmFyIG50ID0gZS5yZWRNdWwoaCk7XG4gIC8vIFozID0gRiAqIEdcbiAgdmFyIG56ID0gZi5yZWRNdWwoZyk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSwgbnosIG50KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5fcHJvakRibCA9IGZ1bmN0aW9uIF9wcm9qRGJsKCkge1xuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tdHdpc3RlZC1wcm9qZWN0aXZlLmh0bWxcbiAgLy8gICAgICNkb3VibGluZy1kYmwtMjAwOC1iYmpscFxuICAvLyAgICAgI2RvdWJsaW5nLWRibC0yMDA3LWJsXG4gIC8vIGFuZCBvdGhlcnNcbiAgLy8gR2VuZXJhbGx5IDNNICsgNFMgb3IgMk0gKyA0U1xuXG4gIC8vIEIgPSAoWDEgKyBZMSleMlxuICB2YXIgYiA9IHRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKTtcbiAgLy8gQyA9IFgxXjJcbiAgdmFyIGMgPSB0aGlzLngucmVkU3FyKCk7XG4gIC8vIEQgPSBZMV4yXG4gIHZhciBkID0gdGhpcy55LnJlZFNxcigpO1xuXG4gIHZhciBueDtcbiAgdmFyIG55O1xuICB2YXIgbno7XG4gIGlmICh0aGlzLmN1cnZlLnR3aXN0ZWQpIHtcbiAgICAvLyBFID0gYSAqIENcbiAgICB2YXIgZSA9IHRoaXMuY3VydmUuX211bEEoYyk7XG4gICAgLy8gRiA9IEUgKyBEXG4gICAgdmFyIGYgPSBlLnJlZEFkZChkKTtcbiAgICBpZiAodGhpcy56T25lKSB7XG4gICAgICAvLyBYMyA9IChCIC0gQyAtIEQpICogKEYgLSAyKVxuICAgICAgbnggPSBiLnJlZFN1YihjKS5yZWRTdWIoZCkucmVkTXVsKGYucmVkU3ViKHRoaXMuY3VydmUudHdvKSk7XG4gICAgICAvLyBZMyA9IEYgKiAoRSAtIEQpXG4gICAgICBueSA9IGYucmVkTXVsKGUucmVkU3ViKGQpKTtcbiAgICAgIC8vIFozID0gRl4yIC0gMiAqIEZcbiAgICAgIG56ID0gZi5yZWRTcXIoKS5yZWRTdWIoZikucmVkU3ViKGYpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIID0gWjFeMlxuICAgICAgdmFyIGggPSB0aGlzLnoucmVkU3FyKCk7XG4gICAgICAvLyBKID0gRiAtIDIgKiBIXG4gICAgICB2YXIgaiA9IGYucmVkU3ViKGgpLnJlZElTdWIoaCk7XG4gICAgICAvLyBYMyA9IChCLUMtRCkqSlxuICAgICAgbnggPSBiLnJlZFN1YihjKS5yZWRJU3ViKGQpLnJlZE11bChqKTtcbiAgICAgIC8vIFkzID0gRiAqIChFIC0gRClcbiAgICAgIG55ID0gZi5yZWRNdWwoZS5yZWRTdWIoZCkpO1xuICAgICAgLy8gWjMgPSBGICogSlxuICAgICAgbnogPSBmLnJlZE11bChqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gRSA9IEMgKyBEXG4gICAgdmFyIGUgPSBjLnJlZEFkZChkKTtcbiAgICAvLyBIID0gKGMgKiBaMSleMlxuICAgIHZhciBoID0gdGhpcy5jdXJ2ZS5fbXVsQyh0aGlzLmMucmVkTXVsKHRoaXMueikpLnJlZFNxcigpO1xuICAgIC8vIEogPSBFIC0gMiAqIEhcbiAgICB2YXIgaiA9IGUucmVkU3ViKGgpLnJlZFN1YihoKTtcbiAgICAvLyBYMyA9IGMgKiAoQiAtIEUpICogSlxuICAgIG54ID0gdGhpcy5jdXJ2ZS5fbXVsQyhiLnJlZElTdWIoZSkpLnJlZE11bChqKTtcbiAgICAvLyBZMyA9IGMgKiBFICogKEMgLSBEKVxuICAgIG55ID0gdGhpcy5jdXJ2ZS5fbXVsQyhlKS5yZWRNdWwoYy5yZWRJU3ViKGQpKTtcbiAgICAvLyBaMyA9IEUgKiBKXG4gICAgbnogPSBlLnJlZE11bChqKTtcbiAgfVxuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnksIG56KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5kYmwgPSBmdW5jdGlvbiBkYmwoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBEb3VibGUgaW4gZXh0ZW5kZWQgY29vcmRpbmF0ZXNcbiAgaWYgKHRoaXMuY3VydmUuZXh0ZW5kZWQpXG4gICAgcmV0dXJuIHRoaXMuX2V4dERibCgpO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuX3Byb2pEYmwoKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5fZXh0QWRkID0gZnVuY3Rpb24gX2V4dEFkZChwKSB7XG4gIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by10d2lzdGVkLWV4dGVuZGVkLTEuaHRtbFxuICAvLyAgICAgI2FkZGl0aW9uLWFkZC0yMDA4LWh3Y2QtM1xuICAvLyA4TVxuXG4gIC8vIEEgPSAoWTEgLSBYMSkgKiAoWTIgLSBYMilcbiAgdmFyIGEgPSB0aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKHAueS5yZWRTdWIocC54KSk7XG4gIC8vIEIgPSAoWTEgKyBYMSkgKiAoWTIgKyBYMilcbiAgdmFyIGIgPSB0aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKHAueS5yZWRBZGQocC54KSk7XG4gIC8vIEMgPSBUMSAqIGsgKiBUMlxuICB2YXIgYyA9IHRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVsKHAudCk7XG4gIC8vIEQgPSBaMSAqIDIgKiBaMlxuICB2YXIgZCA9IHRoaXMuei5yZWRNdWwocC56LnJlZEFkZChwLnopKTtcbiAgLy8gRSA9IEIgLSBBXG4gIHZhciBlID0gYi5yZWRTdWIoYSk7XG4gIC8vIEYgPSBEIC0gQ1xuICB2YXIgZiA9IGQucmVkU3ViKGMpO1xuICAvLyBHID0gRCArIENcbiAgdmFyIGcgPSBkLnJlZEFkZChjKTtcbiAgLy8gSCA9IEIgKyBBXG4gIHZhciBoID0gYi5yZWRBZGQoYSk7XG4gIC8vIFgzID0gRSAqIEZcbiAgdmFyIG54ID0gZS5yZWRNdWwoZik7XG4gIC8vIFkzID0gRyAqIEhcbiAgdmFyIG55ID0gZy5yZWRNdWwoaCk7XG4gIC8vIFQzID0gRSAqIEhcbiAgdmFyIG50ID0gZS5yZWRNdWwoaCk7XG4gIC8vIFozID0gRiAqIEdcbiAgdmFyIG56ID0gZi5yZWRNdWwoZyk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSwgbnosIG50KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5fcHJvakFkZCA9IGZ1bmN0aW9uIF9wcm9qQWRkKHApIHtcbiAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXR3aXN0ZWQtcHJvamVjdGl2ZS5odG1sXG4gIC8vICAgICAjYWRkaXRpb24tYWRkLTIwMDgtYmJqbHBcbiAgLy8gICAgICNhZGRpdGlvbi1hZGQtMjAwNy1ibFxuICAvLyAxME0gKyAxU1xuXG4gIC8vIEEgPSBaMSAqIFoyXG4gIHZhciBhID0gdGhpcy56LnJlZE11bChwLnopO1xuICAvLyBCID0gQV4yXG4gIHZhciBiID0gYS5yZWRTcXIoKTtcbiAgLy8gQyA9IFgxICogWDJcbiAgdmFyIGMgPSB0aGlzLngucmVkTXVsKHAueCk7XG4gIC8vIEQgPSBZMSAqIFkyXG4gIHZhciBkID0gdGhpcy55LnJlZE11bChwLnkpO1xuICAvLyBFID0gZCAqIEMgKiBEXG4gIHZhciBlID0gdGhpcy5jdXJ2ZS5kLnJlZE11bChjKS5yZWRNdWwoZCk7XG4gIC8vIEYgPSBCIC0gRVxuICB2YXIgZiA9IGIucmVkU3ViKGUpO1xuICAvLyBHID0gQiArIEVcbiAgdmFyIGcgPSBiLnJlZEFkZChlKTtcbiAgLy8gWDMgPSBBICogRiAqICgoWDEgKyBZMSkgKiAoWDIgKyBZMikgLSBDIC0gRClcbiAgdmFyIHRtcCA9IHRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwocC54LnJlZEFkZChwLnkpKS5yZWRJU3ViKGMpLnJlZElTdWIoZCk7XG4gIHZhciBueCA9IGEucmVkTXVsKGYpLnJlZE11bCh0bXApO1xuICB2YXIgbnk7XG4gIHZhciBuejtcbiAgaWYgKHRoaXMuY3VydmUudHdpc3RlZCkge1xuICAgIC8vIFkzID0gQSAqIEcgKiAoRCAtIGEgKiBDKVxuICAgIG55ID0gYS5yZWRNdWwoZykucmVkTXVsKGQucmVkU3ViKHRoaXMuY3VydmUuX211bEEoYykpKTtcbiAgICAvLyBaMyA9IEYgKiBHXG4gICAgbnogPSBmLnJlZE11bChnKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBZMyA9IEEgKiBHICogKEQgLSBDKVxuICAgIG55ID0gYS5yZWRNdWwoZykucmVkTXVsKGQucmVkU3ViKGMpKTtcbiAgICAvLyBaMyA9IGMgKiBGICogR1xuICAgIG56ID0gdGhpcy5jdXJ2ZS5fbXVsQyhmKS5yZWRNdWwoZyk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55LCBueik7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKHApIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiBwO1xuICBpZiAocC5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKHRoaXMuY3VydmUuZXh0ZW5kZWQpXG4gICAgcmV0dXJuIHRoaXMuX2V4dEFkZChwKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLl9wcm9qQWRkKHApO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bChrKSB7XG4gIGlmICh0aGlzLl9oYXNEb3VibGVzKGspKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLCBrKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsIGspO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm11bEFkZCA9IGZ1bmN0aW9uIG11bEFkZChrMSwgcCwgazIpIHtcbiAgcmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSwgWyB0aGlzLCBwIF0sIFsgazEsIGsyIF0sIDIpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZSgpIHtcbiAgaWYgKHRoaXMuek9uZSlcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBOb3JtYWxpemUgY29vcmRpbmF0ZXNcbiAgdmFyIHppID0gdGhpcy56LnJlZEludm0oKTtcbiAgdGhpcy54ID0gdGhpcy54LnJlZE11bCh6aSk7XG4gIHRoaXMueSA9IHRoaXMueS5yZWRNdWwoemkpO1xuICBpZiAodGhpcy50KVxuICAgIHRoaXMudCA9IHRoaXMudC5yZWRNdWwoemkpO1xuICB0aGlzLnogPSB0aGlzLmN1cnZlLm9uZTtcbiAgdGhpcy56T25lID0gdHJ1ZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnKCkge1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTmVnKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnQgJiYgdGhpcy50LnJlZE5lZygpKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5nZXRYID0gZnVuY3Rpb24gZ2V0WCgpIHtcbiAgdGhpcy5ub3JtYWxpemUoKTtcbiAgcmV0dXJuIHRoaXMueC5mcm9tUmVkKCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WSA9IGZ1bmN0aW9uIGdldFkoKSB7XG4gIHRoaXMubm9ybWFsaXplKCk7XG4gIHJldHVybiB0aGlzLnkuZnJvbVJlZCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxID0gZnVuY3Rpb24gZXEob3RoZXIpIHtcbiAgcmV0dXJuIHRoaXMgPT09IG90aGVyIHx8XG4gICAgICAgICB0aGlzLmdldFgoKS5jbXAob3RoZXIuZ2V0WCgpKSA9PT0gMCAmJlxuICAgICAgICAgdGhpcy5nZXRZKCkuY21wKG90aGVyLmdldFkoKSkgPT09IDA7XG59O1xuXG4vLyBDb21wYXRpYmlsaXR5IHdpdGggQmFzZUN1cnZlXG5Qb2ludC5wcm90b3R5cGUudG9QID0gUG9pbnQucHJvdG90eXBlLm5vcm1hbGl6ZTtcblBvaW50LnByb3RvdHlwZS5taXhlZEFkZCA9IFBvaW50LnByb3RvdHlwZS5hZGQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjdXJ2ZSA9IGV4cG9ydHM7XG5cbmN1cnZlLmJhc2UgPSByZXF1aXJlKCcuL2Jhc2UnKTtcbmN1cnZlLnNob3J0ID0gcmVxdWlyZSgnLi9zaG9ydCcpO1xuY3VydmUubW9udCA9IHJlcXVpcmUoJy4vbW9udCcpO1xuY3VydmUuZWR3YXJkcyA9IHJlcXVpcmUoJy4vZWR3YXJkcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3VydmUgPSByZXF1aXJlKCcuLi9jdXJ2ZScpO1xudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG52YXIgQmFzZSA9IGN1cnZlLmJhc2U7XG5cbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgdXRpbHMgPSBlbGxpcHRpYy51dGlscztcblxuZnVuY3Rpb24gTW9udEN1cnZlKGNvbmYpIHtcbiAgQmFzZS5jYWxsKHRoaXMsICdtb250JywgY29uZik7XG5cbiAgdGhpcy5hID0gbmV3IEJOKGNvbmYuYSwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5iID0gbmV3IEJOKGNvbmYuYiwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5pNCA9IG5ldyBCTig0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpO1xuICB0aGlzLnR3byA9IG5ldyBCTigyKS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuYTI0ID0gdGhpcy5pNC5yZWRNdWwodGhpcy5hLnJlZEFkZCh0aGlzLnR3bykpO1xufVxuaW5oZXJpdHMoTW9udEN1cnZlLCBCYXNlKTtcbm1vZHVsZS5leHBvcnRzID0gTW9udEN1cnZlO1xuXG5Nb250Q3VydmUucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gdmFsaWRhdGUocG9pbnQpIHtcbiAgdmFyIHggPSBwb2ludC5ub3JtYWxpemUoKS54O1xuICB2YXIgeDIgPSB4LnJlZFNxcigpO1xuICB2YXIgcmhzID0geDIucmVkTXVsKHgpLnJlZEFkZCh4Mi5yZWRNdWwodGhpcy5hKSkucmVkQWRkKHgpO1xuICB2YXIgeSA9IHJocy5yZWRTcXJ0KCk7XG5cbiAgcmV0dXJuIHkucmVkU3FyKCkuY21wKHJocykgPT09IDA7XG59O1xuXG5mdW5jdGlvbiBQb2ludChjdXJ2ZSwgeCwgeikge1xuICBCYXNlLkJhc2VQb2ludC5jYWxsKHRoaXMsIGN1cnZlLCAncHJvamVjdGl2ZScpO1xuICBpZiAoeCA9PT0gbnVsbCAmJiB6ID09PSBudWxsKSB7XG4gICAgdGhpcy54ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gICAgdGhpcy56ID0gdGhpcy5jdXJ2ZS56ZXJvO1xuICB9IGVsc2Uge1xuICAgIHRoaXMueCA9IG5ldyBCTih4LCAxNik7XG4gICAgdGhpcy56ID0gbmV3IEJOKHosIDE2KTtcbiAgICBpZiAoIXRoaXMueC5yZWQpXG4gICAgICB0aGlzLnggPSB0aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIGlmICghdGhpcy56LnJlZClcbiAgICAgIHRoaXMueiA9IHRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gIH1cbn1cbmluaGVyaXRzKFBvaW50LCBCYXNlLkJhc2VQb2ludCk7XG5cbk1vbnRDdXJ2ZS5wcm90b3R5cGUuZGVjb2RlUG9pbnQgPSBmdW5jdGlvbiBkZWNvZGVQb2ludChieXRlcywgZW5jKSB7XG4gIHJldHVybiB0aGlzLnBvaW50KHV0aWxzLnRvQXJyYXkoYnl0ZXMsIGVuYyksIDEpO1xufTtcblxuTW9udEN1cnZlLnByb3RvdHlwZS5wb2ludCA9IGZ1bmN0aW9uIHBvaW50KHgsIHopIHtcbiAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLCB4LCB6KTtcbn07XG5cbk1vbnRDdXJ2ZS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTiA9IGZ1bmN0aW9uIHBvaW50RnJvbUpTT04ob2JqKSB7XG4gIHJldHVybiBQb2ludC5mcm9tSlNPTih0aGlzLCBvYmopO1xufTtcblxuUG9pbnQucHJvdG90eXBlLnByZWNvbXB1dGUgPSBmdW5jdGlvbiBwcmVjb21wdXRlKCkge1xuICAvLyBOby1vcFxufTtcblxuUG9pbnQucHJvdG90eXBlLl9lbmNvZGUgPSBmdW5jdGlvbiBfZW5jb2RlKCkge1xuICByZXR1cm4gdGhpcy5nZXRYKCkudG9BcnJheSgnYmUnLCB0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKTtcbn07XG5cblBvaW50LmZyb21KU09OID0gZnVuY3Rpb24gZnJvbUpTT04oY3VydmUsIG9iaikge1xuICByZXR1cm4gbmV3IFBvaW50KGN1cnZlLCBvYmpbMF0sIG9ialsxXSB8fCBjdXJ2ZS5vbmUpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuICc8RUMgUG9pbnQgSW5maW5pdHk+JztcbiAgcmV0dXJuICc8RUMgUG9pbnQgeDogJyArIHRoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsIDIpICtcbiAgICAgICcgejogJyArIHRoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsIDIpICsgJz4nO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmlzSW5maW5pdHkgPSBmdW5jdGlvbiBpc0luZmluaXR5KCkge1xuICAvLyBYWFggVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB6ZXJvIGlzIGFsd2F5cyB6ZXJvIGluIHJlZFxuICByZXR1cm4gdGhpcy56LmNtcG4oMCkgPT09IDA7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZGJsID0gZnVuY3Rpb24gZGJsKCkge1xuICAvLyBodHRwOi8vaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLW1vbnRnb20teHouaHRtbCNkb3VibGluZy1kYmwtMTk4Ny1tLTNcbiAgLy8gMk0gKyAyUyArIDRBXG5cbiAgLy8gQSA9IFgxICsgWjFcbiAgdmFyIGEgPSB0aGlzLngucmVkQWRkKHRoaXMueik7XG4gIC8vIEFBID0gQV4yXG4gIHZhciBhYSA9IGEucmVkU3FyKCk7XG4gIC8vIEIgPSBYMSAtIFoxXG4gIHZhciBiID0gdGhpcy54LnJlZFN1Yih0aGlzLnopO1xuICAvLyBCQiA9IEJeMlxuICB2YXIgYmIgPSBiLnJlZFNxcigpO1xuICAvLyBDID0gQUEgLSBCQlxuICB2YXIgYyA9IGFhLnJlZFN1YihiYik7XG4gIC8vIFgzID0gQUEgKiBCQlxuICB2YXIgbnggPSBhYS5yZWRNdWwoYmIpO1xuICAvLyBaMyA9IEMgKiAoQkIgKyBBMjQgKiBDKVxuICB2YXIgbnogPSBjLnJlZE11bChiYi5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKGMpKSk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueik7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZScpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmRpZmZBZGQgPSBmdW5jdGlvbiBkaWZmQWRkKHAsIGRpZmYpIHtcbiAgLy8gaHR0cDovL2h5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1tb250Z29tLXh6Lmh0bWwjZGlmZmFkZC1kYWRkLTE5ODctbS0zXG4gIC8vIDRNICsgMlMgKyA2QVxuXG4gIC8vIEEgPSBYMiArIFoyXG4gIHZhciBhID0gdGhpcy54LnJlZEFkZCh0aGlzLnopO1xuICAvLyBCID0gWDIgLSBaMlxuICB2YXIgYiA9IHRoaXMueC5yZWRTdWIodGhpcy56KTtcbiAgLy8gQyA9IFgzICsgWjNcbiAgdmFyIGMgPSBwLngucmVkQWRkKHAueik7XG4gIC8vIEQgPSBYMyAtIFozXG4gIHZhciBkID0gcC54LnJlZFN1YihwLnopO1xuICAvLyBEQSA9IEQgKiBBXG4gIHZhciBkYSA9IGQucmVkTXVsKGEpO1xuICAvLyBDQiA9IEMgKiBCXG4gIHZhciBjYiA9IGMucmVkTXVsKGIpO1xuICAvLyBYNSA9IFoxICogKERBICsgQ0IpXjJcbiAgdmFyIG54ID0gZGlmZi56LnJlZE11bChkYS5yZWRBZGQoY2IpLnJlZFNxcigpKTtcbiAgLy8gWjUgPSBYMSAqIChEQSAtIENCKV4yXG4gIHZhciBueiA9IGRpZmYueC5yZWRNdWwoZGEucmVkSVN1YihjYikucmVkU3FyKCkpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnopO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bChrKSB7XG4gIHZhciB0ID0gay5jbG9uZSgpO1xuICB2YXIgYSA9IHRoaXM7IC8vIChOIC8gMikgKiBRICsgUVxuICB2YXIgYiA9IHRoaXMuY3VydmUucG9pbnQobnVsbCwgbnVsbCk7IC8vIChOIC8gMikgKiBRXG4gIHZhciBjID0gdGhpczsgLy8gUVxuXG4gIGZvciAodmFyIGJpdHMgPSBbXTsgdC5jbXBuKDApICE9PSAwOyB0Lml1c2hybigxKSlcbiAgICBiaXRzLnB1c2godC5hbmRsbigxKSk7XG5cbiAgZm9yICh2YXIgaSA9IGJpdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoYml0c1tpXSA9PT0gMCkge1xuICAgICAgLy8gTiAqIFEgKyBRID0gKChOIC8gMikgKiBRICsgUSkpICsgKE4gLyAyKSAqIFFcbiAgICAgIGEgPSBhLmRpZmZBZGQoYiwgYyk7XG4gICAgICAvLyBOICogUSA9IDIgKiAoKE4gLyAyKSAqIFEgKyBRKSlcbiAgICAgIGIgPSBiLmRibCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOICogUSA9ICgoTiAvIDIpICogUSArIFEpICsgKChOIC8gMikgKiBRKVxuICAgICAgYiA9IGEuZGlmZkFkZChiLCBjKTtcbiAgICAgIC8vIE4gKiBRICsgUSA9IDIgKiAoKE4gLyAyKSAqIFEgKyBRKVxuICAgICAgYSA9IGEuZGJsKCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBiO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm11bEFkZCA9IGZ1bmN0aW9uIG11bEFkZCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUnKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uIGVxKG90aGVyKSB7XG4gIHJldHVybiB0aGlzLmdldFgoKS5jbXAob3RoZXIuZ2V0WCgpKSA9PT0gMDtcbn07XG5cblBvaW50LnByb3RvdHlwZS5ub3JtYWxpemUgPSBmdW5jdGlvbiBub3JtYWxpemUoKSB7XG4gIHRoaXMueCA9IHRoaXMueC5yZWRNdWwodGhpcy56LnJlZEludm0oKSk7XG4gIHRoaXMueiA9IHRoaXMuY3VydmUub25lO1xuICByZXR1cm4gdGhpcztcbn07XG5cblBvaW50LnByb3RvdHlwZS5nZXRYID0gZnVuY3Rpb24gZ2V0WCgpIHtcbiAgLy8gTm9ybWFsaXplIGNvb3JkaW5hdGVzXG4gIHRoaXMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIHRoaXMueC5mcm9tUmVkKCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3VydmUgPSByZXF1aXJlKCcuLi9jdXJ2ZScpO1xudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xudmFyIEJhc2UgPSBjdXJ2ZS5iYXNlO1xuXG52YXIgYXNzZXJ0ID0gZWxsaXB0aWMudXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBTaG9ydEN1cnZlKGNvbmYpIHtcbiAgQmFzZS5jYWxsKHRoaXMsICdzaG9ydCcsIGNvbmYpO1xuXG4gIHRoaXMuYSA9IG5ldyBCTihjb25mLmEsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuYiA9IG5ldyBCTihjb25mLmIsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMudGludiA9IHRoaXMudHdvLnJlZEludm0oKTtcblxuICB0aGlzLnplcm9BID0gdGhpcy5hLmZyb21SZWQoKS5jbXBuKDApID09PSAwO1xuICB0aGlzLnRocmVlQSA9IHRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMykgPT09IDA7XG5cbiAgLy8gSWYgdGhlIGN1cnZlIGlzIGVuZG9tb3JwaGljLCBwcmVjYWxjdWxhdGUgYmV0YSBhbmQgbGFtYmRhXG4gIHRoaXMuZW5kbyA9IHRoaXMuX2dldEVuZG9tb3JwaGlzbShjb25mKTtcbiAgdGhpcy5fZW5kb1duYWZUMSA9IG5ldyBBcnJheSg0KTtcbiAgdGhpcy5fZW5kb1duYWZUMiA9IG5ldyBBcnJheSg0KTtcbn1cbmluaGVyaXRzKFNob3J0Q3VydmUsIEJhc2UpO1xubW9kdWxlLmV4cG9ydHMgPSBTaG9ydEN1cnZlO1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtID0gZnVuY3Rpb24gX2dldEVuZG9tb3JwaGlzbShjb25mKSB7XG4gIC8vIE5vIGVmZmljaWVudCBlbmRvbW9ycGhpc21cbiAgaWYgKCF0aGlzLnplcm9BIHx8ICF0aGlzLmcgfHwgIXRoaXMubiB8fCB0aGlzLnAubW9kbigzKSAhPT0gMSlcbiAgICByZXR1cm47XG5cbiAgLy8gQ29tcHV0ZSBiZXRhIGFuZCBsYW1iZGEsIHRoYXQgbGFtYmRhICogUCA9IChiZXRhICogUHg7IFB5KVxuICB2YXIgYmV0YTtcbiAgdmFyIGxhbWJkYTtcbiAgaWYgKGNvbmYuYmV0YSkge1xuICAgIGJldGEgPSBuZXcgQk4oY29uZi5iZXRhLCAxNikudG9SZWQodGhpcy5yZWQpO1xuICB9IGVsc2Uge1xuICAgIHZhciBiZXRhcyA9IHRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnApO1xuICAgIC8vIENob29zZSB0aGUgc21hbGxlc3QgYmV0YVxuICAgIGJldGEgPSBiZXRhc1swXS5jbXAoYmV0YXNbMV0pIDwgMCA/IGJldGFzWzBdIDogYmV0YXNbMV07XG4gICAgYmV0YSA9IGJldGEudG9SZWQodGhpcy5yZWQpO1xuICB9XG4gIGlmIChjb25mLmxhbWJkYSkge1xuICAgIGxhbWJkYSA9IG5ldyBCTihjb25mLmxhbWJkYSwgMTYpO1xuICB9IGVsc2Uge1xuICAgIC8vIENob29zZSB0aGUgbGFtYmRhIHRoYXQgaXMgbWF0Y2hpbmcgc2VsZWN0ZWQgYmV0YVxuICAgIHZhciBsYW1iZGFzID0gdGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMubik7XG4gICAgaWYgKHRoaXMuZy5tdWwobGFtYmRhc1swXSkueC5jbXAodGhpcy5nLngucmVkTXVsKGJldGEpKSA9PT0gMCkge1xuICAgICAgbGFtYmRhID0gbGFtYmRhc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFtYmRhID0gbGFtYmRhc1sxXTtcbiAgICAgIGFzc2VydCh0aGlzLmcubXVsKGxhbWJkYSkueC5jbXAodGhpcy5nLngucmVkTXVsKGJldGEpKSA9PT0gMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2V0IGJhc2lzIHZlY3RvcnMsIHVzZWQgZm9yIGJhbGFuY2VkIGxlbmd0aC10d28gcmVwcmVzZW50YXRpb25cbiAgdmFyIGJhc2lzO1xuICBpZiAoY29uZi5iYXNpcykge1xuICAgIGJhc2lzID0gY29uZi5iYXNpcy5tYXAoZnVuY3Rpb24odmVjKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhOiBuZXcgQk4odmVjLmEsIDE2KSxcbiAgICAgICAgYjogbmV3IEJOKHZlYy5iLCAxNilcbiAgICAgIH07XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYmFzaXMgPSB0aGlzLl9nZXRFbmRvQmFzaXMobGFtYmRhKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmV0YTogYmV0YSxcbiAgICBsYW1iZGE6IGxhbWJkYSxcbiAgICBiYXNpczogYmFzaXNcbiAgfTtcbn07XG5cblNob3J0Q3VydmUucHJvdG90eXBlLl9nZXRFbmRvUm9vdHMgPSBmdW5jdGlvbiBfZ2V0RW5kb1Jvb3RzKG51bSkge1xuICAvLyBGaW5kIHJvb3RzIG9mIGZvciB4XjIgKyB4ICsgMSBpbiBGXG4gIC8vIFJvb3QgPSAoLTEgKy0gU3FydCgtMykpIC8gMlxuICAvL1xuICB2YXIgcmVkID0gbnVtID09PSB0aGlzLnAgPyB0aGlzLnJlZCA6IEJOLm1vbnQobnVtKTtcbiAgdmFyIHRpbnYgPSBuZXcgQk4oMikudG9SZWQocmVkKS5yZWRJbnZtKCk7XG4gIHZhciBudGludiA9IHRpbnYucmVkTmVnKCk7XG5cbiAgdmFyIHMgPSBuZXcgQk4oMykudG9SZWQocmVkKS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKHRpbnYpO1xuXG4gIHZhciBsMSA9IG50aW52LnJlZEFkZChzKS5mcm9tUmVkKCk7XG4gIHZhciBsMiA9IG50aW52LnJlZFN1YihzKS5mcm9tUmVkKCk7XG4gIHJldHVybiBbIGwxLCBsMiBdO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2dldEVuZG9CYXNpcyA9IGZ1bmN0aW9uIF9nZXRFbmRvQmFzaXMobGFtYmRhKSB7XG4gIC8vIGFwcnhTcXJ0ID49IHNxcnQodGhpcy5uKVxuICB2YXIgYXByeFNxcnQgPSB0aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkgLyAyKSk7XG5cbiAgLy8gMy43NFxuICAvLyBSdW4gRUdDRCwgdW50aWwgcihMICsgMSkgPCBhcHJ4U3FydFxuICB2YXIgdSA9IGxhbWJkYTtcbiAgdmFyIHYgPSB0aGlzLm4uY2xvbmUoKTtcbiAgdmFyIHgxID0gbmV3IEJOKDEpO1xuICB2YXIgeTEgPSBuZXcgQk4oMCk7XG4gIHZhciB4MiA9IG5ldyBCTigwKTtcbiAgdmFyIHkyID0gbmV3IEJOKDEpO1xuXG4gIC8vIE5PVEU6IGFsbCB2ZWN0b3JzIGFyZSByb290cyBvZjogYSArIGIgKiBsYW1iZGEgPSAwIChtb2QgbilcbiAgdmFyIGEwO1xuICB2YXIgYjA7XG4gIC8vIEZpcnN0IHZlY3RvclxuICB2YXIgYTE7XG4gIHZhciBiMTtcbiAgLy8gU2Vjb25kIHZlY3RvclxuICB2YXIgYTI7XG4gIHZhciBiMjtcblxuICB2YXIgcHJldlI7XG4gIHZhciBpID0gMDtcbiAgdmFyIHI7XG4gIHZhciB4O1xuICB3aGlsZSAodS5jbXBuKDApICE9PSAwKSB7XG4gICAgdmFyIHEgPSB2LmRpdih1KTtcbiAgICByID0gdi5zdWIocS5tdWwodSkpO1xuICAgIHggPSB4Mi5zdWIocS5tdWwoeDEpKTtcbiAgICB2YXIgeSA9IHkyLnN1YihxLm11bCh5MSkpO1xuXG4gICAgaWYgKCFhMSAmJiByLmNtcChhcHJ4U3FydCkgPCAwKSB7XG4gICAgICBhMCA9IHByZXZSLm5lZygpO1xuICAgICAgYjAgPSB4MTtcbiAgICAgIGExID0gci5uZWcoKTtcbiAgICAgIGIxID0geDtcbiAgICB9IGVsc2UgaWYgKGExICYmICsraSA9PT0gMikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHByZXZSID0gcjtcblxuICAgIHYgPSB1O1xuICAgIHUgPSByO1xuICAgIHgyID0geDE7XG4gICAgeDEgPSB4O1xuICAgIHkyID0geTE7XG4gICAgeTEgPSB5O1xuICB9XG4gIGEyID0gci5uZWcoKTtcbiAgYjIgPSB4O1xuXG4gIHZhciBsZW4xID0gYTEuc3FyKCkuYWRkKGIxLnNxcigpKTtcbiAgdmFyIGxlbjIgPSBhMi5zcXIoKS5hZGQoYjIuc3FyKCkpO1xuICBpZiAobGVuMi5jbXAobGVuMSkgPj0gMCkge1xuICAgIGEyID0gYTA7XG4gICAgYjIgPSBiMDtcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBzaWduc1xuICBpZiAoYTEubmVnYXRpdmUpIHtcbiAgICBhMSA9IGExLm5lZygpO1xuICAgIGIxID0gYjEubmVnKCk7XG4gIH1cbiAgaWYgKGEyLm5lZ2F0aXZlKSB7XG4gICAgYTIgPSBhMi5uZWcoKTtcbiAgICBiMiA9IGIyLm5lZygpO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICB7IGE6IGExLCBiOiBiMSB9LFxuICAgIHsgYTogYTIsIGI6IGIyIH1cbiAgXTtcbn07XG5cblNob3J0Q3VydmUucHJvdG90eXBlLl9lbmRvU3BsaXQgPSBmdW5jdGlvbiBfZW5kb1NwbGl0KGspIHtcbiAgdmFyIGJhc2lzID0gdGhpcy5lbmRvLmJhc2lzO1xuICB2YXIgdjEgPSBiYXNpc1swXTtcbiAgdmFyIHYyID0gYmFzaXNbMV07XG5cbiAgdmFyIGMxID0gdjIuYi5tdWwoaykuZGl2Um91bmQodGhpcy5uKTtcbiAgdmFyIGMyID0gdjEuYi5uZWcoKS5tdWwoaykuZGl2Um91bmQodGhpcy5uKTtcblxuICB2YXIgcDEgPSBjMS5tdWwodjEuYSk7XG4gIHZhciBwMiA9IGMyLm11bCh2Mi5hKTtcbiAgdmFyIHExID0gYzEubXVsKHYxLmIpO1xuICB2YXIgcTIgPSBjMi5tdWwodjIuYik7XG5cbiAgLy8gQ2FsY3VsYXRlIGFuc3dlclxuICB2YXIgazEgPSBrLnN1YihwMSkuc3ViKHAyKTtcbiAgdmFyIGsyID0gcTEuYWRkKHEyKS5uZWcoKTtcbiAgcmV0dXJuIHsgazE6IGsxLCBrMjogazIgfTtcbn07XG5cblNob3J0Q3VydmUucHJvdG90eXBlLnBvaW50RnJvbVggPSBmdW5jdGlvbiBwb2ludEZyb21YKHgsIG9kZCkge1xuICB4ID0gbmV3IEJOKHgsIDE2KTtcbiAgaWYgKCF4LnJlZClcbiAgICB4ID0geC50b1JlZCh0aGlzLnJlZCk7XG5cbiAgdmFyIHkyID0geC5yZWRTcXIoKS5yZWRNdWwoeCkucmVkSUFkZCh4LnJlZE11bCh0aGlzLmEpKS5yZWRJQWRkKHRoaXMuYik7XG4gIHZhciB5ID0geTIucmVkU3FydCgpO1xuICBpZiAoeS5yZWRTcXIoKS5yZWRTdWIoeTIpLmNtcCh0aGlzLnplcm8pICE9PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwb2ludCcpO1xuXG4gIC8vIFhYWCBJcyB0aGVyZSBhbnkgd2F5IHRvIHRlbGwgaWYgdGhlIG51bWJlciBpcyBvZGQgd2l0aG91dCBjb252ZXJ0aW5nIGl0XG4gIC8vIHRvIG5vbi1yZWQgZm9ybT9cbiAgdmFyIGlzT2RkID0geS5mcm9tUmVkKCkuaXNPZGQoKTtcbiAgaWYgKG9kZCAmJiAhaXNPZGQgfHwgIW9kZCAmJiBpc09kZClcbiAgICB5ID0geS5yZWROZWcoKTtcblxuICByZXR1cm4gdGhpcy5wb2ludCh4LCB5KTtcbn07XG5cblNob3J0Q3VydmUucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gdmFsaWRhdGUocG9pbnQpIHtcbiAgaWYgKHBvaW50LmluZilcbiAgICByZXR1cm4gdHJ1ZTtcblxuICB2YXIgeCA9IHBvaW50Lng7XG4gIHZhciB5ID0gcG9pbnQueTtcblxuICB2YXIgYXggPSB0aGlzLmEucmVkTXVsKHgpO1xuICB2YXIgcmhzID0geC5yZWRTcXIoKS5yZWRNdWwoeCkucmVkSUFkZChheCkucmVkSUFkZCh0aGlzLmIpO1xuICByZXR1cm4geS5yZWRTcXIoKS5yZWRJU3ViKHJocykuY21wbigwKSA9PT0gMDtcbn07XG5cblNob3J0Q3VydmUucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZCA9XG4gICAgZnVuY3Rpb24gX2VuZG9XbmFmTXVsQWRkKHBvaW50cywgY29lZmZzKSB7XG4gIHZhciBucG9pbnRzID0gdGhpcy5fZW5kb1duYWZUMTtcbiAgdmFyIG5jb2VmZnMgPSB0aGlzLl9lbmRvV25hZlQyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzcGxpdCA9IHRoaXMuX2VuZG9TcGxpdChjb2VmZnNbaV0pO1xuICAgIHZhciBwID0gcG9pbnRzW2ldO1xuICAgIHZhciBiZXRhID0gcC5fZ2V0QmV0YSgpO1xuXG4gICAgaWYgKHNwbGl0LmsxLm5lZ2F0aXZlKSB7XG4gICAgICBzcGxpdC5rMS5pbmVnKCk7XG4gICAgICBwID0gcC5uZWcodHJ1ZSk7XG4gICAgfVxuICAgIGlmIChzcGxpdC5rMi5uZWdhdGl2ZSkge1xuICAgICAgc3BsaXQuazIuaW5lZygpO1xuICAgICAgYmV0YSA9IGJldGEubmVnKHRydWUpO1xuICAgIH1cblxuICAgIG5wb2ludHNbaSAqIDJdID0gcDtcbiAgICBucG9pbnRzW2kgKiAyICsgMV0gPSBiZXRhO1xuICAgIG5jb2VmZnNbaSAqIDJdID0gc3BsaXQuazE7XG4gICAgbmNvZWZmc1tpICogMiArIDFdID0gc3BsaXQuazI7XG4gIH1cbiAgdmFyIHJlcyA9IHRoaXMuX3duYWZNdWxBZGQoMSwgbnBvaW50cywgbmNvZWZmcywgaSAqIDIpO1xuXG4gIC8vIENsZWFuLXVwIHJlZmVyZW5jZXMgdG8gcG9pbnRzIGFuZCBjb2VmZmljaWVudHNcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBpICogMjsgaisrKSB7XG4gICAgbnBvaW50c1tqXSA9IG51bGw7XG4gICAgbmNvZWZmc1tqXSA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5cbmZ1bmN0aW9uIFBvaW50KGN1cnZlLCB4LCB5LCBpc1JlZCkge1xuICBCYXNlLkJhc2VQb2ludC5jYWxsKHRoaXMsIGN1cnZlLCAnYWZmaW5lJyk7XG4gIGlmICh4ID09PSBudWxsICYmIHkgPT09IG51bGwpIHtcbiAgICB0aGlzLnggPSBudWxsO1xuICAgIHRoaXMueSA9IG51bGw7XG4gICAgdGhpcy5pbmYgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMueCA9IG5ldyBCTih4LCAxNik7XG4gICAgdGhpcy55ID0gbmV3IEJOKHksIDE2KTtcbiAgICAvLyBGb3JjZSByZWRnb21lcnkgcmVwcmVzZW50YXRpb24gd2hlbiBsb2FkaW5nIGZyb20gSlNPTlxuICAgIGlmIChpc1JlZCkge1xuICAgICAgdGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICAgIHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgfVxuICAgIGlmICghdGhpcy54LnJlZClcbiAgICAgIHRoaXMueCA9IHRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgaWYgKCF0aGlzLnkucmVkKVxuICAgICAgdGhpcy55ID0gdGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICB0aGlzLmluZiA9IGZhbHNlO1xuICB9XG59XG5pbmhlcml0cyhQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5wb2ludCA9IGZ1bmN0aW9uIHBvaW50KHgsIHksIGlzUmVkKSB7XG4gIHJldHVybiBuZXcgUG9pbnQodGhpcywgeCwgeSwgaXNSZWQpO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTiA9IGZ1bmN0aW9uIHBvaW50RnJvbUpTT04ob2JqLCByZWQpIHtcbiAgcmV0dXJuIFBvaW50LmZyb21KU09OKHRoaXMsIG9iaiwgcmVkKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5fZ2V0QmV0YSA9IGZ1bmN0aW9uIF9nZXRCZXRhKCkge1xuICBpZiAoIXRoaXMuY3VydmUuZW5kbylcbiAgICByZXR1cm47XG5cbiAgdmFyIHByZSA9IHRoaXMucHJlY29tcHV0ZWQ7XG4gIGlmIChwcmUgJiYgcHJlLmJldGEpXG4gICAgcmV0dXJuIHByZS5iZXRhO1xuXG4gIHZhciBiZXRhID0gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSwgdGhpcy55KTtcbiAgaWYgKHByZSkge1xuICAgIHZhciBjdXJ2ZSA9IHRoaXMuY3VydmU7XG4gICAgdmFyIGVuZG9NdWwgPSBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gY3VydmUucG9pbnQocC54LnJlZE11bChjdXJ2ZS5lbmRvLmJldGEpLCBwLnkpO1xuICAgIH07XG4gICAgcHJlLmJldGEgPSBiZXRhO1xuICAgIGJldGEucHJlY29tcHV0ZWQgPSB7XG4gICAgICBiZXRhOiBudWxsLFxuICAgICAgbmFmOiBwcmUubmFmICYmIHtcbiAgICAgICAgd25kOiBwcmUubmFmLnduZCxcbiAgICAgICAgcG9pbnRzOiBwcmUubmFmLnBvaW50cy5tYXAoZW5kb011bClcbiAgICAgIH0sXG4gICAgICBkb3VibGVzOiBwcmUuZG91YmxlcyAmJiB7XG4gICAgICAgIHN0ZXA6IHByZS5kb3VibGVzLnN0ZXAsXG4gICAgICAgIHBvaW50czogcHJlLmRvdWJsZXMucG9pbnRzLm1hcChlbmRvTXVsKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIGJldGE7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICBpZiAoIXRoaXMucHJlY29tcHV0ZWQpXG4gICAgcmV0dXJuIFsgdGhpcy54LCB0aGlzLnkgXTtcblxuICByZXR1cm4gWyB0aGlzLngsIHRoaXMueSwgdGhpcy5wcmVjb21wdXRlZCAmJiB7XG4gICAgZG91YmxlczogdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzICYmIHtcbiAgICAgIHN0ZXA6IHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLFxuICAgICAgcG9pbnRzOiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpXG4gICAgfSxcbiAgICBuYWY6IHRoaXMucHJlY29tcHV0ZWQubmFmICYmIHtcbiAgICAgIHduZDogdGhpcy5wcmVjb21wdXRlZC5uYWYud25kLFxuICAgICAgcG9pbnRzOiB0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSlcbiAgICB9XG4gIH0gXTtcbn07XG5cblBvaW50LmZyb21KU09OID0gZnVuY3Rpb24gZnJvbUpTT04oY3VydmUsIG9iaiwgcmVkKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJylcbiAgICBvYmogPSBKU09OLnBhcnNlKG9iaik7XG4gIHZhciByZXMgPSBjdXJ2ZS5wb2ludChvYmpbMF0sIG9ialsxXSwgcmVkKTtcbiAgaWYgKCFvYmpbMl0pXG4gICAgcmV0dXJuIHJlcztcblxuICBmdW5jdGlvbiBvYmoycG9pbnQob2JqKSB7XG4gICAgcmV0dXJuIGN1cnZlLnBvaW50KG9ialswXSwgb2JqWzFdLCByZWQpO1xuICB9XG5cbiAgdmFyIHByZSA9IG9ialsyXTtcbiAgcmVzLnByZWNvbXB1dGVkID0ge1xuICAgIGJldGE6IG51bGwsXG4gICAgZG91YmxlczogcHJlLmRvdWJsZXMgJiYge1xuICAgICAgc3RlcDogcHJlLmRvdWJsZXMuc3RlcCxcbiAgICAgIHBvaW50czogWyByZXMgXS5jb25jYXQocHJlLmRvdWJsZXMucG9pbnRzLm1hcChvYmoycG9pbnQpKVxuICAgIH0sXG4gICAgbmFmOiBwcmUubmFmICYmIHtcbiAgICAgIHduZDogcHJlLm5hZi53bmQsXG4gICAgICBwb2ludHM6IFsgcmVzIF0uY29uY2F0KHByZS5uYWYucG9pbnRzLm1hcChvYmoycG9pbnQpKVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHJlcztcbn07XG5cblBvaW50LnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiAnPEVDIFBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIFBvaW50IHg6ICcgKyB0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHk6ICcgKyB0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArICc+Jztcbn07XG5cblBvaW50LnByb3RvdHlwZS5pc0luZmluaXR5ID0gZnVuY3Rpb24gaXNJbmZpbml0eSgpIHtcbiAgcmV0dXJuIHRoaXMuaW5mO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChwKSB7XG4gIC8vIE8gKyBQID0gUFxuICBpZiAodGhpcy5pbmYpXG4gICAgcmV0dXJuIHA7XG5cbiAgLy8gUCArIE8gPSBQXG4gIGlmIChwLmluZilcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBQICsgUCA9IDJQXG4gIGlmICh0aGlzLmVxKHApKVxuICAgIHJldHVybiB0aGlzLmRibCgpO1xuXG4gIC8vIFAgKyAoLVApID0gT1xuICBpZiAodGhpcy5uZWcoKS5lcShwKSlcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICAvLyBQICsgUSA9IE9cbiAgaWYgKHRoaXMueC5jbXAocC54KSA9PT0gMClcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICB2YXIgYyA9IHRoaXMueS5yZWRTdWIocC55KTtcbiAgaWYgKGMuY21wbigwKSAhPT0gMClcbiAgICBjID0gYy5yZWRNdWwodGhpcy54LnJlZFN1YihwLngpLnJlZEludm0oKSk7XG4gIHZhciBueCA9IGMucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIocC54KTtcbiAgdmFyIG55ID0gYy5yZWRNdWwodGhpcy54LnJlZFN1YihueCkpLnJlZElTdWIodGhpcy55KTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5kYmwgPSBmdW5jdGlvbiBkYmwoKSB7XG4gIGlmICh0aGlzLmluZilcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyAyUCA9IE9cbiAgdmFyIHlzMSA9IHRoaXMueS5yZWRBZGQodGhpcy55KTtcbiAgaWYgKHlzMS5jbXBuKDApID09PSAwKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsIG51bGwpO1xuXG4gIHZhciBhID0gdGhpcy5jdXJ2ZS5hO1xuXG4gIHZhciB4MiA9IHRoaXMueC5yZWRTcXIoKTtcbiAgdmFyIGR5aW52ID0geXMxLnJlZEludm0oKTtcbiAgdmFyIGMgPSB4Mi5yZWRBZGQoeDIpLnJlZElBZGQoeDIpLnJlZElBZGQoYSkucmVkTXVsKGR5aW52KTtcblxuICB2YXIgbnggPSBjLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKTtcbiAgdmFyIG55ID0gYy5yZWRNdWwodGhpcy54LnJlZFN1YihueCkpLnJlZElTdWIodGhpcy55KTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5nZXRYID0gZnVuY3Rpb24gZ2V0WCgpIHtcbiAgcmV0dXJuIHRoaXMueC5mcm9tUmVkKCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WSA9IGZ1bmN0aW9uIGdldFkoKSB7XG4gIHJldHVybiB0aGlzLnkuZnJvbVJlZCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bChrKSB7XG4gIGsgPSBuZXcgQk4oaywgMTYpO1xuXG4gIGlmICh0aGlzLl9oYXNEb3VibGVzKGspKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLCBrKTtcbiAgZWxzZSBpZiAodGhpcy5jdXJ2ZS5lbmRvKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbIHRoaXMgXSwgWyBrIF0pO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWwodGhpcywgayk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubXVsQWRkID0gZnVuY3Rpb24gbXVsQWRkKGsxLCBwMiwgazIpIHtcbiAgdmFyIHBvaW50cyA9IFsgdGhpcywgcDIgXTtcbiAgdmFyIGNvZWZmcyA9IFsgazEsIGsyIF07XG4gIGlmICh0aGlzLmN1cnZlLmVuZG8pXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKHBvaW50cywgY29lZmZzKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsIHBvaW50cywgY29lZmZzLCAyKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uIGVxKHApIHtcbiAgcmV0dXJuIHRoaXMgPT09IHAgfHxcbiAgICAgICAgIHRoaXMuaW5mID09PSBwLmluZiAmJlxuICAgICAgICAgICAgICh0aGlzLmluZiB8fCB0aGlzLnguY21wKHAueCkgPT09IDAgJiYgdGhpcy55LmNtcChwLnkpID09PSAwKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiBuZWcoX3ByZWNvbXB1dGUpIHtcbiAgaWYgKHRoaXMuaW5mKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIHZhciByZXMgPSB0aGlzLmN1cnZlLnBvaW50KHRoaXMueCwgdGhpcy55LnJlZE5lZygpKTtcbiAgaWYgKF9wcmVjb21wdXRlICYmIHRoaXMucHJlY29tcHV0ZWQpIHtcbiAgICB2YXIgcHJlID0gdGhpcy5wcmVjb21wdXRlZDtcbiAgICB2YXIgbmVnYXRlID0gZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuIHAubmVnKCk7XG4gICAgfTtcbiAgICByZXMucHJlY29tcHV0ZWQgPSB7XG4gICAgICBuYWY6IHByZS5uYWYgJiYge1xuICAgICAgICB3bmQ6IHByZS5uYWYud25kLFxuICAgICAgICBwb2ludHM6IHByZS5uYWYucG9pbnRzLm1hcChuZWdhdGUpXG4gICAgICB9LFxuICAgICAgZG91YmxlczogcHJlLmRvdWJsZXMgJiYge1xuICAgICAgICBzdGVwOiBwcmUuZG91Ymxlcy5zdGVwLFxuICAgICAgICBwb2ludHM6IHByZS5kb3VibGVzLnBvaW50cy5tYXAobmVnYXRlKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5cblBvaW50LnByb3RvdHlwZS50b0ogPSBmdW5jdGlvbiB0b0ooKSB7XG4gIGlmICh0aGlzLmluZilcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG5cbiAgdmFyIHJlcyA9IHRoaXMuY3VydmUuanBvaW50KHRoaXMueCwgdGhpcy55LCB0aGlzLmN1cnZlLm9uZSk7XG4gIHJldHVybiByZXM7XG59O1xuXG5mdW5jdGlvbiBKUG9pbnQoY3VydmUsIHgsIHksIHopIHtcbiAgQmFzZS5CYXNlUG9pbnQuY2FsbCh0aGlzLCBjdXJ2ZSwgJ2phY29iaWFuJyk7XG4gIGlmICh4ID09PSBudWxsICYmIHkgPT09IG51bGwgJiYgeiA9PT0gbnVsbCkge1xuICAgIHRoaXMueCA9IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMueSA9IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMueiA9IG5ldyBCTigwKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSBuZXcgQk4oeCwgMTYpO1xuICAgIHRoaXMueSA9IG5ldyBCTih5LCAxNik7XG4gICAgdGhpcy56ID0gbmV3IEJOKHosIDE2KTtcbiAgfVxuICBpZiAoIXRoaXMueC5yZWQpXG4gICAgdGhpcy54ID0gdGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgaWYgKCF0aGlzLnkucmVkKVxuICAgIHRoaXMueSA9IHRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gIGlmICghdGhpcy56LnJlZClcbiAgICB0aGlzLnogPSB0aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuXG4gIHRoaXMuek9uZSA9IHRoaXMueiA9PT0gdGhpcy5jdXJ2ZS5vbmU7XG59XG5pbmhlcml0cyhKUG9pbnQsIEJhc2UuQmFzZVBvaW50KTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuanBvaW50ID0gZnVuY3Rpb24ganBvaW50KHgsIHksIHopIHtcbiAgcmV0dXJuIG5ldyBKUG9pbnQodGhpcywgeCwgeSwgeik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLnRvUCA9IGZ1bmN0aW9uIHRvUCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsIG51bGwpO1xuXG4gIHZhciB6aW52ID0gdGhpcy56LnJlZEludm0oKTtcbiAgdmFyIHppbnYyID0gemludi5yZWRTcXIoKTtcbiAgdmFyIGF4ID0gdGhpcy54LnJlZE11bCh6aW52Mik7XG4gIHZhciBheSA9IHRoaXMueS5yZWRNdWwoemludjIpLnJlZE11bCh6aW52KTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChheCwgYXkpO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiBuZWcoKSB7XG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsIHRoaXMueS5yZWROZWcoKSwgdGhpcy56KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKHApIHtcbiAgLy8gTyArIFAgPSBQXG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gcDtcblxuICAvLyBQICsgTyA9IFBcbiAgaWYgKHAuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIDEyTSArIDRTICsgN0FcbiAgdmFyIHB6MiA9IHAuei5yZWRTcXIoKTtcbiAgdmFyIHoyID0gdGhpcy56LnJlZFNxcigpO1xuICB2YXIgdTEgPSB0aGlzLngucmVkTXVsKHB6Mik7XG4gIHZhciB1MiA9IHAueC5yZWRNdWwoejIpO1xuICB2YXIgczEgPSB0aGlzLnkucmVkTXVsKHB6Mi5yZWRNdWwocC56KSk7XG4gIHZhciBzMiA9IHAueS5yZWRNdWwoejIucmVkTXVsKHRoaXMueikpO1xuXG4gIHZhciBoID0gdTEucmVkU3ViKHUyKTtcbiAgdmFyIHIgPSBzMS5yZWRTdWIoczIpO1xuICBpZiAoaC5jbXBuKDApID09PSAwKSB7XG4gICAgaWYgKHIuY21wbigwKSAhPT0gMClcbiAgICAgIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gdGhpcy5kYmwoKTtcbiAgfVxuXG4gIHZhciBoMiA9IGgucmVkU3FyKCk7XG4gIHZhciBoMyA9IGgyLnJlZE11bChoKTtcbiAgdmFyIHYgPSB1MS5yZWRNdWwoaDIpO1xuXG4gIHZhciBueCA9IHIucmVkU3FyKCkucmVkSUFkZChoMykucmVkSVN1Yih2KS5yZWRJU3ViKHYpO1xuICB2YXIgbnkgPSByLnJlZE11bCh2LnJlZElTdWIobngpKS5yZWRJU3ViKHMxLnJlZE11bChoMykpO1xuICB2YXIgbnogPSB0aGlzLnoucmVkTXVsKHAueikucmVkTXVsKGgpO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChueCwgbnksIG56KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUubWl4ZWRBZGQgPSBmdW5jdGlvbiBtaXhlZEFkZChwKSB7XG4gIC8vIE8gKyBQID0gUFxuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHAudG9KKCk7XG5cbiAgLy8gUCArIE8gPSBQXG4gIGlmIChwLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyA4TSArIDNTICsgN0FcbiAgdmFyIHoyID0gdGhpcy56LnJlZFNxcigpO1xuICB2YXIgdTEgPSB0aGlzLng7XG4gIHZhciB1MiA9IHAueC5yZWRNdWwoejIpO1xuICB2YXIgczEgPSB0aGlzLnk7XG4gIHZhciBzMiA9IHAueS5yZWRNdWwoejIpLnJlZE11bCh0aGlzLnopO1xuXG4gIHZhciBoID0gdTEucmVkU3ViKHUyKTtcbiAgdmFyIHIgPSBzMS5yZWRTdWIoczIpO1xuICBpZiAoaC5jbXBuKDApID09PSAwKSB7XG4gICAgaWYgKHIuY21wbigwKSAhPT0gMClcbiAgICAgIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gdGhpcy5kYmwoKTtcbiAgfVxuXG4gIHZhciBoMiA9IGgucmVkU3FyKCk7XG4gIHZhciBoMyA9IGgyLnJlZE11bChoKTtcbiAgdmFyIHYgPSB1MS5yZWRNdWwoaDIpO1xuXG4gIHZhciBueCA9IHIucmVkU3FyKCkucmVkSUFkZChoMykucmVkSVN1Yih2KS5yZWRJU3ViKHYpO1xuICB2YXIgbnkgPSByLnJlZE11bCh2LnJlZElTdWIobngpKS5yZWRJU3ViKHMxLnJlZE11bChoMykpO1xuICB2YXIgbnogPSB0aGlzLnoucmVkTXVsKGgpO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChueCwgbnksIG56KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuZGJscCA9IGZ1bmN0aW9uIGRibHAocG93KSB7XG4gIGlmIChwb3cgPT09IDApXG4gICAgcmV0dXJuIHRoaXM7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdGhpcztcbiAgaWYgKCFwb3cpXG4gICAgcmV0dXJuIHRoaXMuZGJsKCk7XG5cbiAgaWYgKHRoaXMuY3VydmUuemVyb0EgfHwgdGhpcy5jdXJ2ZS50aHJlZUEpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3c7IGkrKylcbiAgICAgIHIgPSByLmRibCgpO1xuICAgIHJldHVybiByO1xuICB9XG5cbiAgLy8gMU0gKyAyUyArIDFBICsgTiAqICg0UyArIDVNICsgOEEpXG4gIC8vIE4gPSAxID0+IDZNICsgNlMgKyA5QVxuICB2YXIgYSA9IHRoaXMuY3VydmUuYTtcbiAgdmFyIHRpbnYgPSB0aGlzLmN1cnZlLnRpbnY7XG5cbiAgdmFyIGp4ID0gdGhpcy54O1xuICB2YXIgankgPSB0aGlzLnk7XG4gIHZhciBqeiA9IHRoaXMuejtcbiAgdmFyIGp6NCA9IGp6LnJlZFNxcigpLnJlZFNxcigpO1xuXG4gIC8vIFJldXNlIHJlc3VsdHNcbiAgdmFyIGp5ZCA9IGp5LnJlZEFkZChqeSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcG93OyBpKyspIHtcbiAgICB2YXIgangyID0gangucmVkU3FyKCk7XG4gICAgdmFyIGp5ZDIgPSBqeWQucmVkU3FyKCk7XG4gICAgdmFyIGp5ZDQgPSBqeWQyLnJlZFNxcigpO1xuICAgIHZhciBjID0gangyLnJlZEFkZChqeDIpLnJlZElBZGQoangyKS5yZWRJQWRkKGEucmVkTXVsKGp6NCkpO1xuXG4gICAgdmFyIHQxID0gangucmVkTXVsKGp5ZDIpO1xuICAgIHZhciBueCA9IGMucmVkU3FyKCkucmVkSVN1Yih0MS5yZWRBZGQodDEpKTtcbiAgICB2YXIgdDIgPSB0MS5yZWRJU3ViKG54KTtcbiAgICB2YXIgZG55ID0gYy5yZWRNdWwodDIpO1xuICAgIGRueSA9IGRueS5yZWRJQWRkKGRueSkucmVkSVN1YihqeWQ0KTtcbiAgICB2YXIgbnogPSBqeWQucmVkTXVsKGp6KTtcbiAgICBpZiAoaSArIDEgPCBwb3cpXG4gICAgICBqejQgPSBqejQucmVkTXVsKGp5ZDQpO1xuXG4gICAganggPSBueDtcbiAgICBqeiA9IG56O1xuICAgIGp5ZCA9IGRueTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChqeCwganlkLnJlZE11bCh0aW52KSwganopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5kYmwgPSBmdW5jdGlvbiBkYmwoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdGhpcztcblxuICBpZiAodGhpcy5jdXJ2ZS56ZXJvQSlcbiAgICByZXR1cm4gdGhpcy5femVyb0RibCgpO1xuICBlbHNlIGlmICh0aGlzLmN1cnZlLnRocmVlQSlcbiAgICByZXR1cm4gdGhpcy5fdGhyZWVEYmwoKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLl9kYmwoKTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuX3plcm9EYmwgPSBmdW5jdGlvbiBfemVyb0RibCgpIHtcbiAgdmFyIG54O1xuICB2YXIgbnk7XG4gIHZhciBuejtcbiAgLy8gWiA9IDFcbiAgaWYgKHRoaXMuek9uZSkge1xuICAgIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1zaG9ydHctamFjb2JpYW4tMC5odG1sXG4gICAgLy8gICAgICNkb3VibGluZy1tZGJsLTIwMDctYmxcbiAgICAvLyAxTSArIDVTICsgMTRBXG5cbiAgICAvLyBYWCA9IFgxXjJcbiAgICB2YXIgeHggPSB0aGlzLngucmVkU3FyKCk7XG4gICAgLy8gWVkgPSBZMV4yXG4gICAgdmFyIHl5ID0gdGhpcy55LnJlZFNxcigpO1xuICAgIC8vIFlZWVkgPSBZWV4yXG4gICAgdmFyIHl5eXkgPSB5eS5yZWRTcXIoKTtcbiAgICAvLyBTID0gMiAqICgoWDEgKyBZWSleMiAtIFhYIC0gWVlZWSlcbiAgICB2YXIgcyA9IHRoaXMueC5yZWRBZGQoeXkpLnJlZFNxcigpLnJlZElTdWIoeHgpLnJlZElTdWIoeXl5eSk7XG4gICAgcyA9IHMucmVkSUFkZChzKTtcbiAgICAvLyBNID0gMyAqIFhYICsgYTsgYSA9IDBcbiAgICB2YXIgbSA9IHh4LnJlZEFkZCh4eCkucmVkSUFkZCh4eCk7XG4gICAgLy8gVCA9IE0gXiAyIC0gMipTXG4gICAgdmFyIHQgPSBtLnJlZFNxcigpLnJlZElTdWIocykucmVkSVN1YihzKTtcblxuICAgIC8vIDggKiBZWVlZXG4gICAgdmFyIHl5eXk4ID0geXl5eS5yZWRJQWRkKHl5eXkpO1xuICAgIHl5eXk4ID0geXl5eTgucmVkSUFkZCh5eXl5OCk7XG4gICAgeXl5eTggPSB5eXl5OC5yZWRJQWRkKHl5eXk4KTtcblxuICAgIC8vIFgzID0gVFxuICAgIG54ID0gdDtcbiAgICAvLyBZMyA9IE0gKiAoUyAtIFQpIC0gOCAqIFlZWVlcbiAgICBueSA9IG0ucmVkTXVsKHMucmVkSVN1Yih0KSkucmVkSVN1Yih5eXl5OCk7XG4gICAgLy8gWjMgPSAyKlkxXG4gICAgbnogPSB0aGlzLnkucmVkQWRkKHRoaXMueSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXNob3J0dy1qYWNvYmlhbi0wLmh0bWxcbiAgICAvLyAgICAgI2RvdWJsaW5nLWRibC0yMDA5LWxcbiAgICAvLyAyTSArIDVTICsgMTNBXG5cbiAgICAvLyBBID0gWDFeMlxuICAgIHZhciBhID0gdGhpcy54LnJlZFNxcigpO1xuICAgIC8vIEIgPSBZMV4yXG4gICAgdmFyIGIgPSB0aGlzLnkucmVkU3FyKCk7XG4gICAgLy8gQyA9IEJeMlxuICAgIHZhciBjID0gYi5yZWRTcXIoKTtcbiAgICAvLyBEID0gMiAqICgoWDEgKyBCKV4yIC0gQSAtIEMpXG4gICAgdmFyIGQgPSB0aGlzLngucmVkQWRkKGIpLnJlZFNxcigpLnJlZElTdWIoYSkucmVkSVN1YihjKTtcbiAgICBkID0gZC5yZWRJQWRkKGQpO1xuICAgIC8vIEUgPSAzICogQVxuICAgIHZhciBlID0gYS5yZWRBZGQoYSkucmVkSUFkZChhKTtcbiAgICAvLyBGID0gRV4yXG4gICAgdmFyIGYgPSBlLnJlZFNxcigpO1xuXG4gICAgLy8gOCAqIENcbiAgICB2YXIgYzggPSBjLnJlZElBZGQoYyk7XG4gICAgYzggPSBjOC5yZWRJQWRkKGM4KTtcbiAgICBjOCA9IGM4LnJlZElBZGQoYzgpO1xuXG4gICAgLy8gWDMgPSBGIC0gMiAqIERcbiAgICBueCA9IGYucmVkSVN1YihkKS5yZWRJU3ViKGQpO1xuICAgIC8vIFkzID0gRSAqIChEIC0gWDMpIC0gOCAqIENcbiAgICBueSA9IGUucmVkTXVsKGQucmVkSVN1YihueCkpLnJlZElTdWIoYzgpO1xuICAgIC8vIFozID0gMiAqIFkxICogWjFcbiAgICBueiA9IHRoaXMueS5yZWRNdWwodGhpcy56KTtcbiAgICBueiA9IG56LnJlZElBZGQobnopO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LCBueSwgbnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5fdGhyZWVEYmwgPSBmdW5jdGlvbiBfdGhyZWVEYmwoKSB7XG4gIHZhciBueDtcbiAgdmFyIG55O1xuICB2YXIgbno7XG4gIC8vIFogPSAxXG4gIGlmICh0aGlzLnpPbmUpIHtcbiAgICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tc2hvcnR3LWphY29iaWFuLTMuaHRtbFxuICAgIC8vICAgICAjZG91YmxpbmctbWRibC0yMDA3LWJsXG4gICAgLy8gMU0gKyA1UyArIDE1QVxuXG4gICAgLy8gWFggPSBYMV4yXG4gICAgdmFyIHh4ID0gdGhpcy54LnJlZFNxcigpO1xuICAgIC8vIFlZID0gWTFeMlxuICAgIHZhciB5eSA9IHRoaXMueS5yZWRTcXIoKTtcbiAgICAvLyBZWVlZID0gWVleMlxuICAgIHZhciB5eXl5ID0geXkucmVkU3FyKCk7XG4gICAgLy8gUyA9IDIgKiAoKFgxICsgWVkpXjIgLSBYWCAtIFlZWVkpXG4gICAgdmFyIHMgPSB0aGlzLngucmVkQWRkKHl5KS5yZWRTcXIoKS5yZWRJU3ViKHh4KS5yZWRJU3ViKHl5eXkpO1xuICAgIHMgPSBzLnJlZElBZGQocyk7XG4gICAgLy8gTSA9IDMgKiBYWCArIGFcbiAgICB2YXIgbSA9IHh4LnJlZEFkZCh4eCkucmVkSUFkZCh4eCkucmVkSUFkZCh0aGlzLmN1cnZlLmEpO1xuICAgIC8vIFQgPSBNXjIgLSAyICogU1xuICAgIHZhciB0ID0gbS5yZWRTcXIoKS5yZWRJU3ViKHMpLnJlZElTdWIocyk7XG4gICAgLy8gWDMgPSBUXG4gICAgbnggPSB0O1xuICAgIC8vIFkzID0gTSAqIChTIC0gVCkgLSA4ICogWVlZWVxuICAgIHZhciB5eXl5OCA9IHl5eXkucmVkSUFkZCh5eXl5KTtcbiAgICB5eXl5OCA9IHl5eXk4LnJlZElBZGQoeXl5eTgpO1xuICAgIHl5eXk4ID0geXl5eTgucmVkSUFkZCh5eXl5OCk7XG4gICAgbnkgPSBtLnJlZE11bChzLnJlZElTdWIodCkpLnJlZElTdWIoeXl5eTgpO1xuICAgIC8vIFozID0gMiAqIFkxXG4gICAgbnogPSB0aGlzLnkucmVkQWRkKHRoaXMueSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXNob3J0dy1qYWNvYmlhbi0zLmh0bWwjZG91YmxpbmctZGJsLTIwMDEtYlxuICAgIC8vIDNNICsgNVNcblxuICAgIC8vIGRlbHRhID0gWjFeMlxuICAgIHZhciBkZWx0YSA9IHRoaXMuei5yZWRTcXIoKTtcbiAgICAvLyBnYW1tYSA9IFkxXjJcbiAgICB2YXIgZ2FtbWEgPSB0aGlzLnkucmVkU3FyKCk7XG4gICAgLy8gYmV0YSA9IFgxICogZ2FtbWFcbiAgICB2YXIgYmV0YSA9IHRoaXMueC5yZWRNdWwoZ2FtbWEpO1xuICAgIC8vIGFscGhhID0gMyAqIChYMSAtIGRlbHRhKSAqIChYMSArIGRlbHRhKVxuICAgIHZhciBhbHBoYSA9IHRoaXMueC5yZWRTdWIoZGVsdGEpLnJlZE11bCh0aGlzLngucmVkQWRkKGRlbHRhKSk7XG4gICAgYWxwaGEgPSBhbHBoYS5yZWRBZGQoYWxwaGEpLnJlZElBZGQoYWxwaGEpO1xuICAgIC8vIFgzID0gYWxwaGFeMiAtIDggKiBiZXRhXG4gICAgdmFyIGJldGE0ID0gYmV0YS5yZWRJQWRkKGJldGEpO1xuICAgIGJldGE0ID0gYmV0YTQucmVkSUFkZChiZXRhNCk7XG4gICAgdmFyIGJldGE4ID0gYmV0YTQucmVkQWRkKGJldGE0KTtcbiAgICBueCA9IGFscGhhLnJlZFNxcigpLnJlZElTdWIoYmV0YTgpO1xuICAgIC8vIFozID0gKFkxICsgWjEpXjIgLSBnYW1tYSAtIGRlbHRhXG4gICAgbnogPSB0aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihnYW1tYSkucmVkSVN1YihkZWx0YSk7XG4gICAgLy8gWTMgPSBhbHBoYSAqICg0ICogYmV0YSAtIFgzKSAtIDggKiBnYW1tYV4yXG4gICAgdmFyIGdnYW1tYTggPSBnYW1tYS5yZWRTcXIoKTtcbiAgICBnZ2FtbWE4ID0gZ2dhbW1hOC5yZWRJQWRkKGdnYW1tYTgpO1xuICAgIGdnYW1tYTggPSBnZ2FtbWE4LnJlZElBZGQoZ2dhbW1hOCk7XG4gICAgZ2dhbW1hOCA9IGdnYW1tYTgucmVkSUFkZChnZ2FtbWE4KTtcbiAgICBueSA9IGFscGhhLnJlZE11bChiZXRhNC5yZWRJU3ViKG54KSkucmVkSVN1YihnZ2FtbWE4KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChueCwgbnksIG56KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuX2RibCA9IGZ1bmN0aW9uIF9kYmwoKSB7XG4gIHZhciBhID0gdGhpcy5jdXJ2ZS5hO1xuXG4gIC8vIDRNICsgNlMgKyAxMEFcbiAgdmFyIGp4ID0gdGhpcy54O1xuICB2YXIgankgPSB0aGlzLnk7XG4gIHZhciBqeiA9IHRoaXMuejtcbiAgdmFyIGp6NCA9IGp6LnJlZFNxcigpLnJlZFNxcigpO1xuXG4gIHZhciBqeDIgPSBqeC5yZWRTcXIoKTtcbiAgdmFyIGp5MiA9IGp5LnJlZFNxcigpO1xuXG4gIHZhciBjID0gangyLnJlZEFkZChqeDIpLnJlZElBZGQoangyKS5yZWRJQWRkKGEucmVkTXVsKGp6NCkpO1xuXG4gIHZhciBqeGQ0ID0gangucmVkQWRkKGp4KTtcbiAganhkNCA9IGp4ZDQucmVkSUFkZChqeGQ0KTtcbiAgdmFyIHQxID0ganhkNC5yZWRNdWwoankyKTtcbiAgdmFyIG54ID0gYy5yZWRTcXIoKS5yZWRJU3ViKHQxLnJlZEFkZCh0MSkpO1xuICB2YXIgdDIgPSB0MS5yZWRJU3ViKG54KTtcblxuICB2YXIganlkOCA9IGp5Mi5yZWRTcXIoKTtcbiAganlkOCA9IGp5ZDgucmVkSUFkZChqeWQ4KTtcbiAganlkOCA9IGp5ZDgucmVkSUFkZChqeWQ4KTtcbiAganlkOCA9IGp5ZDgucmVkSUFkZChqeWQ4KTtcbiAgdmFyIG55ID0gYy5yZWRNdWwodDIpLnJlZElTdWIoanlkOCk7XG4gIHZhciBueiA9IGp5LnJlZEFkZChqeSkucmVkTXVsKGp6KTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLnRycGwgPSBmdW5jdGlvbiB0cnBsKCkge1xuICBpZiAoIXRoaXMuY3VydmUuemVyb0EpXG4gICAgcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO1xuXG4gIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1zaG9ydHctamFjb2JpYW4tMC5odG1sI3RyaXBsaW5nLXRwbC0yMDA3LWJsXG4gIC8vIDVNICsgMTBTICsgLi4uXG5cbiAgLy8gWFggPSBYMV4yXG4gIHZhciB4eCA9IHRoaXMueC5yZWRTcXIoKTtcbiAgLy8gWVkgPSBZMV4yXG4gIHZhciB5eSA9IHRoaXMueS5yZWRTcXIoKTtcbiAgLy8gWlogPSBaMV4yXG4gIHZhciB6eiA9IHRoaXMuei5yZWRTcXIoKTtcbiAgLy8gWVlZWSA9IFlZXjJcbiAgdmFyIHl5eXkgPSB5eS5yZWRTcXIoKTtcbiAgLy8gTSA9IDMgKiBYWCArIGEgKiBaWjI7IGEgPSAwXG4gIHZhciBtID0geHgucmVkQWRkKHh4KS5yZWRJQWRkKHh4KTtcbiAgLy8gTU0gPSBNXjJcbiAgdmFyIG1tID0gbS5yZWRTcXIoKTtcbiAgLy8gRSA9IDYgKiAoKFgxICsgWVkpXjIgLSBYWCAtIFlZWVkpIC0gTU1cbiAgdmFyIGUgPSB0aGlzLngucmVkQWRkKHl5KS5yZWRTcXIoKS5yZWRJU3ViKHh4KS5yZWRJU3ViKHl5eXkpO1xuICBlID0gZS5yZWRJQWRkKGUpO1xuICBlID0gZS5yZWRBZGQoZSkucmVkSUFkZChlKTtcbiAgZSA9IGUucmVkSVN1YihtbSk7XG4gIC8vIEVFID0gRV4yXG4gIHZhciBlZSA9IGUucmVkU3FyKCk7XG4gIC8vIFQgPSAxNipZWVlZXG4gIHZhciB0ID0geXl5eS5yZWRJQWRkKHl5eXkpO1xuICB0ID0gdC5yZWRJQWRkKHQpO1xuICB0ID0gdC5yZWRJQWRkKHQpO1xuICB0ID0gdC5yZWRJQWRkKHQpO1xuICAvLyBVID0gKE0gKyBFKV4yIC0gTU0gLSBFRSAtIFRcbiAgdmFyIHUgPSBtLnJlZElBZGQoZSkucmVkU3FyKCkucmVkSVN1YihtbSkucmVkSVN1YihlZSkucmVkSVN1Yih0KTtcbiAgLy8gWDMgPSA0ICogKFgxICogRUUgLSA0ICogWVkgKiBVKVxuICB2YXIgeXl1NCA9IHl5LnJlZE11bCh1KTtcbiAgeXl1NCA9IHl5dTQucmVkSUFkZCh5eXU0KTtcbiAgeXl1NCA9IHl5dTQucmVkSUFkZCh5eXU0KTtcbiAgdmFyIG54ID0gdGhpcy54LnJlZE11bChlZSkucmVkSVN1Yih5eXU0KTtcbiAgbnggPSBueC5yZWRJQWRkKG54KTtcbiAgbnggPSBueC5yZWRJQWRkKG54KTtcbiAgLy8gWTMgPSA4ICogWTEgKiAoVSAqIChUIC0gVSkgLSBFICogRUUpXG4gIHZhciBueSA9IHRoaXMueS5yZWRNdWwodS5yZWRNdWwodC5yZWRJU3ViKHUpKS5yZWRJU3ViKGUucmVkTXVsKGVlKSkpO1xuICBueSA9IG55LnJlZElBZGQobnkpO1xuICBueSA9IG55LnJlZElBZGQobnkpO1xuICBueSA9IG55LnJlZElBZGQobnkpO1xuICAvLyBaMyA9IChaMSArIEUpXjIgLSBaWiAtIEVFXG4gIHZhciBueiA9IHRoaXMuei5yZWRBZGQoZSkucmVkU3FyKCkucmVkSVN1Yih6eikucmVkSVN1YihlZSk7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LCBueSwgbnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwoaywga2Jhc2UpIHtcbiAgayA9IG5ldyBCTihrLCBrYmFzZSk7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWwodGhpcywgayk7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmVxID0gZnVuY3Rpb24gZXEocCkge1xuICBpZiAocC50eXBlID09PSAnYWZmaW5lJylcbiAgICByZXR1cm4gdGhpcy5lcShwLnRvSigpKTtcblxuICBpZiAodGhpcyA9PT0gcClcbiAgICByZXR1cm4gdHJ1ZTtcblxuICAvLyB4MSAqIHoyXjIgPT0geDIgKiB6MV4yXG4gIHZhciB6MiA9IHRoaXMuei5yZWRTcXIoKTtcbiAgdmFyIHB6MiA9IHAuei5yZWRTcXIoKTtcbiAgaWYgKHRoaXMueC5yZWRNdWwocHoyKS5yZWRJU3ViKHAueC5yZWRNdWwoejIpKS5jbXBuKDApICE9PSAwKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyB5MSAqIHoyXjMgPT0geTIgKiB6MV4zXG4gIHZhciB6MyA9IHoyLnJlZE11bCh0aGlzLnopO1xuICB2YXIgcHozID0gcHoyLnJlZE11bChwLnopO1xuICByZXR1cm4gdGhpcy55LnJlZE11bChwejMpLnJlZElTdWIocC55LnJlZE11bCh6MykpLmNtcG4oMCkgPT09IDA7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuICc8RUMgSlBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIEpQb2ludCB4OiAnICsgdGhpcy54LnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHk6ICcgKyB0aGlzLnkudG9TdHJpbmcoMTYsIDIpICtcbiAgICAgICcgejogJyArIHRoaXMuei50b1N0cmluZygxNiwgMikgKyAnPic7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmlzSW5maW5pdHkgPSBmdW5jdGlvbiBpc0luZmluaXR5KCkge1xuICAvLyBYWFggVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB6ZXJvIGlzIGFsd2F5cyB6ZXJvIGluIHJlZFxuICByZXR1cm4gdGhpcy56LmNtcG4oMCkgPT09IDA7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3VydmVzID0gZXhwb3J0cztcblxudmFyIGhhc2ggPSByZXF1aXJlKCdoYXNoLmpzJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi9lbGxpcHRpYycpO1xuXG52YXIgYXNzZXJ0ID0gZWxsaXB0aWMudXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBQcmVzZXRDdXJ2ZShvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnR5cGUgPT09ICdzaG9ydCcpXG4gICAgdGhpcy5jdXJ2ZSA9IG5ldyBlbGxpcHRpYy5jdXJ2ZS5zaG9ydChvcHRpb25zKTtcbiAgZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSAnZWR3YXJkcycpXG4gICAgdGhpcy5jdXJ2ZSA9IG5ldyBlbGxpcHRpYy5jdXJ2ZS5lZHdhcmRzKG9wdGlvbnMpO1xuICBlbHNlXG4gICAgdGhpcy5jdXJ2ZSA9IG5ldyBlbGxpcHRpYy5jdXJ2ZS5tb250KG9wdGlvbnMpO1xuICB0aGlzLmcgPSB0aGlzLmN1cnZlLmc7XG4gIHRoaXMubiA9IHRoaXMuY3VydmUubjtcbiAgdGhpcy5oYXNoID0gb3B0aW9ucy5oYXNoO1xuXG4gIGFzc2VydCh0aGlzLmcudmFsaWRhdGUoKSwgJ0ludmFsaWQgY3VydmUnKTtcbiAgYXNzZXJ0KHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksICdJbnZhbGlkIGN1cnZlLCBHKk4gIT0gTycpO1xufVxuY3VydmVzLlByZXNldEN1cnZlID0gUHJlc2V0Q3VydmU7XG5cbmZ1bmN0aW9uIGRlZmluZUN1cnZlKG5hbWUsIG9wdGlvbnMpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN1cnZlcywgbmFtZSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgY3VydmUgPSBuZXcgUHJlc2V0Q3VydmUob3B0aW9ucyk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3VydmVzLCBuYW1lLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGN1cnZlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjdXJ2ZTtcbiAgICB9XG4gIH0pO1xufVxuXG5kZWZpbmVDdXJ2ZSgncDE5MicsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6ICdwMTkyJyxcbiAgcDogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmJyxcbiAgYTogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjJyxcbiAgYjogJzY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxJyxcbiAgbjogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzE4OGRhODBlIGIwMzA5MGY2IDdjYmYyMGViIDQzYTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyJyxcbiAgICAnMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTEnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgncDIyNCcsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6ICdwMjI0JyxcbiAgcDogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxJyxcbiAgYTogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlJyxcbiAgYjogJ2I0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0JyxcbiAgbjogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJ2I3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxJyxcbiAgICAnYmQzNzYzODggYjVmNzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzQnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgncDI1NicsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6IG51bGwsXG4gIHA6ICdmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZicsXG4gIGE6ICdmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYycsXG4gIGI6ICc1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YicsXG4gIG46ICdmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MScsXG4gIGhhc2g6IGhhc2guc2hhMjU2LFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICc2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NicsXG4gICAgJzRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1J1xuICBdXG59KTtcblxuZGVmaW5lQ3VydmUoJ3AzODQnLCB7XG4gIHR5cGU6ICdzaG9ydCcsXG4gIHByaW1lOiBudWxsLFxuICBwOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgJyArXG4gICAgICdmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZicsXG4gIGE6ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZjJyxcbiAgYjogJ2IzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmICcgK1xuICAgICAnNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYnLFxuICBuOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgYzc2MzRkODEgJyArXG4gICAgICdmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MycsXG4gIGhhc2g6IGhhc2guc2hhMzg0LFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICdhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCAnICtcbiAgICAnNTUwMmYyNWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjcnLFxuICAgICczNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAnICtcbiAgICAnMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgncDUyMScsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6IG51bGwsXG4gIHA6ICcwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYnLFxuICBhOiAnMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgJyArXG4gICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjJyxcbiAgYjogJzAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViICcgK1xuICAgICAnOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgJyArXG4gICAgICczYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCcsXG4gIG46ICcwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4ICcgK1xuICAgICAnZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDknLFxuICBoYXNoOiBoYXNoLnNoYTUxMixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgJyArXG4gICAgJzA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3ICcgK1xuICAgICdhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NicsXG4gICAgJzAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5ICcgK1xuICAgICc1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAnICtcbiAgICAnM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTAnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgnY3VydmUyNTUxOScsIHtcbiAgdHlwZTogJ21vbnQnLFxuICBwcmltZTogJ3AyNTUxOScsXG4gIHA6ICc3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkJyxcbiAgYTogJzc2ZDA2JyxcbiAgYjogJzAnLFxuICBuOiAnMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCcsXG4gIGhhc2g6IGhhc2guc2hhMjU2LFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICc5J1xuICBdXG59KTtcblxuZGVmaW5lQ3VydmUoJ2VkMjU1MTknLCB7XG4gIHR5cGU6ICdlZHdhcmRzJyxcbiAgcHJpbWU6ICdwMjU1MTknLFxuICBwOiAnN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCcsXG4gIGE6ICctMScsXG4gIGM6ICcxJyxcbiAgLy8gLTEyMTY2NSAqICgxMjE2NjZeKC0xKSkgKG1vZCBQKVxuICBkOiAnNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMycsXG4gIG46ICcxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEnLFxuXG4gICAgLy8gNC81XG4gICAgJzY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTgnXG4gIF1cbn0pO1xuXG52YXIgcHJlO1xudHJ5IHtcbiAgcHJlID0gcmVxdWlyZSgnLi9wcmVjb21wdXRlZC9zZWNwMjU2azEnKTtcbn0gY2F0Y2ggKGUpIHtcbiAgcHJlID0gdW5kZWZpbmVkO1xufVxuXG5kZWZpbmVDdXJ2ZSgnc2VjcDI1NmsxJywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogJ2syNTYnLFxuICBwOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYnLFxuICBhOiAnMCcsXG4gIGI6ICc3JyxcbiAgbjogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxJyxcbiAgaDogJzEnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcblxuICAvLyBQcmVjb21wdXRlZCBlbmRvbW9ycGhpc21cbiAgYmV0YTogJzdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWUnLFxuICBsYW1iZGE6ICc1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyJyxcbiAgYmFzaXM6IFtcbiAgICB7XG4gICAgICBhOiAnMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUnLFxuICAgICAgYjogJy1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMydcbiAgICB9LFxuICAgIHtcbiAgICAgIGE6ICcxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgnLFxuICAgICAgYjogJzMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1J1xuICAgIH1cbiAgXSxcblxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICc3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4JyxcbiAgICAnNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOCcsXG4gICAgcHJlXG4gIF1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxudmFyIEtleVBhaXIgPSByZXF1aXJlKCcuL2tleScpO1xudmFyIFNpZ25hdHVyZSA9IHJlcXVpcmUoJy4vc2lnbmF0dXJlJyk7XG5cbmZ1bmN0aW9uIEVDKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEVDKSlcbiAgICByZXR1cm4gbmV3IEVDKG9wdGlvbnMpO1xuXG4gIC8vIFNob3J0Y3V0IGBlbGxpcHRpYy5lYyhjdXJ2ZS1uYW1lKWBcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgIGFzc2VydChlbGxpcHRpYy5jdXJ2ZXMuaGFzT3duUHJvcGVydHkob3B0aW9ucyksICdVbmtub3duIGN1cnZlICcgKyBvcHRpb25zKTtcblxuICAgIG9wdGlvbnMgPSBlbGxpcHRpYy5jdXJ2ZXNbb3B0aW9uc107XG4gIH1cblxuICAvLyBTaG9ydGN1dCBmb3IgYGVsbGlwdGljLmVjKGVsbGlwdGljLmN1cnZlcy5jdXJ2ZU5hbWUpYFxuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIGVsbGlwdGljLmN1cnZlcy5QcmVzZXRDdXJ2ZSlcbiAgICBvcHRpb25zID0geyBjdXJ2ZTogb3B0aW9ucyB9O1xuXG4gIHRoaXMuY3VydmUgPSBvcHRpb25zLmN1cnZlLmN1cnZlO1xuICB0aGlzLm4gPSB0aGlzLmN1cnZlLm47XG4gIHRoaXMubmggPSB0aGlzLm4udXNocm4oMSk7XG4gIHRoaXMuZyA9IHRoaXMuY3VydmUuZztcblxuICAvLyBQb2ludCBvbiBjdXJ2ZVxuICB0aGlzLmcgPSBvcHRpb25zLmN1cnZlLmc7XG4gIHRoaXMuZy5wcmVjb21wdXRlKG9wdGlvbnMuY3VydmUubi5iaXRMZW5ndGgoKSArIDEpO1xuXG4gIC8vIEhhc2ggZm9yIGZ1bmN0aW9uIGZvciBEUkJHXG4gIHRoaXMuaGFzaCA9IG9wdGlvbnMuaGFzaCB8fCBvcHRpb25zLmN1cnZlLmhhc2g7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEVDO1xuXG5FQy5wcm90b3R5cGUua2V5UGFpciA9IGZ1bmN0aW9uIGtleVBhaXIob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEtleVBhaXIodGhpcywgb3B0aW9ucyk7XG59O1xuXG5FQy5wcm90b3R5cGUua2V5RnJvbVByaXZhdGUgPSBmdW5jdGlvbiBrZXlGcm9tUHJpdmF0ZShwcml2LCBlbmMpIHtcbiAgcmV0dXJuIEtleVBhaXIuZnJvbVByaXZhdGUodGhpcywgcHJpdiwgZW5jKTtcbn07XG5cbkVDLnByb3RvdHlwZS5rZXlGcm9tUHVibGljID0gZnVuY3Rpb24ga2V5RnJvbVB1YmxpYyhwdWIsIGVuYykge1xuICByZXR1cm4gS2V5UGFpci5mcm9tUHVibGljKHRoaXMsIHB1YiwgZW5jKTtcbn07XG5cbkVDLnByb3RvdHlwZS5nZW5LZXlQYWlyID0gZnVuY3Rpb24gZ2VuS2V5UGFpcihvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucylcbiAgICBvcHRpb25zID0ge307XG5cbiAgLy8gSW5zdGFudGlhdGUgSG1hY19EUkJHXG4gIHZhciBkcmJnID0gbmV3IGVsbGlwdGljLmhtYWNEUkJHKHtcbiAgICBoYXNoOiB0aGlzLmhhc2gsXG4gICAgcGVyczogb3B0aW9ucy5wZXJzLFxuICAgIGVudHJvcHk6IG9wdGlvbnMuZW50cm9weSB8fCBlbGxpcHRpYy5yYW5kKHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLFxuICAgIG5vbmNlOiB0aGlzLm4udG9BcnJheSgpXG4gIH0pO1xuXG4gIHZhciBieXRlcyA9IHRoaXMubi5ieXRlTGVuZ3RoKCk7XG4gIHZhciBuczIgPSB0aGlzLm4uc3ViKG5ldyBCTigyKSk7XG4gIGRvIHtcbiAgICB2YXIgcHJpdiA9IG5ldyBCTihkcmJnLmdlbmVyYXRlKGJ5dGVzKSk7XG4gICAgaWYgKHByaXYuY21wKG5zMikgPiAwKVxuICAgICAgY29udGludWU7XG5cbiAgICBwcml2LmlhZGRuKDEpO1xuICAgIHJldHVybiB0aGlzLmtleUZyb21Qcml2YXRlKHByaXYpO1xuICB9IHdoaWxlICh0cnVlKTtcbn07XG5cbkVDLnByb3RvdHlwZS5fdHJ1bmNhdGVUb04gPSBmdW5jdGlvbiB0cnVuY2F0ZVRvTihtc2csIHRydW5jT25seSkge1xuICB2YXIgZGVsdGEgPSBtc2cuYnl0ZUxlbmd0aCgpICogOCAtIHRoaXMubi5iaXRMZW5ndGgoKTtcbiAgaWYgKGRlbHRhID4gMClcbiAgICBtc2cgPSBtc2cudXNocm4oZGVsdGEpO1xuICBpZiAoIXRydW5jT25seSAmJiBtc2cuY21wKHRoaXMubikgPj0gMClcbiAgICByZXR1cm4gbXNnLnN1Yih0aGlzLm4pO1xuICBlbHNlXG4gICAgcmV0dXJuIG1zZztcbn07XG5cbkVDLnByb3RvdHlwZS5zaWduID0gZnVuY3Rpb24gc2lnbihtc2csIGtleSwgZW5jLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZW5jID09PSAnb2JqZWN0Jykge1xuICAgIG9wdGlvbnMgPSBlbmM7XG4gICAgZW5jID0gbnVsbDtcbiAgfVxuICBpZiAoIW9wdGlvbnMpXG4gICAgb3B0aW9ucyA9IHt9O1xuXG4gIGtleSA9IHRoaXMua2V5RnJvbVByaXZhdGUoa2V5LCBlbmMpO1xuICBtc2cgPSB0aGlzLl90cnVuY2F0ZVRvTihuZXcgQk4obXNnLCAxNikpO1xuXG4gIC8vIFplcm8tZXh0ZW5kIGtleSB0byBwcm92aWRlIGVub3VnaCBlbnRyb3B5XG4gIHZhciBieXRlcyA9IHRoaXMubi5ieXRlTGVuZ3RoKCk7XG4gIHZhciBia2V5ID0ga2V5LmdldFByaXZhdGUoKS50b0FycmF5KCdiZScsIGJ5dGVzKTtcblxuICAvLyBaZXJvLWV4dGVuZCBub25jZSB0byBoYXZlIHRoZSBzYW1lIGJ5dGUgc2l6ZSBhcyBOXG4gIHZhciBub25jZSA9IG1zZy50b0FycmF5KCdiZScsIGJ5dGVzKTtcblxuICAvLyBJbnN0YW50aWF0ZSBIbWFjX0RSQkdcbiAgdmFyIGRyYmcgPSBuZXcgZWxsaXB0aWMuaG1hY0RSQkcoe1xuICAgIGhhc2g6IHRoaXMuaGFzaCxcbiAgICBlbnRyb3B5OiBia2V5LFxuICAgIG5vbmNlOiBub25jZSxcbiAgICBwZXJzOiBvcHRpb25zLnBlcnMsXG4gICAgcGVyc0VuYzogb3B0aW9ucy5wZXJzRW5jXG4gIH0pO1xuXG4gIC8vIE51bWJlciBvZiBieXRlcyB0byBnZW5lcmF0ZVxuICB2YXIgbnMxID0gdGhpcy5uLnN1YihuZXcgQk4oMSkpO1xuXG4gIGZvciAodmFyIGl0ZXIgPSAwOyB0cnVlOyBpdGVyKyspIHtcbiAgICB2YXIgayA9IG9wdGlvbnMuayA/XG4gICAgICAgIG9wdGlvbnMuayhpdGVyKSA6XG4gICAgICAgIG5ldyBCTihkcmJnLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtcbiAgICBrID0gdGhpcy5fdHJ1bmNhdGVUb04oaywgdHJ1ZSk7XG4gICAgaWYgKGsuY21wbigxKSA8PSAwIHx8IGsuY21wKG5zMSkgPj0gMClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgdmFyIGtwID0gdGhpcy5nLm11bChrKTtcbiAgICBpZiAoa3AuaXNJbmZpbml0eSgpKVxuICAgICAgY29udGludWU7XG5cbiAgICB2YXIga3BYID0ga3AuZ2V0WCgpO1xuICAgIHZhciByID0ga3BYLnVtb2QodGhpcy5uKTtcbiAgICBpZiAoci5jbXBuKDApID09PSAwKVxuICAgICAgY29udGludWU7XG5cbiAgICB2YXIgcyA9IGsuaW52bSh0aGlzLm4pLm11bChyLm11bChrZXkuZ2V0UHJpdmF0ZSgpKS5pYWRkKG1zZykpO1xuICAgIHMgPSBzLnVtb2QodGhpcy5uKTtcbiAgICBpZiAocy5jbXBuKDApID09PSAwKVxuICAgICAgY29udGludWU7XG5cbiAgICB2YXIgcmVjb3ZlcnlQYXJhbSA9IChrcC5nZXRZKCkuaXNPZGQoKSA/IDEgOiAwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAoa3BYLmNtcChyKSAhPT0gMCA/IDIgOiAwKTtcblxuICAgIC8vIFVzZSBjb21wbGVtZW50IG9mIGBzYCwgaWYgaXQgaXMgPiBgbiAvIDJgXG4gICAgaWYgKG9wdGlvbnMuY2Fub25pY2FsICYmIHMuY21wKHRoaXMubmgpID4gMCkge1xuICAgICAgcyA9IHRoaXMubi5zdWIocyk7XG4gICAgICByZWNvdmVyeVBhcmFtIF49IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTaWduYXR1cmUoeyByOiByLCBzOiBzLCByZWNvdmVyeVBhcmFtOiByZWNvdmVyeVBhcmFtIH0pO1xuICB9XG59O1xuXG5FQy5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1zZywgc2lnbmF0dXJlLCBrZXksIGVuYykge1xuICBtc2cgPSB0aGlzLl90cnVuY2F0ZVRvTihuZXcgQk4obXNnLCAxNikpO1xuICBrZXkgPSB0aGlzLmtleUZyb21QdWJsaWMoa2V5LCBlbmMpO1xuICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKHNpZ25hdHVyZSwgJ2hleCcpO1xuXG4gIC8vIFBlcmZvcm0gcHJpbWl0aXZlIHZhbHVlcyB2YWxpZGF0aW9uXG4gIHZhciByID0gc2lnbmF0dXJlLnI7XG4gIHZhciBzID0gc2lnbmF0dXJlLnM7XG4gIGlmIChyLmNtcG4oMSkgPCAwIHx8IHIuY21wKHRoaXMubikgPj0gMClcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChzLmNtcG4oMSkgPCAwIHx8IHMuY21wKHRoaXMubikgPj0gMClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gVmFsaWRhdGUgc2lnbmF0dXJlXG4gIHZhciBzaW52ID0gcy5pbnZtKHRoaXMubik7XG4gIHZhciB1MSA9IHNpbnYubXVsKG1zZykudW1vZCh0aGlzLm4pO1xuICB2YXIgdTIgPSBzaW52Lm11bChyKS51bW9kKHRoaXMubik7XG5cbiAgdmFyIHAgPSB0aGlzLmcubXVsQWRkKHUxLCBrZXkuZ2V0UHVibGljKCksIHUyKTtcbiAgaWYgKHAuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiBmYWxzZTtcblxuICByZXR1cm4gcC5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChyKSA9PT0gMDtcbn07XG5cbkVDLnByb3RvdHlwZS5yZWNvdmVyUHViS2V5ID0gZnVuY3Rpb24obXNnLCBzaWduYXR1cmUsIGosIGVuYykge1xuICBhc3NlcnQoKDMgJiBqKSA9PT0gaiwgJ1RoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHMnKTtcbiAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShzaWduYXR1cmUsIGVuYyk7XG5cbiAgdmFyIG4gPSB0aGlzLm47XG4gIHZhciBlID0gbmV3IEJOKG1zZyk7XG4gIHZhciByID0gc2lnbmF0dXJlLnI7XG4gIHZhciBzID0gc2lnbmF0dXJlLnM7XG5cbiAgLy8gQSBzZXQgTFNCIHNpZ25pZmllcyB0aGF0IHRoZSB5LWNvb3JkaW5hdGUgaXMgb2RkXG4gIHZhciBpc1lPZGQgPSBqICYgMTtcbiAgdmFyIGlzU2Vjb25kS2V5ID0gaiA+PiAxO1xuICBpZiAoci5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSkgPj0gMCAmJiBpc1NlY29uZEtleSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIHNlbmNvbmQga2V5IGNhbmRpbmF0ZScpO1xuXG4gIC8vIDEuMS4gTGV0IHggPSByICsgam4uXG4gIGlmIChpc1NlY29uZEtleSlcbiAgICByID0gdGhpcy5jdXJ2ZS5wb2ludEZyb21YKHIuYWRkKHRoaXMuY3VydmUubiksIGlzWU9kZCk7XG4gIGVsc2VcbiAgICByID0gdGhpcy5jdXJ2ZS5wb2ludEZyb21YKHIsIGlzWU9kZCk7XG5cbiAgdmFyIGVOZWcgPSBuLnN1YihlKTtcblxuICAvLyAxLjYuMSBDb21wdXRlIFEgPSByXi0xIChzUiAtICBlRylcbiAgLy8gICAgICAgICAgICAgICBRID0gcl4tMSAoc1IgKyAtZUcpXG4gIHZhciBySW52ID0gc2lnbmF0dXJlLnIuaW52bShuKTtcbiAgcmV0dXJuIHRoaXMuZy5tdWxBZGQoZU5lZywgciwgcykubXVsKHJJbnYpO1xufTtcblxuRUMucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW0gPSBmdW5jdGlvbihlLCBzaWduYXR1cmUsIFEsIGVuYykge1xuICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKHNpZ25hdHVyZSwgZW5jKTtcbiAgaWYgKHNpZ25hdHVyZS5yZWNvdmVyeVBhcmFtICE9PSBudWxsKVxuICAgIHJldHVybiBzaWduYXR1cmUucmVjb3ZlcnlQYXJhbTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIHZhciBRcHJpbWU7XG4gICAgdHJ5IHtcbiAgICAgIFFwcmltZSA9IHRoaXMucmVjb3ZlclB1YktleShlLCBzaWduYXR1cmUsIGkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChRcHJpbWUuZXEoUSkpXG4gICAgICByZXR1cm4gaTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcblxuZnVuY3Rpb24gS2V5UGFpcihlYywgb3B0aW9ucykge1xuICB0aGlzLmVjID0gZWM7XG4gIHRoaXMucHJpdiA9IG51bGw7XG4gIHRoaXMucHViID0gbnVsbDtcblxuICAvLyBLZXlQYWlyKGVjLCB7IHByaXY6IC4uLiwgcHViOiAuLi4gfSlcbiAgaWYgKG9wdGlvbnMucHJpdilcbiAgICB0aGlzLl9pbXBvcnRQcml2YXRlKG9wdGlvbnMucHJpdiwgb3B0aW9ucy5wcml2RW5jKTtcbiAgaWYgKG9wdGlvbnMucHViKVxuICAgIHRoaXMuX2ltcG9ydFB1YmxpYyhvcHRpb25zLnB1Yiwgb3B0aW9ucy5wdWJFbmMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBLZXlQYWlyO1xuXG5LZXlQYWlyLmZyb21QdWJsaWMgPSBmdW5jdGlvbiBmcm9tUHVibGljKGVjLCBwdWIsIGVuYykge1xuICBpZiAocHViIGluc3RhbmNlb2YgS2V5UGFpcilcbiAgICByZXR1cm4gcHViO1xuXG4gIHJldHVybiBuZXcgS2V5UGFpcihlYywge1xuICAgIHB1YjogcHViLFxuICAgIHB1YkVuYzogZW5jXG4gIH0pO1xufTtcblxuS2V5UGFpci5mcm9tUHJpdmF0ZSA9IGZ1bmN0aW9uIGZyb21Qcml2YXRlKGVjLCBwcml2LCBlbmMpIHtcbiAgaWYgKHByaXYgaW5zdGFuY2VvZiBLZXlQYWlyKVxuICAgIHJldHVybiBwcml2O1xuXG4gIHJldHVybiBuZXcgS2V5UGFpcihlYywge1xuICAgIHByaXY6IHByaXYsXG4gICAgcHJpdkVuYzogZW5jXG4gIH0pO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZSgpIHtcbiAgdmFyIHB1YiA9IHRoaXMuZ2V0UHVibGljKCk7XG5cbiAgaWYgKHB1Yi5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHsgcmVzdWx0OiBmYWxzZSwgcmVhc29uOiAnSW52YWxpZCBwdWJsaWMga2V5JyB9O1xuICBpZiAoIXB1Yi52YWxpZGF0ZSgpKVxuICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbjogJ1B1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnQnIH07XG4gIGlmICghcHViLm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4geyByZXN1bHQ6IGZhbHNlLCByZWFzb246ICdQdWJsaWMga2V5ICogTiAhPSBPJyB9O1xuXG4gIHJldHVybiB7IHJlc3VsdDogdHJ1ZSwgcmVhc29uOiBudWxsIH07XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5nZXRQdWJsaWMgPSBmdW5jdGlvbiBnZXRQdWJsaWMoY29tcGFjdCwgZW5jKSB7XG4gIC8vIGNvbXBhY3QgaXMgb3B0aW9uYWwgYXJndW1lbnRcbiAgaWYgKHR5cGVvZiBjb21wYWN0ID09PSAnc3RyaW5nJykge1xuICAgIGVuYyA9IGNvbXBhY3Q7XG4gICAgY29tcGFjdCA9IG51bGw7XG4gIH1cblxuICBpZiAoIXRoaXMucHViKVxuICAgIHRoaXMucHViID0gdGhpcy5lYy5nLm11bCh0aGlzLnByaXYpO1xuXG4gIGlmICghZW5jKVxuICAgIHJldHVybiB0aGlzLnB1YjtcblxuICByZXR1cm4gdGhpcy5wdWIuZW5jb2RlKGVuYywgY29tcGFjdCk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5nZXRQcml2YXRlID0gZnVuY3Rpb24gZ2V0UHJpdmF0ZShlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHRoaXMucHJpdi50b1N0cmluZygxNiwgMik7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5wcml2O1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGUgPSBmdW5jdGlvbiBfaW1wb3J0UHJpdmF0ZShrZXksIGVuYykge1xuICB0aGlzLnByaXYgPSBuZXcgQk4oa2V5LCBlbmMgfHwgMTYpO1xuXG4gIC8vIEVuc3VyZSB0aGF0IHRoZSBwcml2IHdvbid0IGJlIGJpZ2dlciB0aGFuIG4sIG90aGVyd2lzZSB3ZSBtYXkgZmFpbFxuICAvLyBpbiBmaXhlZCBtdWx0aXBsaWNhdGlvbiBtZXRob2RcbiAgdGhpcy5wcml2ID0gdGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLl9pbXBvcnRQdWJsaWMgPSBmdW5jdGlvbiBfaW1wb3J0UHVibGljKGtleSwgZW5jKSB7XG4gIGlmIChrZXkueCB8fCBrZXkueSkge1xuICAgIHRoaXMucHViID0gdGhpcy5lYy5jdXJ2ZS5wb2ludChrZXkueCwga2V5LnkpO1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLnB1YiA9IHRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQoa2V5LCBlbmMpO1xufTtcblxuLy8gRUNESFxuS2V5UGFpci5wcm90b3R5cGUuZGVyaXZlID0gZnVuY3Rpb24gZGVyaXZlKHB1Yikge1xuICByZXR1cm4gcHViLm11bCh0aGlzLnByaXYpLmdldFgoKTtcbn07XG5cbi8vIEVDRFNBXG5LZXlQYWlyLnByb3RvdHlwZS5zaWduID0gZnVuY3Rpb24gc2lnbihtc2csIGVuYywgb3B0aW9ucykge1xuICByZXR1cm4gdGhpcy5lYy5zaWduKG1zZywgdGhpcywgZW5jLCBvcHRpb25zKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtc2csIHNpZ25hdHVyZSkge1xuICByZXR1cm4gdGhpcy5lYy52ZXJpZnkobXNnLCBzaWduYXR1cmUsIHRoaXMpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gIHJldHVybiAnPEtleSBwcml2OiAnICsgKHRoaXMucHJpdiAmJiB0aGlzLnByaXYudG9TdHJpbmcoMTYsIDIpKSArXG4gICAgICAgICAnIHB1YjogJyArICh0aGlzLnB1YiAmJiB0aGlzLnB1Yi5pbnNwZWN0KCkpICsgJyA+Jztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG5cbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgdXRpbHMgPSBlbGxpcHRpYy51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIFNpZ25hdHVyZShvcHRpb25zLCBlbmMpIHtcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBTaWduYXR1cmUpXG4gICAgcmV0dXJuIG9wdGlvbnM7XG5cbiAgaWYgKHRoaXMuX2ltcG9ydERFUihvcHRpb25zLCBlbmMpKVxuICAgIHJldHVybjtcblxuICBhc3NlcnQob3B0aW9ucy5yICYmIG9wdGlvbnMucywgJ1NpZ25hdHVyZSB3aXRob3V0IHIgb3IgcycpO1xuICB0aGlzLnIgPSBuZXcgQk4ob3B0aW9ucy5yLCAxNik7XG4gIHRoaXMucyA9IG5ldyBCTihvcHRpb25zLnMsIDE2KTtcbiAgaWYgKG9wdGlvbnMucmVjb3ZlcnlQYXJhbSA9PT0gdW5kZWZpbmVkKVxuICAgIHRoaXMucmVjb3ZlcnlQYXJhbSA9IG51bGw7XG4gIGVsc2VcbiAgICB0aGlzLnJlY292ZXJ5UGFyYW0gPSBvcHRpb25zLnJlY292ZXJ5UGFyYW07XG59XG5tb2R1bGUuZXhwb3J0cyA9IFNpZ25hdHVyZTtcblxuZnVuY3Rpb24gUG9zaXRpb24oKSB7XG4gIHRoaXMucGxhY2UgPSAwO1xufVxuXG5mdW5jdGlvbiBnZXRMZW5ndGgoYnVmLCBwKSB7XG4gIHZhciBpbml0aWFsID0gYnVmW3AucGxhY2UrK107XG4gIGlmICghKGluaXRpYWwgJiAweDgwKSkge1xuICAgIHJldHVybiBpbml0aWFsO1xuICB9XG4gIHZhciBvY3RldExlbiA9IGluaXRpYWwgJiAweGY7XG4gIHZhciB2YWwgPSAwO1xuICBmb3IgKHZhciBpID0gMCwgb2ZmID0gcC5wbGFjZTsgaSA8IG9jdGV0TGVuOyBpKyssIG9mZisrKSB7XG4gICAgdmFsIDw8PSA4O1xuICAgIHZhbCB8PSBidWZbb2ZmXTtcbiAgfVxuICBwLnBsYWNlID0gb2ZmO1xuICByZXR1cm4gdmFsO1xufVxuXG5mdW5jdGlvbiBybVBhZGRpbmcoYnVmKSB7XG4gIHZhciBpID0gMDtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGggLSAxO1xuICB3aGlsZSAoIWJ1ZltpXSAmJiAhKGJ1ZltpICsgMV0gJiAweDgwKSAmJiBpIDwgbGVuKSB7XG4gICAgaSsrO1xuICB9XG4gIGlmIChpID09PSAwKSB7XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuICByZXR1cm4gYnVmLnNsaWNlKGkpO1xufVxuXG5TaWduYXR1cmUucHJvdG90eXBlLl9pbXBvcnRERVIgPSBmdW5jdGlvbiBfaW1wb3J0REVSKGRhdGEsIGVuYykge1xuICBkYXRhID0gdXRpbHMudG9BcnJheShkYXRhLCBlbmMpO1xuICB2YXIgcCA9IG5ldyBQb3NpdGlvbigpO1xuICBpZiAoZGF0YVtwLnBsYWNlKytdICE9PSAweDMwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsZW4gPSBnZXRMZW5ndGgoZGF0YSwgcCk7XG4gIGlmICgobGVuICsgcC5wbGFjZSkgIT09IGRhdGEubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChkYXRhW3AucGxhY2UrK10gIT09IDB4MDIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHJsZW4gPSBnZXRMZW5ndGgoZGF0YSwgcCk7XG4gIHZhciByID0gZGF0YS5zbGljZShwLnBsYWNlLCBybGVuICsgcC5wbGFjZSk7XG4gIHAucGxhY2UgKz0gcmxlbjtcbiAgaWYgKGRhdGFbcC5wbGFjZSsrXSAhPT0gMHgwMikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgc2xlbiA9IGdldExlbmd0aChkYXRhLCBwKTtcbiAgaWYgKGRhdGEubGVuZ3RoICE9PSBzbGVuICsgcC5wbGFjZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcyA9IGRhdGEuc2xpY2UocC5wbGFjZSwgc2xlbiArIHAucGxhY2UpO1xuICBpZiAoclswXSA9PT0gMCAmJiAoclsxXSAmIDB4ODApKSB7XG4gICAgciA9IHIuc2xpY2UoMSk7XG4gIH1cbiAgaWYgKHNbMF0gPT09IDAgJiYgKHNbMV0gJiAweDgwKSkge1xuICAgIHMgPSBzLnNsaWNlKDEpO1xuICB9XG5cbiAgdGhpcy5yID0gbmV3IEJOKHIpO1xuICB0aGlzLnMgPSBuZXcgQk4ocyk7XG4gIHRoaXMucmVjb3ZlcnlQYXJhbSA9IG51bGw7XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBjb25zdHJ1Y3RMZW5ndGgoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA8IDB4ODApIHtcbiAgICBhcnIucHVzaChsZW4pO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgb2N0ZXRzID0gMSArIChNYXRoLmxvZyhsZW4pIC8gTWF0aC5MTjIgPj4+IDMpO1xuICBhcnIucHVzaChvY3RldHMgfCAweDgwKTtcbiAgd2hpbGUgKC0tb2N0ZXRzKSB7XG4gICAgYXJyLnB1c2goKGxlbiA+Pj4gKG9jdGV0cyA8PCAzKSkgJiAweGZmKTtcbiAgfVxuICBhcnIucHVzaChsZW4pO1xufVxuXG5TaWduYXR1cmUucHJvdG90eXBlLnRvREVSID0gZnVuY3Rpb24gdG9ERVIoZW5jKSB7XG4gIHZhciByID0gdGhpcy5yLnRvQXJyYXkoKTtcbiAgdmFyIHMgPSB0aGlzLnMudG9BcnJheSgpO1xuXG4gIC8vIFBhZCB2YWx1ZXNcbiAgaWYgKHJbMF0gJiAweDgwKVxuICAgIHIgPSBbIDAgXS5jb25jYXQocik7XG4gIC8vIFBhZCB2YWx1ZXNcbiAgaWYgKHNbMF0gJiAweDgwKVxuICAgIHMgPSBbIDAgXS5jb25jYXQocyk7XG5cbiAgciA9IHJtUGFkZGluZyhyKTtcbiAgcyA9IHJtUGFkZGluZyhzKTtcblxuICB3aGlsZSAoIXNbMF0gJiYgIShzWzFdICYgMHg4MCkpIHtcbiAgICBzID0gcy5zbGljZSgxKTtcbiAgfVxuICB2YXIgYXJyID0gWyAweDAyIF07XG4gIGNvbnN0cnVjdExlbmd0aChhcnIsIHIubGVuZ3RoKTtcbiAgYXJyID0gYXJyLmNvbmNhdChyKTtcbiAgYXJyLnB1c2goMHgwMik7XG4gIGNvbnN0cnVjdExlbmd0aChhcnIsIHMubGVuZ3RoKTtcbiAgdmFyIGJhY2tIYWxmID0gYXJyLmNvbmNhdChzKTtcbiAgdmFyIHJlcyA9IFsgMHgzMCBdO1xuICBjb25zdHJ1Y3RMZW5ndGgocmVzLCBiYWNrSGFsZi5sZW5ndGgpO1xuICByZXMgPSByZXMuY29uY2F0KGJhY2tIYWxmKTtcbiAgcmV0dXJuIHV0aWxzLmVuY29kZShyZXMsIGVuYyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzaCA9IHJlcXVpcmUoJ2hhc2guanMnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgdXRpbHMgPSBlbGxpcHRpYy51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG52YXIgcGFyc2VCeXRlcyA9IHV0aWxzLnBhcnNlQnl0ZXM7XG52YXIgS2V5UGFpciA9IHJlcXVpcmUoJy4va2V5Jyk7XG52YXIgU2lnbmF0dXJlID0gcmVxdWlyZSgnLi9zaWduYXR1cmUnKTtcblxuZnVuY3Rpb24gRUREU0EoY3VydmUpIHtcbiAgYXNzZXJ0KGN1cnZlID09PSAnZWQyNTUxOScsICdvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyJyk7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEVERFNBKSlcbiAgICByZXR1cm4gbmV3IEVERFNBKGN1cnZlKTtcblxuICB2YXIgY3VydmUgPSBlbGxpcHRpYy5jdXJ2ZXNbY3VydmVdLmN1cnZlO1xuICB0aGlzLmN1cnZlID0gY3VydmU7XG4gIHRoaXMuZyA9IGN1cnZlLmc7XG4gIHRoaXMuZy5wcmVjb21wdXRlKGN1cnZlLm4uYml0TGVuZ3RoKCkgKyAxKTtcblxuICB0aGlzLnBvaW50Q2xhc3MgPSBjdXJ2ZS5wb2ludCgpLmNvbnN0cnVjdG9yO1xuICB0aGlzLmVuY29kaW5nTGVuZ3RoID0gTWF0aC5jZWlsKGN1cnZlLm4uYml0TGVuZ3RoKCkgLyA4KTtcbiAgdGhpcy5oYXNoID0gaGFzaC5zaGE1MTI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRUREU0E7XG5cbi8qKlxuKiBAcGFyYW0ge0FycmF5fFN0cmluZ30gbWVzc2FnZSAtIG1lc3NhZ2UgYnl0ZXNcbiogQHBhcmFtIHtBcnJheXxTdHJpbmd8S2V5UGFpcn0gc2VjcmV0IC0gc2VjcmV0IGJ5dGVzIG9yIGEga2V5cGFpclxuKiBAcmV0dXJucyB7U2lnbmF0dXJlfSAtIHNpZ25hdHVyZVxuKi9cbkVERFNBLnByb3RvdHlwZS5zaWduID0gZnVuY3Rpb24gc2lnbihtZXNzYWdlLCBzZWNyZXQpIHtcbiAgbWVzc2FnZSA9IHBhcnNlQnl0ZXMobWVzc2FnZSk7XG4gIHZhciBrZXkgPSB0aGlzLmtleUZyb21TZWNyZXQoc2VjcmV0KTtcbiAgdmFyIHIgPSB0aGlzLmhhc2hJbnQoa2V5Lm1lc3NhZ2VQcmVmaXgoKSwgbWVzc2FnZSk7XG4gIHZhciBSID0gdGhpcy5nLm11bChyKTtcbiAgdmFyIFJlbmNvZGVkID0gdGhpcy5lbmNvZGVQb2ludChSKTtcbiAgdmFyIHNfID0gdGhpcy5oYXNoSW50KFJlbmNvZGVkLCBrZXkucHViQnl0ZXMoKSwgbWVzc2FnZSlcbiAgICAgICAgICAgICAgIC5tdWwoa2V5LnByaXYoKSk7XG4gIHZhciBTID0gci5hZGQoc18pLnVtb2QodGhpcy5jdXJ2ZS5uKTtcbiAgcmV0dXJuIHRoaXMubWFrZVNpZ25hdHVyZSh7IFI6IFIsIFM6IFMsIFJlbmNvZGVkOiBSZW5jb2RlZCB9KTtcbn07XG5cbi8qKlxuKiBAcGFyYW0ge0FycmF5fSBtZXNzYWdlIC0gbWVzc2FnZSBieXRlc1xuKiBAcGFyYW0ge0FycmF5fFN0cmluZ3xTaWduYXR1cmV9IHNpZyAtIHNpZyBieXRlc1xuKiBAcGFyYW0ge0FycmF5fFN0cmluZ3xQb2ludHxLZXlQYWlyfSBwdWIgLSBwdWJsaWMga2V5XG4qIEByZXR1cm5zIHtCb29sZWFufSAtIHRydWUgaWYgcHVibGljIGtleSBtYXRjaGVzIHNpZyBvZiBtZXNzYWdlXG4qL1xuRUREU0EucHJvdG90eXBlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlLCBzaWcsIHB1Yikge1xuICBtZXNzYWdlID0gcGFyc2VCeXRlcyhtZXNzYWdlKTtcbiAgc2lnID0gdGhpcy5tYWtlU2lnbmF0dXJlKHNpZyk7XG4gIHZhciBrZXkgPSB0aGlzLmtleUZyb21QdWJsaWMocHViKTtcbiAgdmFyIGggPSB0aGlzLmhhc2hJbnQoc2lnLlJlbmNvZGVkKCksIGtleS5wdWJCeXRlcygpLCBtZXNzYWdlKTtcbiAgdmFyIFNHID0gdGhpcy5nLm11bChzaWcuUygpKTtcbiAgdmFyIFJwbHVzQWggPSBzaWcuUigpLmFkZChrZXkucHViKCkubXVsKGgpKTtcbiAgcmV0dXJuIFJwbHVzQWguZXEoU0cpO1xufTtcblxuRUREU0EucHJvdG90eXBlLmhhc2hJbnQgPSBmdW5jdGlvbiBoYXNoSW50KCkge1xuICB2YXIgaGFzaCA9IHRoaXMuaGFzaCgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICBoYXNoLnVwZGF0ZShhcmd1bWVudHNbaV0pO1xuICByZXR1cm4gdXRpbHMuaW50RnJvbUxFKGhhc2guZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5rZXlGcm9tUHVibGljID0gZnVuY3Rpb24ga2V5RnJvbVB1YmxpYyhwdWIpIHtcbiAgcmV0dXJuIEtleVBhaXIuZnJvbVB1YmxpYyh0aGlzLCBwdWIpO1xufTtcblxuRUREU0EucHJvdG90eXBlLmtleUZyb21TZWNyZXQgPSBmdW5jdGlvbiBrZXlGcm9tU2VjcmV0KHNlY3JldCkge1xuICByZXR1cm4gS2V5UGFpci5mcm9tU2VjcmV0KHRoaXMsIHNlY3JldCk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUubWFrZVNpZ25hdHVyZSA9IGZ1bmN0aW9uIG1ha2VTaWduYXR1cmUoc2lnKSB7XG4gIGlmIChzaWcgaW5zdGFuY2VvZiBTaWduYXR1cmUpXG4gICAgcmV0dXJuIHNpZztcbiAgcmV0dXJuIG5ldyBTaWduYXR1cmUodGhpcywgc2lnKTtcbn07XG5cbi8qKlxuKiAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1qb3NlZnNzb24tZWRkc2EtZWQyNTUxOS0wMyNzZWN0aW9uLTUuMlxuKlxuKiBFRERTQSBkZWZpbmVzIG1ldGhvZHMgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZyBwb2ludHMgYW5kIGludGVnZXJzLiBUaGVzZSBhcmVcbiogaGVscGVyIGNvbnZlbmllbmNlIG1ldGhvZHMsIHRoYXQgcGFzcyBhbG9uZyB0byB1dGlsaXR5IGZ1bmN0aW9ucyBpbXBsaWVkXG4qIHBhcmFtZXRlcnMuXG4qXG4qL1xuRUREU0EucHJvdG90eXBlLmVuY29kZVBvaW50ID0gZnVuY3Rpb24gZW5jb2RlUG9pbnQocG9pbnQpIHtcbiAgdmFyIGVuYyA9IHBvaW50LmdldFkoKS50b0FycmF5KCdsZScsIHRoaXMuZW5jb2RpbmdMZW5ndGgpO1xuICBlbmNbdGhpcy5lbmNvZGluZ0xlbmd0aCAtIDFdIHw9IHBvaW50LmdldFgoKS5pc09kZCgpID8gMHg4MCA6IDA7XG4gIHJldHVybiBlbmM7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuZGVjb2RlUG9pbnQgPSBmdW5jdGlvbiBkZWNvZGVQb2ludChieXRlcykge1xuICBieXRlcyA9IHV0aWxzLnBhcnNlQnl0ZXMoYnl0ZXMpO1xuXG4gIHZhciBsYXN0SXggPSBieXRlcy5sZW5ndGggLSAxO1xuICB2YXIgbm9ybWVkID0gYnl0ZXMuc2xpY2UoMCwgbGFzdEl4KS5jb25jYXQoYnl0ZXNbbGFzdEl4XSAmIH4weDgwKTtcbiAgdmFyIHhJc09kZCA9IChieXRlc1tsYXN0SXhdICYgMHg4MCkgIT09IDA7XG5cbiAgdmFyIHkgPSB1dGlscy5pbnRGcm9tTEUobm9ybWVkKTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWSh5LCB4SXNPZGQpO1xufTtcblxuRUREU0EucHJvdG90eXBlLmVuY29kZUludCA9IGZ1bmN0aW9uIGVuY29kZUludChudW0pIHtcbiAgcmV0dXJuIG51bS50b0FycmF5KCdsZScsIHRoaXMuZW5jb2RpbmdMZW5ndGgpO1xufTtcblxuRUREU0EucHJvdG90eXBlLmRlY29kZUludCA9IGZ1bmN0aW9uIGRlY29kZUludChieXRlcykge1xuICByZXR1cm4gdXRpbHMuaW50RnJvbUxFKGJ5dGVzKTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5pc1BvaW50ID0gZnVuY3Rpb24gaXNQb2ludCh2YWwpIHtcbiAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgdXRpbHMgPSBlbGxpcHRpYy51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG52YXIgcGFyc2VCeXRlcyA9IHV0aWxzLnBhcnNlQnl0ZXM7XG52YXIgY2FjaGVkUHJvcGVydHkgPSB1dGlscy5jYWNoZWRQcm9wZXJ0eTtcblxuLyoqXG4qIEBwYXJhbSB7RUREU0F9IGVkZHNhIC0gaW5zdGFuY2VcbiogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIHB1YmxpYy9wcml2YXRlIGtleSBwYXJhbWV0ZXJzXG4qXG4qIEBwYXJhbSB7QXJyYXk8Qnl0ZT59IFtwYXJhbXMuc2VjcmV0XSAtIHNlY3JldCBzZWVkIGJ5dGVzXG4qIEBwYXJhbSB7UG9pbnR9IFtwYXJhbXMucHViXSAtIHB1YmxpYyBrZXkgcG9pbnQgKGFrYSBgQWAgaW4gZWRkc2EgdGVybXMpXG4qIEBwYXJhbSB7QXJyYXk8Qnl0ZT59IFtwYXJhbXMucHViXSAtIHB1YmxpYyBrZXkgcG9pbnQgZW5jb2RlZCBhcyBieXRlc1xuKlxuKi9cbmZ1bmN0aW9uIEtleVBhaXIoZWRkc2EsIHBhcmFtcykge1xuICB0aGlzLmVkZHNhID0gZWRkc2E7XG4gIHRoaXMuX3NlY3JldCA9IHBhcnNlQnl0ZXMocGFyYW1zLnNlY3JldCk7XG4gIGlmIChlZGRzYS5pc1BvaW50KHBhcmFtcy5wdWIpKVxuICAgIHRoaXMuX3B1YiA9IHBhcmFtcy5wdWI7XG4gIGVsc2VcbiAgICB0aGlzLl9wdWJCeXRlcyA9IHBhcnNlQnl0ZXMocGFyYW1zLnB1Yik7XG59XG5cbktleVBhaXIuZnJvbVB1YmxpYyA9IGZ1bmN0aW9uIGZyb21QdWJsaWMoZWRkc2EsIHB1Yikge1xuICBpZiAocHViIGluc3RhbmNlb2YgS2V5UGFpcilcbiAgICByZXR1cm4gcHViO1xuICByZXR1cm4gbmV3IEtleVBhaXIoZWRkc2EsIHsgcHViOiBwdWIgfSk7XG59O1xuXG5LZXlQYWlyLmZyb21TZWNyZXQgPSBmdW5jdGlvbiBmcm9tU2VjcmV0KGVkZHNhLCBzZWNyZXQpIHtcbiAgaWYgKHNlY3JldCBpbnN0YW5jZW9mIEtleVBhaXIpXG4gICAgcmV0dXJuIHNlY3JldDtcbiAgcmV0dXJuIG5ldyBLZXlQYWlyKGVkZHNhLCB7IHNlY3JldDogc2VjcmV0IH0pO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuc2VjcmV0ID0gZnVuY3Rpb24gc2VjcmV0KCkge1xuICByZXR1cm4gdGhpcy5fc2VjcmV0O1xufTtcblxuY2FjaGVkUHJvcGVydHkoS2V5UGFpciwgZnVuY3Rpb24gcHViQnl0ZXMoKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsIGZ1bmN0aW9uIHB1YigpIHtcbiAgaWYgKHRoaXMuX3B1YkJ5dGVzKVxuICAgIHJldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsIGZ1bmN0aW9uIHByaXZCeXRlcygpIHtcbiAgdmFyIGVkZHNhID0gdGhpcy5lZGRzYTtcbiAgdmFyIGhhc2ggPSB0aGlzLmhhc2goKTtcbiAgdmFyIGxhc3RJeCA9IGVkZHNhLmVuY29kaW5nTGVuZ3RoIC0gMTtcblxuICB2YXIgYSA9IGhhc2guc2xpY2UoMCwgZWRkc2EuZW5jb2RpbmdMZW5ndGgpO1xuICBhWzBdICY9IDI0ODtcbiAgYVtsYXN0SXhdICY9IDEyNztcbiAgYVtsYXN0SXhdIHw9IDY0O1xuXG4gIHJldHVybiBhO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsIGZ1bmN0aW9uIHByaXYoKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCBmdW5jdGlvbiBoYXNoKCkge1xuICByZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsIGZ1bmN0aW9uIG1lc3NhZ2VQcmVmaXgoKSB7XG4gIHJldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKTtcbn0pO1xuXG5LZXlQYWlyLnByb3RvdHlwZS5zaWduID0gZnVuY3Rpb24gc2lnbihtZXNzYWdlKSB7XG4gIGFzc2VydCh0aGlzLl9zZWNyZXQsICdLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeScpO1xuICByZXR1cm4gdGhpcy5lZGRzYS5zaWduKG1lc3NhZ2UsIHRoaXMpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UsIHNpZykge1xuICByZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkobWVzc2FnZSwgc2lnLCB0aGlzKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLmdldFNlY3JldCA9IGZ1bmN0aW9uIGdldFNlY3JldChlbmMpIHtcbiAgYXNzZXJ0KHRoaXMuX3NlY3JldCwgJ0tleVBhaXIgaXMgcHVibGljIG9ubHknKTtcbiAgcmV0dXJuIHV0aWxzLmVuY29kZSh0aGlzLnNlY3JldCgpLCBlbmMpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuZ2V0UHVibGljID0gZnVuY3Rpb24gZ2V0UHVibGljKGVuYykge1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHRoaXMucHViQnl0ZXMoKSwgZW5jKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gS2V5UGFpcjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgdXRpbHMgPSBlbGxpcHRpYy51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG52YXIgY2FjaGVkUHJvcGVydHkgPSB1dGlscy5jYWNoZWRQcm9wZXJ0eTtcbnZhciBwYXJzZUJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcztcblxuLyoqXG4qIEBwYXJhbSB7RUREU0F9IGVkZHNhIC0gZWRkc2EgaW5zdGFuY2VcbiogQHBhcmFtIHtBcnJheTxCeXRlcz58T2JqZWN0fSBzaWcgLVxuKiBAcGFyYW0ge0FycmF5PEJ5dGVzPnxQb2ludH0gW3NpZy5SXSAtIFIgcG9pbnQgYXMgUG9pbnQgb3IgYnl0ZXNcbiogQHBhcmFtIHtBcnJheTxCeXRlcz58Ym59IFtzaWcuU10gLSBTIHNjYWxhciBhcyBibiBvciBieXRlc1xuKiBAcGFyYW0ge0FycmF5PEJ5dGVzPn0gW3NpZy5SZW5jb2RlZF0gLSBSIHBvaW50IGVuY29kZWRcbiogQHBhcmFtIHtBcnJheTxCeXRlcz59IFtzaWcuU2VuY29kZWRdIC0gUyBzY2FsYXIgZW5jb2RlZFxuKi9cbmZ1bmN0aW9uIFNpZ25hdHVyZShlZGRzYSwgc2lnKSB7XG4gIHRoaXMuZWRkc2EgPSBlZGRzYTtcblxuICBpZiAodHlwZW9mIHNpZyAhPT0gJ29iamVjdCcpXG4gICAgc2lnID0gcGFyc2VCeXRlcyhzaWcpO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHNpZykpIHtcbiAgICBzaWcgPSB7XG4gICAgICBSOiBzaWcuc2xpY2UoMCwgZWRkc2EuZW5jb2RpbmdMZW5ndGgpLFxuICAgICAgUzogc2lnLnNsaWNlKGVkZHNhLmVuY29kaW5nTGVuZ3RoKVxuICAgIH07XG4gIH1cblxuICBhc3NlcnQoc2lnLlIgJiYgc2lnLlMsICdTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMnKTtcblxuICBpZiAoZWRkc2EuaXNQb2ludChzaWcuUikpXG4gICAgdGhpcy5fUiA9IHNpZy5SO1xuICBpZiAoc2lnLlMgaW5zdGFuY2VvZiBCTilcbiAgICB0aGlzLl9TID0gc2lnLlM7XG5cbiAgdGhpcy5fUmVuY29kZWQgPSBBcnJheS5pc0FycmF5KHNpZy5SKSA/IHNpZy5SIDogc2lnLlJlbmNvZGVkO1xuICB0aGlzLl9TZW5jb2RlZCA9IEFycmF5LmlzQXJyYXkoc2lnLlMpID8gc2lnLlMgOiBzaWcuU2VuY29kZWQ7XG59XG5cbmNhY2hlZFByb3BlcnR5KFNpZ25hdHVyZSwgZnVuY3Rpb24gUygpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoU2lnbmF0dXJlLCBmdW5jdGlvbiBSKCkge1xuICByZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLlJlbmNvZGVkKCkpO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KFNpZ25hdHVyZSwgZnVuY3Rpb24gUmVuY29kZWQoKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShTaWduYXR1cmUsIGZ1bmN0aW9uIFNlbmNvZGVkKCkge1xuICByZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpO1xufSk7XG5cblNpZ25hdHVyZS5wcm90b3R5cGUudG9CeXRlcyA9IGZ1bmN0aW9uIHRvQnl0ZXMoKSB7XG4gIHJldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSk7XG59O1xuXG5TaWduYXR1cmUucHJvdG90eXBlLnRvSGV4ID0gZnVuY3Rpb24gdG9IZXgoKSB7XG4gIHJldHVybiB1dGlscy5lbmNvZGUodGhpcy50b0J5dGVzKCksICdoZXgnKS50b1VwcGVyQ2FzZSgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTaWduYXR1cmU7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNoID0gcmVxdWlyZSgnaGFzaC5qcycpO1xudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gSG1hY0RSQkcob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hY0RSQkcpKVxuICAgIHJldHVybiBuZXcgSG1hY0RSQkcob3B0aW9ucyk7XG4gIHRoaXMuaGFzaCA9IG9wdGlvbnMuaGFzaDtcbiAgdGhpcy5wcmVkUmVzaXN0ID0gISFvcHRpb25zLnByZWRSZXNpc3Q7XG5cbiAgdGhpcy5vdXRMZW4gPSB0aGlzLmhhc2gub3V0U2l6ZTtcbiAgdGhpcy5taW5FbnRyb3B5ID0gb3B0aW9ucy5taW5FbnRyb3B5IHx8IHRoaXMuaGFzaC5obWFjU3RyZW5ndGg7XG5cbiAgdGhpcy5yZXNlZWQgPSBudWxsO1xuICB0aGlzLnJlc2VlZEludGVydmFsID0gbnVsbDtcbiAgdGhpcy5LID0gbnVsbDtcbiAgdGhpcy5WID0gbnVsbDtcblxuICB2YXIgZW50cm9weSA9IHV0aWxzLnRvQXJyYXkob3B0aW9ucy5lbnRyb3B5LCBvcHRpb25zLmVudHJvcHlFbmMpO1xuICB2YXIgbm9uY2UgPSB1dGlscy50b0FycmF5KG9wdGlvbnMubm9uY2UsIG9wdGlvbnMubm9uY2VFbmMpO1xuICB2YXIgcGVycyA9IHV0aWxzLnRvQXJyYXkob3B0aW9ucy5wZXJzLCBvcHRpb25zLnBlcnNFbmMpO1xuICBhc3NlcnQoZW50cm9weS5sZW5ndGggPj0gKHRoaXMubWluRW50cm9weSAvIDgpLFxuICAgICAgICAgJ05vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogJyArIHRoaXMubWluRW50cm9weSArICcgYml0cycpO1xuICB0aGlzLl9pbml0KGVudHJvcHksIG5vbmNlLCBwZXJzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hY0RSQkc7XG5cbkhtYWNEUkJHLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIGluaXQoZW50cm9weSwgbm9uY2UsIHBlcnMpIHtcbiAgdmFyIHNlZWQgPSBlbnRyb3B5LmNvbmNhdChub25jZSkuY29uY2F0KHBlcnMpO1xuXG4gIHRoaXMuSyA9IG5ldyBBcnJheSh0aGlzLm91dExlbiAvIDgpO1xuICB0aGlzLlYgPSBuZXcgQXJyYXkodGhpcy5vdXRMZW4gLyA4KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLlYubGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLktbaV0gPSAweDAwO1xuICAgIHRoaXMuVltpXSA9IDB4MDE7XG4gIH1cblxuICB0aGlzLl91cGRhdGUoc2VlZCk7XG4gIHRoaXMucmVzZWVkID0gMTtcbiAgdGhpcy5yZXNlZWRJbnRlcnZhbCA9IDB4MTAwMDAwMDAwMDAwMDsgIC8vIDJeNDhcbn07XG5cbkhtYWNEUkJHLnByb3RvdHlwZS5faG1hYyA9IGZ1bmN0aW9uIGhtYWMoKSB7XG4gIHJldHVybiBuZXcgaGFzaC5obWFjKHRoaXMuaGFzaCwgdGhpcy5LKTtcbn07XG5cbkhtYWNEUkJHLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKHNlZWQpIHtcbiAgdmFyIGttYWMgPSB0aGlzLl9obWFjKClcbiAgICAgICAgICAgICAgICAgLnVwZGF0ZSh0aGlzLlYpXG4gICAgICAgICAgICAgICAgIC51cGRhdGUoWyAweDAwIF0pO1xuICBpZiAoc2VlZClcbiAgICBrbWFjID0ga21hYy51cGRhdGUoc2VlZCk7XG4gIHRoaXMuSyA9IGttYWMuZGlnZXN0KCk7XG4gIHRoaXMuViA9IHRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKTtcbiAgaWYgKCFzZWVkKVxuICAgIHJldHVybjtcblxuICB0aGlzLksgPSB0aGlzLl9obWFjKClcbiAgICAgICAgICAgICAgIC51cGRhdGUodGhpcy5WKVxuICAgICAgICAgICAgICAgLnVwZGF0ZShbIDB4MDEgXSlcbiAgICAgICAgICAgICAgIC51cGRhdGUoc2VlZClcbiAgICAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgdGhpcy5WID0gdGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpO1xufTtcblxuSG1hY0RSQkcucHJvdG90eXBlLnJlc2VlZCA9IGZ1bmN0aW9uIHJlc2VlZChlbnRyb3B5LCBlbnRyb3B5RW5jLCBhZGQsIGFkZEVuYykge1xuICAvLyBPcHRpb25hbCBlbnRyb3B5IGVuY1xuICBpZiAodHlwZW9mIGVudHJvcHlFbmMgIT09ICdzdHJpbmcnKSB7XG4gICAgYWRkRW5jID0gYWRkO1xuICAgIGFkZCA9IGVudHJvcHlFbmM7XG4gICAgZW50cm9weUVuYyA9IG51bGw7XG4gIH1cblxuICBlbnRyb3B5ID0gdXRpbHMudG9CdWZmZXIoZW50cm9weSwgZW50cm9weUVuYyk7XG4gIGFkZCA9IHV0aWxzLnRvQnVmZmVyKGFkZCwgYWRkRW5jKTtcblxuICBhc3NlcnQoZW50cm9weS5sZW5ndGggPj0gKHRoaXMubWluRW50cm9weSAvIDgpLFxuICAgICAgICAgJ05vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogJyArIHRoaXMubWluRW50cm9weSArICcgYml0cycpO1xuXG4gIHRoaXMuX3VwZGF0ZShlbnRyb3B5LmNvbmNhdChhZGQgfHwgW10pKTtcbiAgdGhpcy5yZXNlZWQgPSAxO1xufTtcblxuSG1hY0RSQkcucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gZ2VuZXJhdGUobGVuLCBlbmMsIGFkZCwgYWRkRW5jKSB7XG4gIGlmICh0aGlzLnJlc2VlZCA+IHRoaXMucmVzZWVkSW50ZXJ2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZXNlZWQgaXMgcmVxdWlyZWQnKTtcblxuICAvLyBPcHRpb25hbCBlbmNvZGluZ1xuICBpZiAodHlwZW9mIGVuYyAhPT0gJ3N0cmluZycpIHtcbiAgICBhZGRFbmMgPSBhZGQ7XG4gICAgYWRkID0gZW5jO1xuICAgIGVuYyA9IG51bGw7XG4gIH1cblxuICAvLyBPcHRpb25hbCBhZGRpdGlvbmFsIGRhdGFcbiAgaWYgKGFkZCkge1xuICAgIGFkZCA9IHV0aWxzLnRvQXJyYXkoYWRkLCBhZGRFbmMpO1xuICAgIHRoaXMuX3VwZGF0ZShhZGQpO1xuICB9XG5cbiAgdmFyIHRlbXAgPSBbXTtcbiAgd2hpbGUgKHRlbXAubGVuZ3RoIDwgbGVuKSB7XG4gICAgdGhpcy5WID0gdGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpO1xuICAgIHRlbXAgPSB0ZW1wLmNvbmNhdCh0aGlzLlYpO1xuICB9XG5cbiAgdmFyIHJlcyA9IHRlbXAuc2xpY2UoMCwgbGVuKTtcbiAgdGhpcy5fdXBkYXRlKGFkZCk7XG4gIHRoaXMucmVzZWVkKys7XG4gIHJldHVybiB1dGlscy5lbmNvZGUocmVzLCBlbmMpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBkb3VibGVzOiB7XG4gICAgc3RlcDogNCxcbiAgICBwb2ludHM6IFtcbiAgICAgIFtcbiAgICAgICAgJ2U2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEnLFxuICAgICAgICAnZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgyMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4JyxcbiAgICAgICAgJzExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOScsXG4gICAgICAgICdkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDAnLFxuICAgICAgICAnNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMnLFxuICAgICAgICAnNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhJyxcbiAgICAgICAgJzk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYScsXG4gICAgICAgICc1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAnLFxuICAgICAgICAnY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkJyxcbiAgICAgICAgJzlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZCcsXG4gICAgICAgICdlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEnLFxuICAgICAgICAnOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwJyxcbiAgICAgICAgJzViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NycsXG4gICAgICAgICcxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjInLFxuICAgICAgICAnMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1MydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTcnLFxuICAgICAgICAnN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkJyxcbiAgICAgICAgJzU2ZTcwNzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MycsXG4gICAgICAgICc3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYScsXG4gICAgICAgICc1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgnLFxuICAgICAgICAnYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUxNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkJyxcbiAgICAgICAgJzQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNScsXG4gICAgICAgICc3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQnLFxuICAgICAgICAnNGI2ZGFkMGI1YWU0NjI1MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjJyxcbiAgICAgICAgJzE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNicsXG4gICAgICAgICc2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzknLFxuICAgICAgICAnYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxJyxcbiAgICAgICAgJzg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YicsXG4gICAgICAgICdmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2I4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMnLFxuICAgICAgICAnMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkJyxcbiAgICAgICAgJ2VlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCcsXG4gICAgICAgICc3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQnLFxuICAgICAgICAnZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGEnLFxuICAgICAgICAnNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExJyxcbiAgICAgICAgJzFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZScsXG4gICAgICAgICdlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMyZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEnLFxuICAgICAgICAnMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmJyxcbiAgICAgICAgJzY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4JyxcbiAgICAgICAgJ2RiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZCcsXG4gICAgICAgICc2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYnLFxuICAgICAgICAnMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCcsXG4gICAgICAgICdkZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4ZTZiZTdlNWUwM2Q0ZmM1OTlkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUnLFxuICAgICAgICAnOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2JyxcbiAgICAgICAgJzQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MScsXG4gICAgICAgICczNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhYycsXG4gICAgICAgICdjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEnLFxuICAgICAgICAnMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlJyxcbiAgICAgICAgJzQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAxZjBjMjk5MDcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MScsXG4gICAgICAgICdjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2VhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMnLFxuICAgICAgICAnYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmJyxcbiAgICAgICAgJzRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOScsXG4gICAgICAgICdhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUnLFxuICAgICAgICAnYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5JyxcbiAgICAgICAgJzZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMicsXG4gICAgICAgICc4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2E4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMnLFxuICAgICAgICAnN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjJyxcbiAgICAgICAgJ2NjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYScsXG4gICAgICAgICcyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2QyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEnLFxuICAgICAgICAnZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczJyxcbiAgICAgICAgJ2Q5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCcsXG4gICAgICAgICczOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmInLFxuICAgICAgICAnNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2JyxcbiAgICAgICAgJ2QzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhJyxcbiAgICAgICAgJzQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwJyxcbiAgICAgICAgJzYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NycsXG4gICAgICAgICc3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Y3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUnLFxuICAgICAgICAnZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MidcbiAgICAgIF1cbiAgICBdXG4gIH0sXG4gIG5hZjoge1xuICAgIHduZDogNyxcbiAgICBwb2ludHM6IFtcbiAgICAgIFtcbiAgICAgICAgJ2Y5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjknLFxuICAgICAgICAnMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0JyxcbiAgICAgICAgJ2Q4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliYycsXG4gICAgICAgICc2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2FjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmUnLFxuICAgICAgICAnY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiJyxcbiAgICAgICAgJ2Q5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOCcsXG4gICAgICAgICdhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZScsXG4gICAgICAgICc1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzQnLFxuICAgICAgICAnNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjJyxcbiAgICAgICAgJzg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNScsXG4gICAgICAgICczMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVjYWNjM2YnLFxuICAgICAgICAnMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTQnLFxuICAgICAgICAnNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5JyxcbiAgICAgICAgJ2E2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYicsXG4gICAgICAgICcyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjQnLFxuICAgICAgICAnZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1JyxcbiAgICAgICAgJ2I5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OScsXG4gICAgICAgICcyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZCcsXG4gICAgICAgICc4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmYnLFxuICAgICAgICAnMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiJyxcbiAgICAgICAgJ2QwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5JyxcbiAgICAgICAgJ2VlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzJyxcbiAgICAgICAgJzc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NCcsXG4gICAgICAgICc5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2YyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzAnLFxuICAgICAgICAnZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViJyxcbiAgICAgICAgJzVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0NycsXG4gICAgICAgICdjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2NhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDEnLFxuICAgICAgICAnY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwJyxcbiAgICAgICAgJzQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNScsXG4gICAgICAgICc5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOCcsXG4gICAgICAgICc2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOCcsXG4gICAgICAgICc1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE4NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWInLFxuICAgICAgICAnM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmJyxcbiAgICAgICAgJzU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0MycsXG4gICAgICAgICdlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmEnLFxuICAgICAgICAnZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1JyxcbiAgICAgICAgJ2Y5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YScsXG4gICAgICAgICc3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2UnLFxuICAgICAgICAnYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4JyxcbiAgICAgICAgJ2UxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyYycsXG4gICAgICAgICczMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTknLFxuICAgICAgICAnZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiJyxcbiAgICAgICAgJzEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYScsXG4gICAgICAgICdlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2QzY2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWYnLFxuICAgICAgICAnOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwJyxcbiAgICAgICAgJzY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNCcsXG4gICAgICAgICdmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWMnLFxuICAgICAgICAnZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwJyxcbiAgICAgICAgJ2VkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MCcsXG4gICAgICAgICdhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTliMycsXG4gICAgICAgICc2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGYnLFxuICAgICAgICAnOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2YyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjMnLFxuICAgICAgICAnNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4JyxcbiAgICAgICAgJ2ZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2InXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZicsXG4gICAgICAgICc1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjUnLFxuICAgICAgICAnOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2JyxcbiAgICAgICAgJzhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNScsXG4gICAgICAgICc1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2VhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTknLFxuICAgICAgICAnZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTEnLFxuICAgICAgICAnZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1JyxcbiAgICAgICAgJzQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNScsXG4gICAgICAgICcyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2M0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5OTcnLFxuICAgICAgICAnNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODEnLFxuICAgICAgICAnNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDUnLFxuICAgICAgICAnMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2JyxcbiAgICAgICAgJ2QyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2JyxcbiAgICAgICAgJ2VhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZScsXG4gICAgICAgICc2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzFlMzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTQnLFxuICAgICAgICAnNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzEnLFxuICAgICAgICAnM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxJyxcbiAgICAgICAgJ2I0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyJyxcbiAgICAgICAgJ2FlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1JyxcbiAgICAgICAgJ2NmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2MnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYicsXG4gICAgICAgICc2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2VhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDQnLFxuICAgICAgICAnMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmJyxcbiAgICAgICAgJzY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODknLFxuICAgICAgICAnMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2JyxcbiAgICAgICAgJ2IwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NCcsXG4gICAgICAgICc5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2EnLFxuICAgICAgICAnYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwJyxcbiAgICAgICAgJ2JkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5NycsXG4gICAgICAgICc2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2MxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5MycsXG4gICAgICAgICdjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2E2Y2JjMzA0NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWYnLFxuICAgICAgICAnMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzgnLFxuICAgICAgICAnNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhJyxcbiAgICAgICAgJzQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMScsXG4gICAgICAgICc1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDInLFxuICAgICAgICAnNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhJyxcbiAgICAgICAgJ2JlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnY2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNicsXG4gICAgICAgICc4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2I0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODYnLFxuICAgICAgICAnMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlJyxcbiAgICAgICAgJzYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJjNCcsXG4gICAgICAgICcyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGEnLFxuICAgICAgICAnZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5JyxcbiAgICAgICAgJ2NkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZicsXG4gICAgICAgICdmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGMnLFxuICAgICAgICAnNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyJyxcbiAgICAgICAgJ2ZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YScsXG4gICAgICAgICcxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2IyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODAnLFxuICAgICAgICAnNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkJyxcbiAgICAgICAgJzQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMScsXG4gICAgICAgICdjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjMnLFxuICAgICAgICAnYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTInLFxuICAgICAgICAnNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkzJyxcbiAgICAgICAgJ2NhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMCcsXG4gICAgICAgICc5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OCcsXG4gICAgICAgICdlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2UyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0N2E0ZjcnLFxuICAgICAgICAnZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4JyxcbiAgICAgICAgJ2M0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZScsXG4gICAgICAgICc2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2QnLFxuICAgICAgICAnY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmInLFxuICAgICAgICAnMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmJyxcbiAgICAgICAgJ2Y5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNicsXG4gICAgICAgICc0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2JlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTcnLFxuICAgICAgICAnNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhJyxcbiAgICAgICAgJzdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyYycsXG4gICAgICAgICdhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTInLFxuICAgICAgICAnNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiJyxcbiAgICAgICAgJ2JkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NScsXG4gICAgICAgICdiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTcnLFxuICAgICAgICAnNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5JyxcbiAgICAgICAgJ2NjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhMycsXG4gICAgICAgICc1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTcnLFxuICAgICAgICAnNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjYnLFxuICAgICAgICAnZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4JyxcbiAgICAgICAgJzk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMScsXG4gICAgICAgICc5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODAnLFxuICAgICAgICAnNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSdcbiAgICAgIF1cbiAgICBdXG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IGV4cG9ydHM7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xuXG51dGlscy5hc3NlcnQgPSBmdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufTtcblxuZnVuY3Rpb24gdG9BcnJheShtc2csIGVuYykge1xuICBpZiAoQXJyYXkuaXNBcnJheShtc2cpKVxuICAgIHJldHVybiBtc2cuc2xpY2UoKTtcbiAgaWYgKCFtc2cpXG4gICAgcmV0dXJuIFtdO1xuICB2YXIgcmVzID0gW107XG4gIGlmICh0eXBlb2YgbXNnICE9PSAnc3RyaW5nJykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIGlmICghZW5jKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICB2YXIgaGkgPSBjID4+IDg7XG4gICAgICB2YXIgbG8gPSBjICYgMHhmZjtcbiAgICAgIGlmIChoaSlcbiAgICAgICAgcmVzLnB1c2goaGksIGxvKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmVzLnB1c2gobG8pO1xuICAgIH1cbiAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgbXNnID0gbXNnLnJlcGxhY2UoL1teYS16MC05XSsvaWcsICcnKTtcbiAgICBpZiAobXNnLmxlbmd0aCAlIDIgIT09IDApXG4gICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpICs9IDIpXG4gICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICB9XG4gIHJldHVybiByZXM7XG59XG51dGlscy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gemVybzIod29yZCkge1xuICBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuICcwJyArIHdvcmQ7XG4gIGVsc2VcbiAgICByZXR1cm4gd29yZDtcbn1cbnV0aWxzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHRvSGV4KG1zZykge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgIHJlcyArPSB6ZXJvMihtc2dbaV0udG9TdHJpbmcoMTYpKTtcbiAgcmV0dXJuIHJlcztcbn1cbnV0aWxzLnRvSGV4ID0gdG9IZXg7XG5cbnV0aWxzLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShhcnIsIGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdG9IZXgoYXJyKTtcbiAgZWxzZVxuICAgIHJldHVybiBhcnI7XG59O1xuXG4vLyBSZXByZXNlbnQgbnVtIGluIGEgdy1OQUYgZm9ybVxuZnVuY3Rpb24gZ2V0TkFGKG51bSwgdykge1xuICB2YXIgbmFmID0gW107XG4gIHZhciB3cyA9IDEgPDwgKHcgKyAxKTtcbiAgdmFyIGsgPSBudW0uY2xvbmUoKTtcbiAgd2hpbGUgKGsuY21wbigxKSA+PSAwKSB7XG4gICAgdmFyIHo7XG4gICAgaWYgKGsuaXNPZGQoKSkge1xuICAgICAgdmFyIG1vZCA9IGsuYW5kbG4od3MgLSAxKTtcbiAgICAgIGlmIChtb2QgPiAod3MgPj4gMSkgLSAxKVxuICAgICAgICB6ID0gKHdzID4+IDEpIC0gbW9kO1xuICAgICAgZWxzZVxuICAgICAgICB6ID0gbW9kO1xuICAgICAgay5pc3Vibih6KTtcbiAgICB9IGVsc2Uge1xuICAgICAgeiA9IDA7XG4gICAgfVxuICAgIG5hZi5wdXNoKHopO1xuXG4gICAgLy8gT3B0aW1pemF0aW9uLCBzaGlmdCBieSB3b3JkIGlmIHBvc3NpYmxlXG4gICAgdmFyIHNoaWZ0ID0gKGsuY21wbigwKSAhPT0gMCAmJiBrLmFuZGxuKHdzIC0gMSkgPT09IDApID8gKHcgKyAxKSA6IDE7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBzaGlmdDsgaSsrKVxuICAgICAgbmFmLnB1c2goMCk7XG4gICAgay5pdXNocm4oc2hpZnQpO1xuICB9XG5cbiAgcmV0dXJuIG5hZjtcbn1cbnV0aWxzLmdldE5BRiA9IGdldE5BRjtcblxuLy8gUmVwcmVzZW50IGsxLCBrMiBpbiBhIEpvaW50IFNwYXJzZSBGb3JtXG5mdW5jdGlvbiBnZXRKU0YoazEsIGsyKSB7XG4gIHZhciBqc2YgPSBbXG4gICAgW10sXG4gICAgW11cbiAgXTtcblxuICBrMSA9IGsxLmNsb25lKCk7XG4gIGsyID0gazIuY2xvbmUoKTtcbiAgdmFyIGQxID0gMDtcbiAgdmFyIGQyID0gMDtcbiAgd2hpbGUgKGsxLmNtcG4oLWQxKSA+IDAgfHwgazIuY21wbigtZDIpID4gMCkge1xuXG4gICAgLy8gRmlyc3QgcGhhc2VcbiAgICB2YXIgbTE0ID0gKGsxLmFuZGxuKDMpICsgZDEpICYgMztcbiAgICB2YXIgbTI0ID0gKGsyLmFuZGxuKDMpICsgZDIpICYgMztcbiAgICBpZiAobTE0ID09PSAzKVxuICAgICAgbTE0ID0gLTE7XG4gICAgaWYgKG0yNCA9PT0gMylcbiAgICAgIG0yNCA9IC0xO1xuICAgIHZhciB1MTtcbiAgICBpZiAoKG0xNCAmIDEpID09PSAwKSB7XG4gICAgICB1MSA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtOCA9IChrMS5hbmRsbig3KSArIGQxKSAmIDc7XG4gICAgICBpZiAoKG04ID09PSAzIHx8IG04ID09PSA1KSAmJiBtMjQgPT09IDIpXG4gICAgICAgIHUxID0gLW0xNDtcbiAgICAgIGVsc2VcbiAgICAgICAgdTEgPSBtMTQ7XG4gICAgfVxuICAgIGpzZlswXS5wdXNoKHUxKTtcblxuICAgIHZhciB1MjtcbiAgICBpZiAoKG0yNCAmIDEpID09PSAwKSB7XG4gICAgICB1MiA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtOCA9IChrMi5hbmRsbig3KSArIGQyKSAmIDc7XG4gICAgICBpZiAoKG04ID09PSAzIHx8IG04ID09PSA1KSAmJiBtMTQgPT09IDIpXG4gICAgICAgIHUyID0gLW0yNDtcbiAgICAgIGVsc2VcbiAgICAgICAgdTIgPSBtMjQ7XG4gICAgfVxuICAgIGpzZlsxXS5wdXNoKHUyKTtcblxuICAgIC8vIFNlY29uZCBwaGFzZVxuICAgIGlmICgyICogZDEgPT09IHUxICsgMSlcbiAgICAgIGQxID0gMSAtIGQxO1xuICAgIGlmICgyICogZDIgPT09IHUyICsgMSlcbiAgICAgIGQyID0gMSAtIGQyO1xuICAgIGsxLml1c2hybigxKTtcbiAgICBrMi5pdXNocm4oMSk7XG4gIH1cblxuICByZXR1cm4ganNmO1xufVxudXRpbHMuZ2V0SlNGID0gZ2V0SlNGO1xuXG5mdW5jdGlvbiBjYWNoZWRQcm9wZXJ0eShvYmosIGNvbXB1dGVyKSB7XG4gIHZhciBuYW1lID0gY29tcHV0ZXIubmFtZTtcbiAgdmFyIGtleSA9ICdfJyArIG5hbWU7XG4gIG9iai5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbiBjYWNoZWRQcm9wZXJ0eSgpIHtcbiAgICByZXR1cm4gdGhpc1trZXldICE9PSB1bmRlZmluZWQgPyB0aGlzW2tleV0gOlxuICAgICAgICAgICB0aGlzW2tleV0gPSBjb21wdXRlci5jYWxsKHRoaXMpO1xuICB9O1xufVxudXRpbHMuY2FjaGVkUHJvcGVydHkgPSBjYWNoZWRQcm9wZXJ0eTtcblxuZnVuY3Rpb24gcGFyc2VCeXRlcyhieXRlcykge1xuICByZXR1cm4gdHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJyA/IHV0aWxzLnRvQXJyYXkoYnl0ZXMsICdoZXgnKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXM7XG59XG51dGlscy5wYXJzZUJ5dGVzID0gcGFyc2VCeXRlcztcblxuZnVuY3Rpb24gaW50RnJvbUxFKGJ5dGVzKSB7XG4gIHJldHVybiBuZXcgQk4oYnl0ZXMsICdoZXgnLCAnbGUnKTtcbn1cbnV0aWxzLmludEZyb21MRSA9IGludEZyb21MRTtcblxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIl9hcmdzXCI6IFtcbiAgICBbXG4gICAgICBcImVsbGlwdGljQF42LjAuMFwiLFxuICAgICAgXCIvaG9tZS9uZXJ2b3VzLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ25cIlxuICAgIF1cbiAgXSxcbiAgXCJfZnJvbVwiOiBcImVsbGlwdGljQD49Ni4wLjAgPDcuMC4wXCIsXG4gIFwiX2lkXCI6IFwiZWxsaXB0aWNANi4yLjNcIixcbiAgXCJfaW5DYWNoZVwiOiB0cnVlLFxuICBcIl9pbnN0YWxsYWJsZVwiOiB0cnVlLFxuICBcIl9sb2NhdGlvblwiOiBcIi9icm93c2VyaWZ5L2VsbGlwdGljXCIsXG4gIFwiX25vZGVWZXJzaW9uXCI6IFwiNS40LjFcIixcbiAgXCJfbnBtVXNlclwiOiB7XG4gICAgXCJlbWFpbFwiOiBcImZlZG9yQGluZHV0bnkuY29tXCIsXG4gICAgXCJuYW1lXCI6IFwiaW5kdXRueVwiXG4gIH0sXG4gIFwiX25wbVZlcnNpb25cIjogXCIzLjMuMTJcIixcbiAgXCJfcGhhbnRvbUNoaWxkcmVuXCI6IHt9LFxuICBcIl9yZXF1ZXN0ZWRcIjoge1xuICAgIFwibmFtZVwiOiBcImVsbGlwdGljXCIsXG4gICAgXCJyYXdcIjogXCJlbGxpcHRpY0BeNi4wLjBcIixcbiAgICBcInJhd1NwZWNcIjogXCJeNi4wLjBcIixcbiAgICBcInNjb3BlXCI6IG51bGwsXG4gICAgXCJzcGVjXCI6IFwiPj02LjAuMCA8Ny4wLjBcIixcbiAgICBcInR5cGVcIjogXCJyYW5nZVwiXG4gIH0sXG4gIFwiX3JlcXVpcmVkQnlcIjogW1xuICAgIFwiL2Jyb3dzZXJpZnkvYnJvd3NlcmlmeS1zaWduXCIsXG4gICAgXCIvYnJvd3NlcmlmeS9jcmVhdGUtZWNkaFwiXG4gIF0sXG4gIFwiX3Jlc29sdmVkXCI6IFwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxsaXB0aWMvLS9lbGxpcHRpYy02LjIuMy50Z3pcIixcbiAgXCJfc2hhc3VtXCI6IFwiMThlNDZkNzMwNmIwOTUxMjc1YTJkNDIwNjMyNzBhMTRiNzRlYmU5OVwiLFxuICBcIl9zaHJpbmt3cmFwXCI6IG51bGwsXG4gIFwiX3NwZWNcIjogXCJlbGxpcHRpY0BeNi4wLjBcIixcbiAgXCJfd2hlcmVcIjogXCIvaG9tZS9uZXJ2b3VzLy5udm0tZmlzaC92NS40LjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ25cIixcbiAgXCJhdXRob3JcIjoge1xuICAgIFwiZW1haWxcIjogXCJmZWRvckBpbmR1dG55LmNvbVwiLFxuICAgIFwibmFtZVwiOiBcIkZlZG9yIEluZHV0bnlcIlxuICB9LFxuICBcImJ1Z3NcIjoge1xuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMvaXNzdWVzXCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYm4uanNcIjogXCJeNC4wLjBcIixcbiAgICBcImJyb3JhbmRcIjogXCJeMS4wLjFcIixcbiAgICBcImhhc2guanNcIjogXCJeMS4wLjBcIixcbiAgICBcImluaGVyaXRzXCI6IFwiXjIuMC4xXCJcbiAgfSxcbiAgXCJkZXNjcmlwdGlvblwiOiBcIkVDIGNyeXB0b2dyYXBoeVwiLFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJjb3ZlcmFsbHNcIjogXCJeMi4xMS4zXCIsXG4gICAgXCJpc3RhbmJ1bFwiOiBcIl4wLjQuMlwiLFxuICAgIFwianNjc1wiOiBcIl4yLjkuMFwiLFxuICAgIFwianNoaW50XCI6IFwiXjIuNi4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjEuMFwiXG4gIH0sXG4gIFwiZGlyZWN0b3JpZXNcIjoge30sXG4gIFwiZGlzdFwiOiB7XG4gICAgXCJzaGFzdW1cIjogXCIxOGU0NmQ3MzA2YjA5NTEyNzVhMmQ0MjA2MzI3MGExNGI3NGViZTk5XCIsXG4gICAgXCJ0YXJiYWxsXCI6IFwiaHR0cDovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbGxpcHRpYy8tL2VsbGlwdGljLTYuMi4zLnRnelwiXG4gIH0sXG4gIFwiZmlsZXNcIjogW1xuICAgIFwibGliXCJcbiAgXSxcbiAgXCJnaXRIZWFkXCI6IFwiYzMyZjIwYjIyYjQyMGViNmFmM2M2ZGRhMjg5NjNkZWI3ZmFjZjgyM1wiLFxuICBcImhvbWVwYWdlXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWNcIixcbiAgXCJrZXl3b3Jkc1wiOiBbXG4gICAgXCJDcnlwdG9ncmFwaHlcIixcbiAgICBcIkVDXCIsXG4gICAgXCJFbGxpcHRpY1wiLFxuICAgIFwiY3VydmVcIlxuICBdLFxuICBcImxpY2Vuc2VcIjogXCJNSVRcIixcbiAgXCJtYWluXCI6IFwibGliL2VsbGlwdGljLmpzXCIsXG4gIFwibWFpbnRhaW5lcnNcIjogW1xuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcImluZHV0bnlcIixcbiAgICAgIFwiZW1haWxcIjogXCJmZWRvckBpbmR1dG55LmNvbVwiXG4gICAgfVxuICBdLFxuICBcIm5hbWVcIjogXCJlbGxpcHRpY1wiLFxuICBcIm9wdGlvbmFsRGVwZW5kZW5jaWVzXCI6IHt9LFxuICBcInJlYWRtZVwiOiBcIkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCFcIixcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImdpdCtzc2g6Ly9naXRAZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJjb3ZlcmFnZVwiOiBcIm5wbSBydW4gdW5pdCAtLWNvdmVyYWdlXCIsXG4gICAgXCJjb3ZlcmFsbHNcIjogXCJucG0gcnVuIGNvdmVyYWdlICYmIGNhdCAuL2NvdmVyYWdlL2xjb3YuaW5mbyB8IGNvdmVyYWxsc1wiLFxuICAgIFwianNjc1wiOiBcImpzY3MgYmVuY2htYXJrcy8qLmpzIGxpYi8qLmpzIGxpYi8qKi8qLmpzIGxpYi8qKi8qKi8qLmpzIHRlc3QvKi5qc1wiLFxuICAgIFwianNoaW50XCI6IFwianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC8qLmpzXCIsXG4gICAgXCJsaW50XCI6IFwibnBtIHJ1biBqc2NzICYmIG5wbSBydW4ganNoaW50XCIsXG4gICAgXCJ0ZXN0XCI6IFwibnBtIHJ1biBsaW50ICYmIG5wbSBydW4gdW5pdFwiLFxuICAgIFwidW5pdFwiOiBcImlzdGFuYnVsIHRlc3QgX21vY2hhIC0tcmVwb3J0ZXI9c3BlYyB0ZXN0LyotdGVzdC5qc1wiXG4gIH0sXG4gIFwidmVyc2lvblwiOiBcIjYuMi4zXCJcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cyB8fCB7fTtcbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxuRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24obikge1xuICBpZiAoIWlzTnVtYmVyKG4pIHx8IG4gPCAwIHx8IGlzTmFOKG4pKVxuICAgIHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgZXIsIGhhbmRsZXIsIGxlbiwgYXJncywgaSwgbGlzdGVuZXJzO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50cy5lcnJvciB8fFxuICAgICAgICAoaXNPYmplY3QodGhpcy5fZXZlbnRzLmVycm9yKSAmJiAhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpIHtcbiAgICAgIGVyID0gYXJndW1lbnRzWzFdO1xuICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgICB9XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCBcImVycm9yXCIgZXZlbnQuJyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlciA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNVbmRlZmluZWQoaGFuZGxlcikpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAvLyBmYXN0IGNhc2VzXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBzbG93ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICBoYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdChoYW5kbGVyKSkge1xuICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIGxpc3RlbmVycyA9IGhhbmRsZXIuc2xpY2UoKTtcbiAgICBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICAgIGxpc3RlbmVyc1tpXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBtO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gIGlmICh0aGlzLl9ldmVudHMubmV3TGlzdGVuZXIpXG4gICAgdGhpcy5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgIGlzRnVuY3Rpb24obGlzdGVuZXIubGlzdGVuZXIpID9cbiAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gIGVsc2UgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZVxuICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFt0aGlzLl9ldmVudHNbdHlwZV0sIGxpc3RlbmVyXTtcblxuICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSAmJiAhdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCkge1xuICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5fbWF4TGlzdGVuZXJzKSkge1xuICAgICAgbSA9IHRoaXMuX21heExpc3RlbmVycztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICAgIH1cblxuICAgIGlmIChtICYmIG0gPiAwICYmIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGggPiBtKSB7XG4gICAgICB0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJyhub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5ICcgK1xuICAgICAgICAgICAgICAgICAgICAnbGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1VzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGgpO1xuICAgICAgaWYgKHR5cGVvZiBjb25zb2xlLnRyYWNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQgaW4gSUUgMTBcbiAgICAgICAgY29uc29sZS50cmFjZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICB2YXIgZmlyZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBnKCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgZyk7XG5cbiAgICBpZiAoIWZpcmVkKSB7XG4gICAgICBmaXJlZCA9IHRydWU7XG4gICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIGcubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgdGhpcy5vbih0eXBlLCBnKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZmYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIGxpc3QsIHBvc2l0aW9uLCBsZW5ndGgsIGk7XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgbGlzdCA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gIHBvc2l0aW9uID0gLTE7XG5cbiAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8XG4gICAgICAoaXNGdW5jdGlvbihsaXN0Lmxpc3RlbmVyKSAmJiBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QobGlzdCkpIHtcbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSA+IDA7KSB7XG4gICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHxcbiAgICAgICAgICAobGlzdFtpXS5saXN0ZW5lciAmJiBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGxpc3QubGVuZ3RoID0gMDtcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpc3Quc3BsaWNlKHBvc2l0aW9uLCAxKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBrZXksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gIGlmICghdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICBlbHNlIGlmICh0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgZm9yIChrZXkgaW4gdGhpcy5fZXZlbnRzKSB7XG4gICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVycykpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gIH0gZWxzZSBpZiAobGlzdGVuZXJzKSB7XG4gICAgLy8gTElGTyBvcmRlclxuICAgIHdoaWxlIChsaXN0ZW5lcnMubGVuZ3RoKVxuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbbGlzdGVuZXJzLmxlbmd0aCAtIDFdKTtcbiAgfVxuICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciByZXQ7XG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0ID0gW107XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24odGhpcy5fZXZlbnRzW3R5cGVdKSlcbiAgICByZXQgPSBbdGhpcy5fZXZlbnRzW3R5cGVdXTtcbiAgZWxzZVxuICAgIHJldCA9IHRoaXMuX2V2ZW50c1t0eXBlXS5zbGljZSgpO1xuICByZXR1cm4gcmV0O1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24odHlwZSkge1xuICBpZiAodGhpcy5fZXZlbnRzKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgICBpZiAoaXNGdW5jdGlvbihldmxpc3RlbmVyKSlcbiAgICAgIHJldHVybiAxO1xuICAgIGVsc2UgaWYgKGV2bGlzdGVuZXIpXG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIDA7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbiIsInZhciBtZDUgPSByZXF1aXJlKCdjcmVhdGUtaGFzaC9tZDUnKVxubW9kdWxlLmV4cG9ydHMgPSBFVlBfQnl0ZXNUb0tleVxuZnVuY3Rpb24gRVZQX0J5dGVzVG9LZXkgKHBhc3N3b3JkLCBzYWx0LCBrZXlMZW4sIGl2TGVuKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHBhc3N3b3JkKSkge1xuICAgIHBhc3N3b3JkID0gbmV3IEJ1ZmZlcihwYXNzd29yZCwgJ2JpbmFyeScpXG4gIH1cbiAgaWYgKHNhbHQgJiYgIUJ1ZmZlci5pc0J1ZmZlcihzYWx0KSkge1xuICAgIHNhbHQgPSBuZXcgQnVmZmVyKHNhbHQsICdiaW5hcnknKVxuICB9XG4gIGtleUxlbiA9IGtleUxlbiAvIDhcbiAgaXZMZW4gPSBpdkxlbiB8fCAwXG4gIHZhciBraSA9IDBcbiAgdmFyIGlpID0gMFxuICB2YXIga2V5ID0gbmV3IEJ1ZmZlcihrZXlMZW4pXG4gIHZhciBpdiA9IG5ldyBCdWZmZXIoaXZMZW4pXG4gIHZhciBhZGRtZCA9IDBcbiAgdmFyIG1kX2J1ZlxuICB2YXIgaVxuICB2YXIgYnVmcyA9IFtdXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGFkZG1kKysgPiAwKSB7XG4gICAgICBidWZzLnB1c2gobWRfYnVmKVxuICAgIH1cbiAgICBidWZzLnB1c2gocGFzc3dvcmQpXG4gICAgaWYgKHNhbHQpIHtcbiAgICAgIGJ1ZnMucHVzaChzYWx0KVxuICAgIH1cbiAgICBtZF9idWYgPSBtZDUoQnVmZmVyLmNvbmNhdChidWZzKSlcbiAgICBidWZzID0gW11cbiAgICBpID0gMFxuICAgIGlmIChrZXlMZW4gPiAwKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAoa2V5TGVuID09PSAwKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gbWRfYnVmLmxlbmd0aCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAga2V5W2tpKytdID0gbWRfYnVmW2ldXG4gICAgICAgIGtleUxlbi0tXG4gICAgICAgIGkrK1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXZMZW4gPiAwICYmIGkgIT09IG1kX2J1Zi5sZW5ndGgpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmIChpdkxlbiA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPT09IG1kX2J1Zi5sZW5ndGgpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGl2W2lpKytdID0gbWRfYnVmW2ldXG4gICAgICAgIGl2TGVuLS1cbiAgICAgICAgaSsrXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChrZXlMZW4gPT09IDAgJiYgaXZMZW4gPT09IDApIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIGZvciAoaSA9IDA7IGkgPCBtZF9idWYubGVuZ3RoOyBpKyspIHtcbiAgICBtZF9idWZbaV0gPSAwXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBrZXk6IGtleSxcbiAgICBpdjogaXZcbiAgfVxufVxuIiwidmFyIGhhc2ggPSBleHBvcnRzO1xuXG5oYXNoLnV0aWxzID0gcmVxdWlyZSgnLi9oYXNoL3V0aWxzJyk7XG5oYXNoLmNvbW1vbiA9IHJlcXVpcmUoJy4vaGFzaC9jb21tb24nKTtcbmhhc2guc2hhID0gcmVxdWlyZSgnLi9oYXNoL3NoYScpO1xuaGFzaC5yaXBlbWQgPSByZXF1aXJlKCcuL2hhc2gvcmlwZW1kJyk7XG5oYXNoLmhtYWMgPSByZXF1aXJlKCcuL2hhc2gvaG1hYycpO1xuXG4vLyBQcm94eSBoYXNoIGZ1bmN0aW9ucyB0byB0aGUgbWFpbiBvYmplY3Rcbmhhc2guc2hhMSA9IGhhc2guc2hhLnNoYTE7XG5oYXNoLnNoYTI1NiA9IGhhc2guc2hhLnNoYTI1Njtcbmhhc2guc2hhMjI0ID0gaGFzaC5zaGEuc2hhMjI0O1xuaGFzaC5zaGEzODQgPSBoYXNoLnNoYS5zaGEzODQ7XG5oYXNoLnNoYTUxMiA9IGhhc2guc2hhLnNoYTUxMjtcbmhhc2gucmlwZW1kMTYwID0gaGFzaC5yaXBlbWQucmlwZW1kMTYwO1xuIiwidmFyIGhhc2ggPSByZXF1aXJlKCcuLi9oYXNoJyk7XG52YXIgdXRpbHMgPSBoYXNoLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gQmxvY2tIYXNoKCkge1xuICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdUb3RhbCA9IDA7XG4gIHRoaXMuYmxvY2tTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemU7XG4gIHRoaXMub3V0U2l6ZSA9IHRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZTtcbiAgdGhpcy5obWFjU3RyZW5ndGggPSB0aGlzLmNvbnN0cnVjdG9yLmhtYWNTdHJlbmd0aDtcbiAgdGhpcy5wYWRMZW5ndGggPSB0aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aCAvIDg7XG4gIHRoaXMuZW5kaWFuID0gJ2JpZyc7XG5cbiAgdGhpcy5fZGVsdGE4ID0gdGhpcy5ibG9ja1NpemUgLyA4O1xuICB0aGlzLl9kZWx0YTMyID0gdGhpcy5ibG9ja1NpemUgLyAzMjtcbn1cbmV4cG9ydHMuQmxvY2tIYXNoID0gQmxvY2tIYXNoO1xuXG5CbG9ja0hhc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShtc2csIGVuYykge1xuICAvLyBDb252ZXJ0IG1lc3NhZ2UgdG8gYXJyYXksIHBhZCBpdCwgYW5kIGpvaW4gaW50byAzMmJpdCBibG9ja3NcbiAgbXNnID0gdXRpbHMudG9BcnJheShtc2csIGVuYyk7XG4gIGlmICghdGhpcy5wZW5kaW5nKVxuICAgIHRoaXMucGVuZGluZyA9IG1zZztcbiAgZWxzZVxuICAgIHRoaXMucGVuZGluZyA9IHRoaXMucGVuZGluZy5jb25jYXQobXNnKTtcbiAgdGhpcy5wZW5kaW5nVG90YWwgKz0gbXNnLmxlbmd0aDtcblxuICAvLyBFbm91Z2ggZGF0YSwgdHJ5IHVwZGF0aW5nXG4gIGlmICh0aGlzLnBlbmRpbmcubGVuZ3RoID49IHRoaXMuX2RlbHRhOCkge1xuICAgIG1zZyA9IHRoaXMucGVuZGluZztcblxuICAgIC8vIFByb2Nlc3MgcGVuZGluZyBkYXRhIGluIGJsb2Nrc1xuICAgIHZhciByID0gbXNnLmxlbmd0aCAlIHRoaXMuX2RlbHRhODtcbiAgICB0aGlzLnBlbmRpbmcgPSBtc2cuc2xpY2UobXNnLmxlbmd0aCAtIHIsIG1zZy5sZW5ndGgpO1xuICAgIGlmICh0aGlzLnBlbmRpbmcubGVuZ3RoID09PSAwKVxuICAgICAgdGhpcy5wZW5kaW5nID0gbnVsbDtcblxuICAgIG1zZyA9IHV0aWxzLmpvaW4zMihtc2csIDAsIG1zZy5sZW5ndGggLSByLCB0aGlzLmVuZGlhbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpICs9IHRoaXMuX2RlbHRhMzIpXG4gICAgICB0aGlzLl91cGRhdGUobXNnLCBpLCBpICsgdGhpcy5fZGVsdGEzMik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICB0aGlzLnVwZGF0ZSh0aGlzLl9wYWQoKSk7XG4gIGFzc2VydCh0aGlzLnBlbmRpbmcgPT09IG51bGwpO1xuXG4gIHJldHVybiB0aGlzLl9kaWdlc3QoZW5jKTtcbn07XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUuX3BhZCA9IGZ1bmN0aW9uIHBhZCgpIHtcbiAgdmFyIGxlbiA9IHRoaXMucGVuZGluZ1RvdGFsO1xuICB2YXIgYnl0ZXMgPSB0aGlzLl9kZWx0YTg7XG4gIHZhciBrID0gYnl0ZXMgLSAoKGxlbiArIHRoaXMucGFkTGVuZ3RoKSAlIGJ5dGVzKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShrICsgdGhpcy5wYWRMZW5ndGgpO1xuICByZXNbMF0gPSAweDgwO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGs7IGkrKylcbiAgICByZXNbaV0gPSAwO1xuXG4gIC8vIEFwcGVuZCBsZW5ndGhcbiAgbGVuIDw8PSAzO1xuICBpZiAodGhpcy5lbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgZm9yICh2YXIgdCA9IDg7IHQgPCB0aGlzLnBhZExlbmd0aDsgdCsrKVxuICAgICAgcmVzW2krK10gPSAwO1xuXG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMjQpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDE2KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiA4KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICB9IGVsc2Uge1xuICAgIHJlc1tpKytdID0gbGVuICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDE2KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcblxuICAgIGZvciAodmFyIHQgPSA4OyB0IDwgdGhpcy5wYWRMZW5ndGg7IHQrKylcbiAgICAgIHJlc1tpKytdID0gMDtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuIiwidmFyIGhtYWMgPSBleHBvcnRzO1xuXG52YXIgaGFzaCA9IHJlcXVpcmUoJy4uL2hhc2gnKTtcbnZhciB1dGlscyA9IGhhc2gudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBIbWFjKGhhc2gsIGtleSwgZW5jKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBIbWFjKSlcbiAgICByZXR1cm4gbmV3IEhtYWMoaGFzaCwga2V5LCBlbmMpO1xuICB0aGlzLkhhc2ggPSBoYXNoO1xuICB0aGlzLmJsb2NrU2l6ZSA9IGhhc2guYmxvY2tTaXplIC8gODtcbiAgdGhpcy5vdXRTaXplID0gaGFzaC5vdXRTaXplIC8gODtcbiAgdGhpcy5pbm5lciA9IG51bGw7XG4gIHRoaXMub3V0ZXIgPSBudWxsO1xuXG4gIHRoaXMuX2luaXQodXRpbHMudG9BcnJheShrZXksIGVuYykpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBIbWFjO1xuXG5IbWFjLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIGluaXQoa2V5KSB7XG4gIC8vIFNob3J0ZW4ga2V5LCBpZiBuZWVkZWRcbiAgaWYgKGtleS5sZW5ndGggPiB0aGlzLmJsb2NrU2l6ZSlcbiAgICBrZXkgPSBuZXcgdGhpcy5IYXNoKCkudXBkYXRlKGtleSkuZGlnZXN0KCk7XG4gIGFzc2VydChrZXkubGVuZ3RoIDw9IHRoaXMuYmxvY2tTaXplKTtcblxuICAvLyBBZGQgcGFkZGluZyB0byBrZXlcbiAgZm9yICh2YXIgaSA9IGtleS5sZW5ndGg7IGkgPCB0aGlzLmJsb2NrU2l6ZTsgaSsrKVxuICAgIGtleS5wdXNoKDApO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcbiAgICBrZXlbaV0gXj0gMHg2YTtcbiAgdGhpcy5vdXRlciA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KTtcbn07XG5cbkhtYWMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShtc2csIGVuYykge1xuICB0aGlzLmlubmVyLnVwZGF0ZShtc2csIGVuYyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuSG1hYy5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKTtcbiAgcmV0dXJuIHRoaXMub3V0ZXIuZGlnZXN0KGVuYyk7XG59O1xuIiwidmFyIGhhc2ggPSByZXF1aXJlKCcuLi9oYXNoJyk7XG52YXIgdXRpbHMgPSBoYXNoLnV0aWxzO1xuXG52YXIgcm90bDMyID0gdXRpbHMucm90bDMyO1xudmFyIHN1bTMyID0gdXRpbHMuc3VtMzI7XG52YXIgc3VtMzJfMyA9IHV0aWxzLnN1bTMyXzM7XG52YXIgc3VtMzJfNCA9IHV0aWxzLnN1bTMyXzQ7XG52YXIgQmxvY2tIYXNoID0gaGFzaC5jb21tb24uQmxvY2tIYXNoO1xuXG5mdW5jdGlvbiBSSVBFTUQxNjAoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSSVBFTUQxNjApKVxuICAgIHJldHVybiBuZXcgUklQRU1EMTYwKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG5cbiAgdGhpcy5oID0gWyAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2LCAweGMzZDJlMWYwIF07XG4gIHRoaXMuZW5kaWFuID0gJ2xpdHRsZSc7XG59XG51dGlscy5pbmhlcml0cyhSSVBFTUQxNjAsIEJsb2NrSGFzaCk7XG5leHBvcnRzLnJpcGVtZDE2MCA9IFJJUEVNRDE2MDtcblxuUklQRU1EMTYwLmJsb2NrU2l6ZSA9IDUxMjtcblJJUEVNRDE2MC5vdXRTaXplID0gMTYwO1xuUklQRU1EMTYwLmhtYWNTdHJlbmd0aCA9IDE5MjtcblJJUEVNRDE2MC5wYWRMZW5ndGggPSA2NDtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgc3RhcnQpIHtcbiAgdmFyIEEgPSB0aGlzLmhbMF07XG4gIHZhciBCID0gdGhpcy5oWzFdO1xuICB2YXIgQyA9IHRoaXMuaFsyXTtcbiAgdmFyIEQgPSB0aGlzLmhbM107XG4gIHZhciBFID0gdGhpcy5oWzRdO1xuICB2YXIgQWggPSBBO1xuICB2YXIgQmggPSBCO1xuICB2YXIgQ2ggPSBDO1xuICB2YXIgRGggPSBEO1xuICB2YXIgRWggPSBFO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IDgwOyBqKyspIHtcbiAgICB2YXIgVCA9IHN1bTMyKFxuICAgICAgcm90bDMyKFxuICAgICAgICBzdW0zMl80KEEsIGYoaiwgQiwgQywgRCksIG1zZ1tyW2pdICsgc3RhcnRdLCBLKGopKSxcbiAgICAgICAgc1tqXSksXG4gICAgICBFKTtcbiAgICBBID0gRTtcbiAgICBFID0gRDtcbiAgICBEID0gcm90bDMyKEMsIDEwKTtcbiAgICBDID0gQjtcbiAgICBCID0gVDtcbiAgICBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQWgsIGYoNzkgLSBqLCBCaCwgQ2gsIERoKSwgbXNnW3JoW2pdICsgc3RhcnRdLCBLaChqKSksXG4gICAgICAgIHNoW2pdKSxcbiAgICAgIEVoKTtcbiAgICBBaCA9IEVoO1xuICAgIEVoID0gRGg7XG4gICAgRGggPSByb3RsMzIoQ2gsIDEwKTtcbiAgICBDaCA9IEJoO1xuICAgIEJoID0gVDtcbiAgfVxuICBUID0gc3VtMzJfMyh0aGlzLmhbMV0sIEMsIERoKTtcbiAgdGhpcy5oWzFdID0gc3VtMzJfMyh0aGlzLmhbMl0sIEQsIEVoKTtcbiAgdGhpcy5oWzJdID0gc3VtMzJfMyh0aGlzLmhbM10sIEUsIEFoKTtcbiAgdGhpcy5oWzNdID0gc3VtMzJfMyh0aGlzLmhbNF0sIEEsIEJoKTtcbiAgdGhpcy5oWzRdID0gc3VtMzJfMyh0aGlzLmhbMF0sIEIsIENoKTtcbiAgdGhpcy5oWzBdID0gVDtcbn07XG5cblJJUEVNRDE2MC5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnbGl0dGxlJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdsaXR0bGUnKTtcbn07XG5cbmZ1bmN0aW9uIGYoaiwgeCwgeSwgeikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4geCBeIHkgXiB6O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAoeCAmIHkpIHwgKCh+eCkgJiB6KTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gKHggfCAofnkpKSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gNjMpXG4gICAgcmV0dXJuICh4ICYgeikgfCAoeSAmICh+eikpO1xuICBlbHNlXG4gICAgcmV0dXJuIHggXiAoeSB8ICh+eikpO1xufVxuXG5mdW5jdGlvbiBLKGopIHtcbiAgaWYgKGogPD0gMTUpXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuIDB4NWE4Mjc5OTk7XG4gIGVsc2UgaWYgKGogPD0gNDcpXG4gICAgcmV0dXJuIDB4NmVkOWViYTE7XG4gIGVsc2UgaWYgKGogPD0gNjMpXG4gICAgcmV0dXJuIDB4OGYxYmJjZGM7XG4gIGVsc2VcbiAgICByZXR1cm4gMHhhOTUzZmQ0ZTtcbn1cblxuZnVuY3Rpb24gS2goaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHg1MGEyOGJlNjtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YzRkZDEyNDtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZDcwM2VmMztcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg3YTZkNzZlOTtcbiAgZWxzZVxuICAgIHJldHVybiAweDAwMDAwMDAwO1xufVxuXG52YXIgciA9IFtcbiAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSxcbiAgNywgNCwgMTMsIDEsIDEwLCA2LCAxNSwgMywgMTIsIDAsIDksIDUsIDIsIDE0LCAxMSwgOCxcbiAgMywgMTAsIDE0LCA0LCA5LCAxNSwgOCwgMSwgMiwgNywgMCwgNiwgMTMsIDExLCA1LCAxMixcbiAgMSwgOSwgMTEsIDEwLCAwLCA4LCAxMiwgNCwgMTMsIDMsIDcsIDE1LCAxNCwgNSwgNiwgMixcbiAgNCwgMCwgNSwgOSwgNywgMTIsIDIsIDEwLCAxNCwgMSwgMywgOCwgMTEsIDYsIDE1LCAxM1xuXTtcblxudmFyIHJoID0gW1xuICA1LCAxNCwgNywgMCwgOSwgMiwgMTEsIDQsIDEzLCA2LCAxNSwgOCwgMSwgMTAsIDMsIDEyLFxuICA2LCAxMSwgMywgNywgMCwgMTMsIDUsIDEwLCAxNCwgMTUsIDgsIDEyLCA0LCA5LCAxLCAyLFxuICAxNSwgNSwgMSwgMywgNywgMTQsIDYsIDksIDExLCA4LCAxMiwgMiwgMTAsIDAsIDQsIDEzLFxuICA4LCA2LCA0LCAxLCAzLCAxMSwgMTUsIDAsIDUsIDEyLCAyLCAxMywgOSwgNywgMTAsIDE0LFxuICAxMiwgMTUsIDEwLCA0LCAxLCA1LCA4LCA3LCA2LCAyLCAxMywgMTQsIDAsIDMsIDksIDExXG5dO1xuXG52YXIgcyA9IFtcbiAgMTEsIDE0LCAxNSwgMTIsIDUsIDgsIDcsIDksIDExLCAxMywgMTQsIDE1LCA2LCA3LCA5LCA4LFxuICA3LCA2LCA4LCAxMywgMTEsIDksIDcsIDE1LCA3LCAxMiwgMTUsIDksIDExLCA3LCAxMywgMTIsXG4gIDExLCAxMywgNiwgNywgMTQsIDksIDEzLCAxNSwgMTQsIDgsIDEzLCA2LCA1LCAxMiwgNywgNSxcbiAgMTEsIDEyLCAxNCwgMTUsIDE0LCAxNSwgOSwgOCwgOSwgMTQsIDUsIDYsIDgsIDYsIDUsIDEyLFxuICA5LCAxNSwgNSwgMTEsIDYsIDgsIDEzLCAxMiwgNSwgMTIsIDEzLCAxNCwgMTEsIDgsIDUsIDZcbl07XG5cbnZhciBzaCA9IFtcbiAgOCwgOSwgOSwgMTEsIDEzLCAxNSwgMTUsIDUsIDcsIDcsIDgsIDExLCAxNCwgMTQsIDEyLCA2LFxuICA5LCAxMywgMTUsIDcsIDEyLCA4LCA5LCAxMSwgNywgNywgMTIsIDcsIDYsIDE1LCAxMywgMTEsXG4gIDksIDcsIDE1LCAxMSwgOCwgNiwgNiwgMTQsIDEyLCAxMywgNSwgMTQsIDEzLCAxMywgNywgNSxcbiAgMTUsIDUsIDgsIDExLCAxNCwgMTQsIDYsIDE0LCA2LCA5LCAxMiwgOSwgMTIsIDUsIDE1LCA4LFxuICA4LCA1LCAxMiwgOSwgMTIsIDUsIDE0LCA2LCA4LCAxMywgNiwgNSwgMTUsIDEzLCAxMSwgMTFcbl07XG4iLCJ2YXIgaGFzaCA9IHJlcXVpcmUoJy4uL2hhc2gnKTtcbnZhciB1dGlscyA9IGhhc2gudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIHJvdHI2NF9oaSA9IHV0aWxzLnJvdHI2NF9oaTtcbnZhciByb3RyNjRfbG8gPSB1dGlscy5yb3RyNjRfbG87XG52YXIgc2hyNjRfaGkgPSB1dGlscy5zaHI2NF9oaTtcbnZhciBzaHI2NF9sbyA9IHV0aWxzLnNocjY0X2xvO1xudmFyIHN1bTY0ID0gdXRpbHMuc3VtNjQ7XG52YXIgc3VtNjRfaGkgPSB1dGlscy5zdW02NF9oaTtcbnZhciBzdW02NF9sbyA9IHV0aWxzLnN1bTY0X2xvO1xudmFyIHN1bTY0XzRfaGkgPSB1dGlscy5zdW02NF80X2hpO1xudmFyIHN1bTY0XzRfbG8gPSB1dGlscy5zdW02NF80X2xvO1xudmFyIHN1bTY0XzVfaGkgPSB1dGlscy5zdW02NF81X2hpO1xudmFyIHN1bTY0XzVfbG8gPSB1dGlscy5zdW02NF81X2xvO1xudmFyIEJsb2NrSGFzaCA9IGhhc2guY29tbW9uLkJsb2NrSGFzaDtcblxudmFyIHNoYTI1Nl9LID0gW1xuICAweDQyOGEyZjk4LCAweDcxMzc0NDkxLCAweGI1YzBmYmNmLCAweGU5YjVkYmE1LFxuICAweDM5NTZjMjViLCAweDU5ZjExMWYxLCAweDkyM2Y4MmE0LCAweGFiMWM1ZWQ1LFxuICAweGQ4MDdhYTk4LCAweDEyODM1YjAxLCAweDI0MzE4NWJlLCAweDU1MGM3ZGMzLFxuICAweDcyYmU1ZDc0LCAweDgwZGViMWZlLCAweDliZGMwNmE3LCAweGMxOWJmMTc0LFxuICAweGU0OWI2OWMxLCAweGVmYmU0Nzg2LCAweDBmYzE5ZGM2LCAweDI0MGNhMWNjLFxuICAweDJkZTkyYzZmLCAweDRhNzQ4NGFhLCAweDVjYjBhOWRjLCAweDc2Zjk4OGRhLFxuICAweDk4M2U1MTUyLCAweGE4MzFjNjZkLCAweGIwMDMyN2M4LCAweGJmNTk3ZmM3LFxuICAweGM2ZTAwYmYzLCAweGQ1YTc5MTQ3LCAweDA2Y2E2MzUxLCAweDE0MjkyOTY3LFxuICAweDI3YjcwYTg1LCAweDJlMWIyMTM4LCAweDRkMmM2ZGZjLCAweDUzMzgwZDEzLFxuICAweDY1MGE3MzU0LCAweDc2NmEwYWJiLCAweDgxYzJjOTJlLCAweDkyNzIyYzg1LFxuICAweGEyYmZlOGExLCAweGE4MWE2NjRiLCAweGMyNGI4YjcwLCAweGM3NmM1MWEzLFxuICAweGQxOTJlODE5LCAweGQ2OTkwNjI0LCAweGY0MGUzNTg1LCAweDEwNmFhMDcwLFxuICAweDE5YTRjMTE2LCAweDFlMzc2YzA4LCAweDI3NDg3NzRjLCAweDM0YjBiY2I1LFxuICAweDM5MWMwY2IzLCAweDRlZDhhYTRhLCAweDViOWNjYTRmLCAweDY4MmU2ZmYzLFxuICAweDc0OGY4MmVlLCAweDc4YTU2MzZmLCAweDg0Yzg3ODE0LCAweDhjYzcwMjA4LFxuICAweDkwYmVmZmZhLCAweGE0NTA2Y2ViLCAweGJlZjlhM2Y3LCAweGM2NzE3OGYyXG5dO1xuXG52YXIgc2hhNTEyX0sgPSBbXG4gIDB4NDI4YTJmOTgsIDB4ZDcyOGFlMjIsIDB4NzEzNzQ0OTEsIDB4MjNlZjY1Y2QsXG4gIDB4YjVjMGZiY2YsIDB4ZWM0ZDNiMmYsIDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMsXG4gIDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsIDB4YjYwNWQwMTksXG4gIDB4OTIzZjgyYTQsIDB4YWYxOTRmOWIsIDB4YWIxYzVlZDUsIDB4ZGE2ZDgxMTgsXG4gIDB4ZDgwN2FhOTgsIDB4YTMwMzAyNDIsIDB4MTI4MzViMDEsIDB4NDU3MDZmYmUsXG4gIDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsIDB4ZDVmZmI0ZTIsXG4gIDB4NzJiZTVkNzQsIDB4ZjI3Yjg5NmYsIDB4ODBkZWIxZmUsIDB4M2IxNjk2YjEsXG4gIDB4OWJkYzA2YTcsIDB4MjVjNzEyMzUsIDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQsXG4gIDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsIDB4Mzg0ZjI1ZTMsXG4gIDB4MGZjMTlkYzYsIDB4OGI4Y2Q1YjUsIDB4MjQwY2ExY2MsIDB4NzdhYzljNjUsXG4gIDB4MmRlOTJjNmYsIDB4NTkyYjAyNzUsIDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMsXG4gIDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsIDB4ODMxMTUzYjUsXG4gIDB4OTgzZTUxNTIsIDB4ZWU2NmRmYWIsIDB4YTgzMWM2NmQsIDB4MmRiNDMyMTAsXG4gIDB4YjAwMzI3YzgsIDB4OThmYjIxM2YsIDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQsXG4gIDB4YzZlMDBiZjMsIDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsIDB4OTMwYWE3MjUsXG4gIDB4MDZjYTYzNTEsIDB4ZTAwMzgyNmYsIDB4MTQyOTI5NjcsIDB4MGEwZTZlNzAsXG4gIDB4MjdiNzBhODUsIDB4NDZkMjJmZmMsIDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYsXG4gIDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsIDB4OWQ5NWIzZGYsXG4gIDB4NjUwYTczNTQsIDB4OGJhZjYzZGUsIDB4NzY2YTBhYmIsIDB4M2M3N2IyYTgsXG4gIDB4ODFjMmM5MmUsIDB4NDdlZGFlZTYsIDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IsXG4gIDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsIDB4YmM0MjMwMDEsXG4gIDB4YzI0YjhiNzAsIDB4ZDBmODk3OTEsIDB4Yzc2YzUxYTMsIDB4MDY1NGJlMzAsXG4gIDB4ZDE5MmU4MTksIDB4ZDZlZjUyMTgsIDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTAsXG4gIDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsIDB4MzJiYmQxYjgsXG4gIDB4MTlhNGMxMTYsIDB4YjhkMmQwYzgsIDB4MWUzNzZjMDgsIDB4NTE0MWFiNTMsXG4gIDB4Mjc0ODc3NGMsIDB4ZGY4ZWViOTksIDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgsXG4gIDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsIDB4ZTM0MThhY2IsXG4gIDB4NWI5Y2NhNGYsIDB4Nzc2M2UzNzMsIDB4NjgyZTZmZjMsIDB4ZDZiMmI4YTMsXG4gIDB4NzQ4ZjgyZWUsIDB4NWRlZmIyZmMsIDB4NzhhNTYzNmYsIDB4NDMxNzJmNjAsXG4gIDB4ODRjODc4MTQsIDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsIDB4MWE2NDM5ZWMsXG4gIDB4OTBiZWZmZmEsIDB4MjM2MzFlMjgsIDB4YTQ1MDZjZWIsIDB4ZGU4MmJkZTksXG4gIDB4YmVmOWEzZjcsIDB4YjJjNjc5MTUsIDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIsXG4gIDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsIDB4MjFjMGMyMDcsXG4gIDB4ZWFkYTdkZDYsIDB4Y2RlMGViMWUsIDB4ZjU3ZDRmN2YsIDB4ZWU2ZWQxNzgsXG4gIDB4MDZmMDY3YWEsIDB4NzIxNzZmYmEsIDB4MGE2MzdkYzUsIDB4YTJjODk4YTYsXG4gIDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsIDB4MTMxYzQ3MWIsXG4gIDB4MjhkYjc3ZjUsIDB4MjMwNDdkODQsIDB4MzJjYWFiN2IsIDB4NDBjNzI0OTMsXG4gIDB4M2M5ZWJlMGEsIDB4MTVjOWJlYmMsIDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMsXG4gIDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsIDB4ZmM2NTdlMmEsXG4gIDB4NWZjYjZmYWIsIDB4M2FkNmZhZWMsIDB4NmM0NDE5OGMsIDB4NGE0NzU4MTdcbl07XG5cbnZhciBzaGExX0sgPSBbXG4gIDB4NUE4Mjc5OTksIDB4NkVEOUVCQTEsXG4gIDB4OEYxQkJDREMsIDB4Q0E2MkMxRDZcbl07XG5cbmZ1bmN0aW9uIFNIQTI1NigpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNIQTI1NikpXG4gICAgcmV0dXJuIG5ldyBTSEEyNTYoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gWyAweDZhMDllNjY3LCAweGJiNjdhZTg1LCAweDNjNmVmMzcyLCAweGE1NGZmNTNhLFxuICAgICAgICAgICAgIDB4NTEwZTUyN2YsIDB4OWIwNTY4OGMsIDB4MWY4M2Q5YWIsIDB4NWJlMGNkMTkgXTtcbiAgdGhpcy5rID0gc2hhMjU2X0s7XG4gIHRoaXMuVyA9IG5ldyBBcnJheSg2NCk7XG59XG51dGlscy5pbmhlcml0cyhTSEEyNTYsIEJsb2NrSGFzaCk7XG5leHBvcnRzLnNoYTI1NiA9IFNIQTI1NjtcblxuU0hBMjU2LmJsb2NrU2l6ZSA9IDUxMjtcblNIQTI1Ni5vdXRTaXplID0gMjU2O1xuU0hBMjU2LmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTI1Ni5wYWRMZW5ndGggPSA2NDtcblxuU0hBMjU2LnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkrKylcbiAgICBXW2ldID0gc3VtMzJfNChnMV8yNTYoV1tpIC0gMl0pLCBXW2kgLSA3XSwgZzBfMjU2KFdbaSAtIDE1XSksIFdbaSAtIDE2XSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuICB2YXIgZiA9IHRoaXMuaFs1XTtcbiAgdmFyIGcgPSB0aGlzLmhbNl07XG4gIHZhciBoID0gdGhpcy5oWzddO1xuXG4gIGFzc2VydCh0aGlzLmsubGVuZ3RoID09PSBXLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gU0hBMjI0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjI0KSlcbiAgICByZXR1cm4gbmV3IFNIQTIyNCgpO1xuXG4gIFNIQTI1Ni5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbIDB4YzEwNTllZDgsIDB4MzY3Y2Q1MDcsIDB4MzA3MGRkMTcsIDB4ZjcwZTU5MzksXG4gICAgICAgICAgICAgMHhmZmMwMGIzMSwgMHg2ODU4MTUxMSwgMHg2NGY5OGZhNywgMHhiZWZhNGZhNCBdO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjI0LCBTSEEyNTYpO1xuZXhwb3J0cy5zaGEyMjQgPSBTSEEyMjQ7XG5cblNIQTIyNC5ibG9ja1NpemUgPSA1MTI7XG5TSEEyMjQub3V0U2l6ZSA9IDIyNDtcblNIQTIyNC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyMjQucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTIyNC5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgLy8gSnVzdCB0cnVuY2F0ZSBvdXRwdXRcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmguc2xpY2UoMCwgNyksICdiaWcnKTtcbn07XG5cbmZ1bmN0aW9uIFNIQTUxMigpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNIQTUxMikpXG4gICAgcmV0dXJuIG5ldyBTSEE1MTIoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gWyAweDZhMDllNjY3LCAweGYzYmNjOTA4LFxuICAgICAgICAgICAgIDB4YmI2N2FlODUsIDB4ODRjYWE3M2IsXG4gICAgICAgICAgICAgMHgzYzZlZjM3MiwgMHhmZTk0ZjgyYixcbiAgICAgICAgICAgICAweGE1NGZmNTNhLCAweDVmMWQzNmYxLFxuICAgICAgICAgICAgIDB4NTEwZTUyN2YsIDB4YWRlNjgyZDEsXG4gICAgICAgICAgICAgMHg5YjA1Njg4YywgMHgyYjNlNmMxZixcbiAgICAgICAgICAgICAweDFmODNkOWFiLCAweGZiNDFiZDZiLFxuICAgICAgICAgICAgIDB4NWJlMGNkMTksIDB4MTM3ZTIxNzkgXTtcbiAgdGhpcy5rID0gc2hhNTEyX0s7XG4gIHRoaXMuVyA9IG5ldyBBcnJheSgxNjApO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBNTEyLCBCbG9ja0hhc2gpO1xuZXhwb3J0cy5zaGE1MTIgPSBTSEE1MTI7XG5cblNIQTUxMi5ibG9ja1NpemUgPSAxMDI0O1xuU0hBNTEyLm91dFNpemUgPSA1MTI7XG5TSEE1MTIuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBNTEyLnBhZExlbmd0aCA9IDEyODtcblxuU0hBNTEyLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrID0gZnVuY3Rpb24gX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KSB7XG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIC8vIDMyIHggMzJiaXQgd29yZHNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgaSsrKVxuICAgIFdbaV0gPSBtc2dbc3RhcnQgKyBpXTtcbiAgZm9yICg7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gZzFfNTEyX2hpKFdbaSAtIDRdLCBXW2kgLSAzXSk7ICAvLyBpIC0gMlxuICAgIHZhciBjMF9sbyA9IGcxXzUxMl9sbyhXW2kgLSA0XSwgV1tpIC0gM10pO1xuICAgIHZhciBjMV9oaSA9IFdbaSAtIDE0XTsgIC8vIGkgLSA3XG4gICAgdmFyIGMxX2xvID0gV1tpIC0gMTNdO1xuICAgIHZhciBjMl9oaSA9IGcwXzUxMl9oaShXW2kgLSAzMF0sIFdbaSAtIDI5XSk7ICAvLyBpIC0gMTVcbiAgICB2YXIgYzJfbG8gPSBnMF81MTJfbG8oV1tpIC0gMzBdLCBXW2kgLSAyOV0pO1xuICAgIHZhciBjM19oaSA9IFdbaSAtIDMyXTsgIC8vIGkgLSAxNlxuICAgIHZhciBjM19sbyA9IFdbaSAtIDMxXTtcblxuICAgIFdbaV0gPSBzdW02NF80X2hpKGMwX2hpLCBjMF9sbyxcbiAgICAgICAgICAgICAgICAgICAgICBjMV9oaSwgYzFfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgICAgICAgICAgICAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKGMwX2hpLCBjMF9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjMl9oaSwgYzJfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGMzX2hpLCBjM19sbyk7XG4gIH1cbn07XG5cblNIQTUxMi5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB0aGlzLl9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCk7XG5cbiAgdmFyIFcgPSB0aGlzLlc7XG5cbiAgdmFyIGFoID0gdGhpcy5oWzBdO1xuICB2YXIgYWwgPSB0aGlzLmhbMV07XG4gIHZhciBiaCA9IHRoaXMuaFsyXTtcbiAgdmFyIGJsID0gdGhpcy5oWzNdO1xuICB2YXIgY2ggPSB0aGlzLmhbNF07XG4gIHZhciBjbCA9IHRoaXMuaFs1XTtcbiAgdmFyIGRoID0gdGhpcy5oWzZdO1xuICB2YXIgZGwgPSB0aGlzLmhbN107XG4gIHZhciBlaCA9IHRoaXMuaFs4XTtcbiAgdmFyIGVsID0gdGhpcy5oWzldO1xuICB2YXIgZmggPSB0aGlzLmhbMTBdO1xuICB2YXIgZmwgPSB0aGlzLmhbMTFdO1xuICB2YXIgZ2ggPSB0aGlzLmhbMTJdO1xuICB2YXIgZ2wgPSB0aGlzLmhbMTNdO1xuICB2YXIgaGggPSB0aGlzLmhbMTRdO1xuICB2YXIgaGwgPSB0aGlzLmhbMTVdO1xuXG4gIGFzc2VydCh0aGlzLmsubGVuZ3RoID09PSBXLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGhoO1xuICAgIHZhciBjMF9sbyA9IGhsO1xuICAgIHZhciBjMV9oaSA9IHMxXzUxMl9oaShlaCwgZWwpO1xuICAgIHZhciBjMV9sbyA9IHMxXzUxMl9sbyhlaCwgZWwpO1xuICAgIHZhciBjMl9oaSA9IGNoNjRfaGkoZWgsIGVsLCBmaCwgZmwsIGdoLCBnbCk7XG4gICAgdmFyIGMyX2xvID0gY2g2NF9sbyhlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzNfaGkgPSB0aGlzLmtbaV07XG4gICAgdmFyIGMzX2xvID0gdGhpcy5rW2kgKyAxXTtcbiAgICB2YXIgYzRfaGkgPSBXW2ldO1xuICAgIHZhciBjNF9sbyA9IFdbaSArIDFdO1xuXG4gICAgdmFyIFQxX2hpID0gc3VtNjRfNV9oaShjMF9oaSwgYzBfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjMV9oaSwgYzFfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjMl9oaSwgYzJfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjM19oaSwgYzNfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjNF9oaSwgYzRfbG8pO1xuICAgIHZhciBUMV9sbyA9IHN1bTY0XzVfbG8oYzBfaGksIGMwX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIHZhciBjMF9oaSA9IHMwXzUxMl9oaShhaCwgYWwpO1xuICAgIHZhciBjMF9sbyA9IHMwXzUxMl9sbyhhaCwgYWwpO1xuICAgIHZhciBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIHZhciBjMV9sbyA9IG1hajY0X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuXG4gICAgdmFyIFQyX2hpID0gc3VtNjRfaGkoYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuICAgIHZhciBUMl9sbyA9IHN1bTY0X2xvKGMwX2hpLCBjMF9sbywgYzFfaGksIGMxX2xvKTtcblxuICAgIGhoID0gZ2g7XG4gICAgaGwgPSBnbDtcblxuICAgIGdoID0gZmg7XG4gICAgZ2wgPSBmbDtcblxuICAgIGZoID0gZWg7XG4gICAgZmwgPSBlbDtcblxuICAgIGVoID0gc3VtNjRfaGkoZGgsIGRsLCBUMV9oaSwgVDFfbG8pO1xuICAgIGVsID0gc3VtNjRfbG8oZGwsIGRsLCBUMV9oaSwgVDFfbG8pO1xuXG4gICAgZGggPSBjaDtcbiAgICBkbCA9IGNsO1xuXG4gICAgY2ggPSBiaDtcbiAgICBjbCA9IGJsO1xuXG4gICAgYmggPSBhaDtcbiAgICBibCA9IGFsO1xuXG4gICAgYWggPSBzdW02NF9oaShUMV9oaSwgVDFfbG8sIFQyX2hpLCBUMl9sbyk7XG4gICAgYWwgPSBzdW02NF9sbyhUMV9oaSwgVDFfbG8sIFQyX2hpLCBUMl9sbyk7XG4gIH1cblxuICBzdW02NCh0aGlzLmgsIDAsIGFoLCBhbCk7XG4gIHN1bTY0KHRoaXMuaCwgMiwgYmgsIGJsKTtcbiAgc3VtNjQodGhpcy5oLCA0LCBjaCwgY2wpO1xuICBzdW02NCh0aGlzLmgsIDYsIGRoLCBkbCk7XG4gIHN1bTY0KHRoaXMuaCwgOCwgZWgsIGVsKTtcbiAgc3VtNjQodGhpcy5oLCAxMCwgZmgsIGZsKTtcbiAgc3VtNjQodGhpcy5oLCAxMiwgZ2gsIGdsKTtcbiAgc3VtNjQodGhpcy5oLCAxNCwgaGgsIGhsKTtcbn07XG5cblNIQTUxMi5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG5cbmZ1bmN0aW9uIFNIQTM4NCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNIQTM4NCkpXG4gICAgcmV0dXJuIG5ldyBTSEEzODQoKTtcblxuICBTSEE1MTIuY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gWyAweGNiYmI5ZDVkLCAweGMxMDU5ZWQ4LFxuICAgICAgICAgICAgIDB4NjI5YTI5MmEsIDB4MzY3Y2Q1MDcsXG4gICAgICAgICAgICAgMHg5MTU5MDE1YSwgMHgzMDcwZGQxNyxcbiAgICAgICAgICAgICAweDE1MmZlY2Q4LCAweGY3MGU1OTM5LFxuICAgICAgICAgICAgIDB4NjczMzI2NjcsIDB4ZmZjMDBiMzEsXG4gICAgICAgICAgICAgMHg4ZWI0NGE4NywgMHg2ODU4MTUxMSxcbiAgICAgICAgICAgICAweGRiMGMyZTBkLCAweDY0Zjk4ZmE3LFxuICAgICAgICAgICAgIDB4NDdiNTQ4MWQsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTM4NCwgU0hBNTEyKTtcbmV4cG9ydHMuc2hhMzg0ID0gU0hBMzg0O1xuXG5TSEEzODQuYmxvY2tTaXplID0gMTAyNDtcblNIQTM4NC5vdXRTaXplID0gMzg0O1xuU0hBMzg0LmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTM4NC5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTM4NC5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsIDEyKSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDEyKSwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gU0hBMSgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNIQTEpKVxuICAgIHJldHVybiBuZXcgU0hBMSgpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsXG4gICAgICAgICAgICAgMHgxMDMyNTQ3NiwgMHhjM2QyZTFmMCBdO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoODApO1xufVxuXG51dGlscy5pbmhlcml0cyhTSEExLCBCbG9ja0hhc2gpO1xuZXhwb3J0cy5zaGExID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzID0gfn4oaSAvIDIwKTtcbiAgICB2YXIgdCA9IHN1bTMyXzUocm90bDMyKGEsIDUpLCBmdF8xKHMsIGIsIGMsIGQpLCBlLCBXW2ldLCBzaGExX0tbc10pO1xuICAgIGUgPSBkO1xuICAgIGQgPSBjO1xuICAgIGMgPSByb3RsMzIoYiwgMzApO1xuICAgIGIgPSBhO1xuICAgIGEgPSB0O1xuICB9XG5cbiAgdGhpcy5oWzBdID0gc3VtMzIodGhpcy5oWzBdLCBhKTtcbiAgdGhpcy5oWzFdID0gc3VtMzIodGhpcy5oWzFdLCBiKTtcbiAgdGhpcy5oWzJdID0gc3VtMzIodGhpcy5oWzJdLCBjKTtcbiAgdGhpcy5oWzNdID0gc3VtMzIodGhpcy5oWzNdLCBkKTtcbiAgdGhpcy5oWzRdID0gc3VtMzIodGhpcy5oWzRdLCBlKTtcbn07XG5cblNIQTEucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaCwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLCAnYmlnJyk7XG59O1xuXG5mdW5jdGlvbiBjaDMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoKH54KSAmIHopO1xufVxuXG5mdW5jdGlvbiBtYWozMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKHggJiB6KSBeICh5ICYgeik7XG59XG5cbmZ1bmN0aW9uIHAzMih4LCB5LCB6KSB7XG4gIHJldHVybiB4IF4geSBeIHo7XG59XG5cbmZ1bmN0aW9uIHMwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMikgXiByb3RyMzIoeCwgMTMpIF4gcm90cjMyKHgsIDIyKTtcbn1cblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuXG5mdW5jdGlvbiBnMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDcpIF4gcm90cjMyKHgsIDE4KSBeICh4ID4+PiAzKTtcbn1cblxuZnVuY3Rpb24gZzFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCAxNykgXiByb3RyMzIoeCwgMTkpIF4gKHggPj4+IDEwKTtcbn1cblxuZnVuY3Rpb24gZnRfMShzLCB4LCB5LCB6KSB7XG4gIGlmIChzID09PSAwKVxuICAgIHJldHVybiBjaDMyKHgsIHksIHopO1xuICBpZiAocyA9PT0gMSB8fCBzID09PSAzKVxuICAgIHJldHVybiBwMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAyKVxuICAgIHJldHVybiBtYWozMih4LCB5LCB6KTtcbn1cblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhoICYgeWgpIF4gKCh+eGgpICYgemgpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGNoNjRfbG8oeGgsIHhsLCB5aCwgeWwsIHpoLCB6bCkge1xuICB2YXIgciA9ICh4bCAmIHlsKSBeICgofnhsKSAmIHpsKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhoICYgeWgpIF4gKHhoICYgemgpIF4gKHloICYgemgpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2xvKHhoLCB4bCwgeWgsIHlsLCB6aCwgemwpIHtcbiAgdmFyIHIgPSAoeGwgJiB5bCkgXiAoeGwgJiB6bCkgXiAoeWwgJiB6bCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczBfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAyOCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDIpOyAgLy8gMzRcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgNyk7ICAvLyAzOVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE0KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMTgpO1xuICB2YXIgYzJfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCA5KTsgIC8vIDQxXG5cbiAgdmFyIHIgPSBjMF9oaSBeIGMxX2hpIF4gYzJfaGk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2xvKHhoLCB4bCkge1xuICB2YXIgYzBfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfbG8gXiBjMV9sbyBeIGMyX2xvO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGcwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMSk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDgpO1xuICB2YXIgYzJfaGkgPSBzaHI2NF9oaSh4aCwgeGwsIDcpO1xuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGcwXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMSk7XG4gIHZhciBjMV9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDgpO1xuICB2YXIgYzJfbG8gPSBzaHI2NF9sbyh4aCwgeGwsIDcpO1xuXG4gIHZhciByID0gYzBfbG8gXiBjMV9sbyBeIGMyX2xvO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGcxXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMTkpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyOSk7ICAvLyA2MVxuICB2YXIgYzJfaGkgPSBzaHI2NF9oaSh4aCwgeGwsIDYpO1xuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGcxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTkpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCAyOSk7ICAvLyA2MVxuICB2YXIgYzJfbG8gPSBzaHI2NF9sbyh4aCwgeGwsIDYpO1xuXG4gIHZhciByID0gYzBfbG8gXiBjMV9sbyBeIGMyX2xvO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG4iLCJ2YXIgdXRpbHMgPSBleHBvcnRzO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxuZnVuY3Rpb24gdG9BcnJheShtc2csIGVuYykge1xuICBpZiAoQXJyYXkuaXNBcnJheShtc2cpKVxuICAgIHJldHVybiBtc2cuc2xpY2UoKTtcbiAgaWYgKCFtc2cpXG4gICAgcmV0dXJuIFtdO1xuICB2YXIgcmVzID0gW107XG4gIGlmICh0eXBlb2YgbXNnID09PSAnc3RyaW5nJykge1xuICAgIGlmICghZW5jKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYyA9IG1zZy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB2YXIgaGkgPSBjID4+IDg7XG4gICAgICAgIHZhciBsbyA9IGMgJiAweGZmO1xuICAgICAgICBpZiAoaGkpXG4gICAgICAgICAgcmVzLnB1c2goaGksIGxvKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJlcy5wdXNoKGxvKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVuYyA9PT0gJ2hleCcpIHtcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9bXmEtejAtOV0rL2lnLCAnJyk7XG4gICAgICBpZiAobXNnLmxlbmd0aCAlIDIgIT09IDApXG4gICAgICAgIG1zZyA9ICcwJyArIG1zZztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKylcbiAgICAgIHJlc1tpXSA9IG1zZ1tpXSB8IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbnV0aWxzLnRvQXJyYXkgPSB0b0FycmF5O1xuXG5mdW5jdGlvbiB0b0hleChtc2cpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKylcbiAgICByZXMgKz0gemVybzIobXNnW2ldLnRvU3RyaW5nKDE2KSk7XG4gIHJldHVybiByZXM7XG59XG51dGlscy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG51dGlscy5odG9ubCA9IGh0b25sO1xuXG5mdW5jdGlvbiB0b0hleDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdyA9IG1zZ1tpXTtcbiAgICBpZiAoZW5kaWFuID09PSAnbGl0dGxlJylcbiAgICAgIHcgPSBodG9ubCh3KTtcbiAgICByZXMgKz0gemVybzgody50b1N0cmluZygxNikpO1xuICB9XG4gIHJldHVybiByZXM7XG59XG51dGlscy50b0hleDMyID0gdG9IZXgzMjtcblxuZnVuY3Rpb24gemVybzIod29yZCkge1xuICBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuICcwJyArIHdvcmQ7XG4gIGVsc2VcbiAgICByZXR1cm4gd29yZDtcbn1cbnV0aWxzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG51dGlscy56ZXJvOCA9IHplcm84O1xuXG5mdW5jdGlvbiBqb2luMzIobXNnLCBzdGFydCwgZW5kLCBlbmRpYW4pIHtcbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0O1xuICBhc3NlcnQobGVuICUgNCA9PT0gMCk7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobGVuIC8gNCk7XG4gIGZvciAodmFyIGkgPSAwLCBrID0gc3RhcnQ7IGkgPCByZXMubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciB3O1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKVxuICAgICAgdyA9IChtc2dba10gPDwgMjQpIHwgKG1zZ1trICsgMV0gPDwgMTYpIHwgKG1zZ1trICsgMl0gPDwgOCkgfCBtc2dbayArIDNdO1xuICAgIGVsc2VcbiAgICAgIHcgPSAobXNnW2sgKyAzXSA8PCAyNCkgfCAobXNnW2sgKyAyXSA8PCAxNikgfCAobXNnW2sgKyAxXSA8PCA4KSB8IG1zZ1trXTtcbiAgICByZXNbaV0gPSB3ID4+PiAwO1xuICB9XG4gIHJldHVybiByZXM7XG59XG51dGlscy5qb2luMzIgPSBqb2luMzI7XG5cbmZ1bmN0aW9uIHNwbGl0MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShtc2cubGVuZ3RoICogNCk7XG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIG0gPSBtc2dbaV07XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICAgIHJlc1trXSA9IG0gPj4+IDI0O1xuICAgICAgcmVzW2sgKyAxXSA9IChtID4+PiAxNikgJiAweGZmO1xuICAgICAgcmVzW2sgKyAyXSA9IChtID4+PiA4KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDNdID0gbSAmIDB4ZmY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc1trICsgM10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2tdID0gbSAmIDB4ZmY7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG51dGlscy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbnV0aWxzLnJvdHIzMiA9IHJvdHIzMjtcblxuZnVuY3Rpb24gcm90bDMyKHcsIGIpIHtcbiAgcmV0dXJuICh3IDw8IGIpIHwgKHcgPj4+ICgzMiAtIGIpKTtcbn1cbnV0aWxzLnJvdGwzMiA9IHJvdGwzMjtcblxuZnVuY3Rpb24gc3VtMzIoYSwgYikge1xuICByZXR1cm4gKGEgKyBiKSA+Pj4gMDtcbn1cbnV0aWxzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG51dGlscy5zdW0zMl8zID0gc3VtMzJfMztcblxuZnVuY3Rpb24gc3VtMzJfNChhLCBiLCBjLCBkKSB7XG4gIHJldHVybiAoYSArIGIgKyBjICsgZCkgPj4+IDA7XG59XG51dGlscy5zdW0zMl80ID0gc3VtMzJfNDtcblxuZnVuY3Rpb24gc3VtMzJfNShhLCBiLCBjLCBkLCBlKSB7XG4gIHJldHVybiAoYSArIGIgKyBjICsgZCArIGUpID4+PiAwO1xufVxudXRpbHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIGFzc2VydChjb25kLCBtc2cpIHtcbiAgaWYgKCFjb25kKVxuICAgIHRocm93IG5ldyBFcnJvcihtc2cgfHwgJ0Fzc2VydGlvbiBmYWlsZWQnKTtcbn1cbnV0aWxzLmFzc2VydCA9IGFzc2VydDtcblxudXRpbHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gc3VtNjQoYnVmLCBwb3MsIGFoLCBhbCkge1xuICB2YXIgYmggPSBidWZbcG9zXTtcbiAgdmFyIGJsID0gYnVmW3BvcyArIDFdO1xuXG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICBidWZbcG9zXSA9IGhpID4+PiAwO1xuICBidWZbcG9zICsgMV0gPSBsbztcbn1cbmV4cG9ydHMuc3VtNjQgPSBzdW02NDtcblxuZnVuY3Rpb24gc3VtNjRfaGkoYWgsIGFsLCBiaCwgYmwpIHtcbiAgdmFyIGxvID0gKGFsICsgYmwpID4+PiAwO1xuICB2YXIgaGkgPSAobG8gPCBhbCA/IDEgOiAwKSArIGFoICsgYmg7XG4gIHJldHVybiBoaSA+Pj4gMDtcbn07XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn07XG5leHBvcnRzLnN1bTY0X2xvID0gc3VtNjRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzRfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsKSB7XG4gIHZhciBjYXJyeSA9IDA7XG4gIHZhciBsbyA9IGFsO1xuICBsbyA9IChsbyArIGJsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBhbCA/IDEgOiAwO1xuICBsbyA9IChsbyArIGNsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBjbCA/IDEgOiAwO1xuICBsbyA9IChsbyArIGRsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBkbCA/IDEgOiAwO1xuXG4gIHZhciBoaSA9IGFoICsgYmggKyBjaCArIGRoICsgY2Fycnk7XG4gIHJldHVybiBoaSA+Pj4gMDtcbn07XG5leHBvcnRzLnN1bTY0XzRfaGkgPSBzdW02NF80X2hpO1xuXG5mdW5jdGlvbiBzdW02NF80X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCkge1xuICB2YXIgbG8gPSBhbCArIGJsICsgY2wgKyBkbDtcbiAgcmV0dXJuIGxvID4+PiAwO1xufTtcbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59O1xuZXhwb3J0cy5zdW02NF81X2hpID0gc3VtNjRfNV9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNV9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwsIGVoLCBlbCkge1xuICB2YXIgbG8gPSBhbCArIGJsICsgY2wgKyBkbCArIGVsO1xuXG4gIHJldHVybiBsbyA+Pj4gMDtcbn07XG5leHBvcnRzLnN1bTY0XzVfbG8gPSBzdW02NF81X2xvO1xuXG5mdW5jdGlvbiByb3RyNjRfaGkoYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWwgPDwgKDMyIC0gbnVtKSkgfCAoYWggPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufTtcbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufTtcbmV4cG9ydHMucm90cjY0X2xvID0gcm90cjY0X2xvO1xuXG5mdW5jdGlvbiBzaHI2NF9oaShhaCwgYWwsIG51bSkge1xuICByZXR1cm4gYWggPj4+IG51bTtcbn07XG5leHBvcnRzLnNocjY0X2hpID0gc2hyNjRfaGk7XG5cbmZ1bmN0aW9uIHNocjY0X2xvKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFoIDw8ICgzMiAtIG51bSkpIHwgKGFsID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn07XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iLCJleHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsIlxudmFyIGluZGV4T2YgPSBbXS5pbmRleE9mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGFyciwgb2JqKXtcbiAgaWYgKGluZGV4T2YpIHJldHVybiBhcnIuaW5kZXhPZihvYmopO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhcnJbaV0gPT09IG9iaikgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufTsiLCJpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gaW1wbGVtZW50YXRpb24gZnJvbSBzdGFuZGFyZCBub2RlLmpzICd1dGlsJyBtb2R1bGVcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICB2YWx1ZTogY3RvcixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fVxuICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpXG4gICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yXG4gIH1cbn1cbiIsIi8qKlxuICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBCdWZmZXJcbiAqXG4gKiBBdXRob3I6ICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIExpY2Vuc2U6ICBNSVRcbiAqXG4gKiBgbnBtIGluc3RhbGwgaXMtYnVmZmVyYFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gISEob2JqICE9IG51bGwgJiZcbiAgICAob2JqLl9pc0J1ZmZlciB8fCAvLyBGb3IgU2FmYXJpIDUtNyAobWlzc2luZyBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yKVxuICAgICAgKG9iai5jb25zdHJ1Y3RvciAmJlxuICAgICAgdHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iaikpXG4gICAgKSlcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsInZhciBibiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgYnJvcmFuZCA9IHJlcXVpcmUoJ2Jyb3JhbmQnKTtcblxuZnVuY3Rpb24gTWlsbGVyUmFiaW4ocmFuZCkge1xuICB0aGlzLnJhbmQgPSByYW5kIHx8IG5ldyBicm9yYW5kLlJhbmQoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gTWlsbGVyUmFiaW47XG5cbk1pbGxlclJhYmluLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShyYW5kKSB7XG4gIHJldHVybiBuZXcgTWlsbGVyUmFiaW4ocmFuZCk7XG59O1xuXG5NaWxsZXJSYWJpbi5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbiBfcmFuZChuKSB7XG4gIHZhciBsZW4gPSBuLmJpdExlbmd0aCgpO1xuICB2YXIgYnVmID0gdGhpcy5yYW5kLmdlbmVyYXRlKE1hdGguY2VpbChsZW4gLyA4KSk7XG5cbiAgLy8gU2V0IGxvdyBiaXRzXG4gIGJ1ZlswXSB8PSAzO1xuXG4gIC8vIE1hc2sgaGlnaCBiaXRzXG4gIHZhciBtYXNrID0gbGVuICYgMHg3O1xuICBpZiAobWFzayAhPT0gMClcbiAgICBidWZbYnVmLmxlbmd0aCAtIDFdID4+PSA3IC0gbWFzaztcblxuICByZXR1cm4gbmV3IGJuKGJ1Zik7XG59XG5cbk1pbGxlclJhYmluLnByb3RvdHlwZS50ZXN0ID0gZnVuY3Rpb24gdGVzdChuLCBrLCBjYikge1xuICB2YXIgbGVuID0gbi5iaXRMZW5ndGgoKTtcbiAgdmFyIHJlZCA9IGJuLm1vbnQobik7XG4gIHZhciByb25lID0gbmV3IGJuKDEpLnRvUmVkKHJlZCk7XG5cbiAgaWYgKCFrKVxuICAgIGsgPSBNYXRoLm1heCgxLCAobGVuIC8gNDgpIHwgMCk7XG5cbiAgLy8gRmluZCBkIGFuZCBzLCAobiAtIDEpID0gKDIgXiBzKSAqIGQ7XG4gIHZhciBuMSA9IG4uc3VibigxKTtcbiAgdmFyIG4yID0gbjEuc3VibigxKTtcbiAgZm9yICh2YXIgcyA9IDA7ICFuMS50ZXN0bihzKTsgcysrKSB7fVxuICB2YXIgZCA9IG4uc2hybihzKTtcblxuICB2YXIgcm4xID0gbjEudG9SZWQocmVkKTtcblxuICB2YXIgcHJpbWUgPSB0cnVlO1xuICBmb3IgKDsgayA+IDA7IGstLSkge1xuICAgIHZhciBhID0gdGhpcy5fcmFuZChuMik7XG4gICAgaWYgKGNiKVxuICAgICAgY2IoYSk7XG5cbiAgICB2YXIgeCA9IGEudG9SZWQocmVkKS5yZWRQb3coZCk7XG4gICAgaWYgKHguY21wKHJvbmUpID09PSAwIHx8IHguY21wKHJuMSkgPT09IDApXG4gICAgICBjb250aW51ZTtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgczsgaSsrKSB7XG4gICAgICB4ID0geC5yZWRTcXIoKTtcblxuICAgICAgaWYgKHguY21wKHJvbmUpID09PSAwKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoeC5jbXAocm4xKSA9PT0gMClcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IHMpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gcHJpbWU7XG59O1xuXG5NaWxsZXJSYWJpbi5wcm90b3R5cGUuZ2V0RGl2aXNvciA9IGZ1bmN0aW9uIGdldERpdmlzb3Iobiwgaykge1xuICB2YXIgbGVuID0gbi5iaXRMZW5ndGgoKTtcbiAgdmFyIHJlZCA9IGJuLm1vbnQobik7XG4gIHZhciByb25lID0gbmV3IGJuKDEpLnRvUmVkKHJlZCk7XG5cbiAgaWYgKCFrKVxuICAgIGsgPSBNYXRoLm1heCgxLCAobGVuIC8gNDgpIHwgMCk7XG5cbiAgLy8gRmluZCBkIGFuZCBzLCAobiAtIDEpID0gKDIgXiBzKSAqIGQ7XG4gIHZhciBuMSA9IG4uc3VibigxKTtcbiAgdmFyIG4yID0gbjEuc3VibigxKTtcbiAgZm9yICh2YXIgcyA9IDA7ICFuMS50ZXN0bihzKTsgcysrKSB7fVxuICB2YXIgZCA9IG4uc2hybihzKTtcblxuICB2YXIgcm4xID0gbjEudG9SZWQocmVkKTtcblxuICBmb3IgKDsgayA+IDA7IGstLSkge1xuICAgIHZhciBhID0gdGhpcy5fcmFuZChuMik7XG5cbiAgICB2YXIgZyA9IG4uZ2NkKGEpO1xuICAgIGlmIChnLmNtcG4oMSkgIT09IDApXG4gICAgICByZXR1cm4gZztcblxuICAgIHZhciB4ID0gYS50b1JlZChyZWQpLnJlZFBvdyhkKTtcbiAgICBpZiAoeC5jbXAocm9uZSkgPT09IDAgfHwgeC5jbXAocm4xKSA9PT0gMClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBzOyBpKyspIHtcbiAgICAgIHggPSB4LnJlZFNxcigpO1xuXG4gICAgICBpZiAoeC5jbXAocm9uZSkgPT09IDApXG4gICAgICAgIHJldHVybiB4LmZyb21SZWQoKS5zdWJuKDEpLmdjZChuKTtcbiAgICAgIGlmICh4LmNtcChybjEpID09PSAwKVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gcykge1xuICAgICAgeCA9IHgucmVkU3FyKCk7XG4gICAgICByZXR1cm4geC5mcm9tUmVkKCkuc3VibigxKS5nY2Qobik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1wiMi4xNi44NDAuMS4xMDEuMy40LjEuMVwiOiBcImFlcy0xMjgtZWNiXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjJcIjogXCJhZXMtMTI4LWNiY1wiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zXCI6IFwiYWVzLTEyOC1vZmJcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuNFwiOiBcImFlcy0xMjgtY2ZiXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxXCI6IFwiYWVzLTE5Mi1lY2JcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjJcIjogXCJhZXMtMTkyLWNiY1wiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yM1wiOiBcImFlcy0xOTItb2ZiXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0XCI6IFwiYWVzLTE5Mi1jZmJcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDFcIjogXCJhZXMtMjU2LWVjYlwiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MlwiOiBcImFlcy0yNTYtY2JjXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzXCI6IFwiYWVzLTI1Ni1vZmJcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDRcIjogXCJhZXMtMjU2LWNmYlwiXG59IiwiLy8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9zZWxmLXNpZ25lZC9ibG9iL2doLXBhZ2VzL2xpYi9hc24xLmpzXG4vLyBGZWRvciwgeW91IGFyZSBhbWF6aW5nLlxuXG52YXIgYXNuMSA9IHJlcXVpcmUoJ2FzbjEuanMnKVxuXG52YXIgUlNBUHJpdmF0ZUtleSA9IGFzbjEuZGVmaW5lKCdSU0FQcml2YXRlS2V5JywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgndmVyc2lvbicpLmludCgpLFxuICAgIHRoaXMua2V5KCdtb2R1bHVzJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3B1YmxpY0V4cG9uZW50JykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3ByaXZhdGVFeHBvbmVudCcpLmludCgpLFxuICAgIHRoaXMua2V5KCdwcmltZTEnKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncHJpbWUyJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ2V4cG9uZW50MScpLmludCgpLFxuICAgIHRoaXMua2V5KCdleHBvbmVudDInKS5pbnQoKSxcbiAgICB0aGlzLmtleSgnY29lZmZpY2llbnQnKS5pbnQoKVxuICApXG59KVxuZXhwb3J0cy5SU0FQcml2YXRlS2V5ID0gUlNBUHJpdmF0ZUtleVxuXG52YXIgUlNBUHVibGljS2V5ID0gYXNuMS5kZWZpbmUoJ1JTQVB1YmxpY0tleScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ21vZHVsdXMnKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncHVibGljRXhwb25lbnQnKS5pbnQoKVxuICApXG59KVxuZXhwb3J0cy5SU0FQdWJsaWNLZXkgPSBSU0FQdWJsaWNLZXlcblxudmFyIFB1YmxpY0tleSA9IGFzbjEuZGVmaW5lKCdTdWJqZWN0UHVibGljS2V5SW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ2FsZ29yaXRobScpLnVzZShBbGdvcml0aG1JZGVudGlmaWVyKSxcbiAgICB0aGlzLmtleSgnc3ViamVjdFB1YmxpY0tleScpLmJpdHN0cigpXG4gIClcbn0pXG5leHBvcnRzLlB1YmxpY0tleSA9IFB1YmxpY0tleVxuXG52YXIgQWxnb3JpdGhtSWRlbnRpZmllciA9IGFzbjEuZGVmaW5lKCdBbGdvcml0aG1JZGVudGlmaWVyJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgnYWxnb3JpdGhtJykub2JqaWQoKSxcbiAgICB0aGlzLmtleSgnbm9uZScpLm51bGxfKCkub3B0aW9uYWwoKSxcbiAgICB0aGlzLmtleSgnY3VydmUnKS5vYmppZCgpLm9wdGlvbmFsKCksXG4gICAgdGhpcy5rZXkoJ3BhcmFtcycpLnNlcSgpLm9iaihcbiAgICAgIHRoaXMua2V5KCdwJykuaW50KCksXG4gICAgICB0aGlzLmtleSgncScpLmludCgpLFxuICAgICAgdGhpcy5rZXkoJ2cnKS5pbnQoKVxuICAgICkub3B0aW9uYWwoKVxuICApXG59KVxuXG52YXIgUHJpdmF0ZUtleUluZm8gPSBhc24xLmRlZmluZSgnUHJpdmF0ZUtleUluZm8nLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCd2ZXJzaW9uJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ2FsZ29yaXRobScpLnVzZShBbGdvcml0aG1JZGVudGlmaWVyKSxcbiAgICB0aGlzLmtleSgnc3ViamVjdFByaXZhdGVLZXknKS5vY3RzdHIoKVxuICApXG59KVxuZXhwb3J0cy5Qcml2YXRlS2V5ID0gUHJpdmF0ZUtleUluZm9cbnZhciBFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbyA9IGFzbjEuZGVmaW5lKCdFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ2FsZ29yaXRobScpLnNlcSgpLm9iaihcbiAgICAgIHRoaXMua2V5KCdpZCcpLm9iamlkKCksXG4gICAgICB0aGlzLmtleSgnZGVjcnlwdCcpLnNlcSgpLm9iaihcbiAgICAgICAgdGhpcy5rZXkoJ2tkZScpLnNlcSgpLm9iaihcbiAgICAgICAgICB0aGlzLmtleSgnaWQnKS5vYmppZCgpLFxuICAgICAgICAgIHRoaXMua2V5KCdrZGVwYXJhbXMnKS5zZXEoKS5vYmooXG4gICAgICAgICAgICB0aGlzLmtleSgnc2FsdCcpLm9jdHN0cigpLFxuICAgICAgICAgICAgdGhpcy5rZXkoJ2l0ZXJzJykuaW50KClcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHRoaXMua2V5KCdjaXBoZXInKS5zZXEoKS5vYmooXG4gICAgICAgICAgdGhpcy5rZXkoJ2FsZ28nKS5vYmppZCgpLFxuICAgICAgICAgIHRoaXMua2V5KCdpdicpLm9jdHN0cigpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIHRoaXMua2V5KCdzdWJqZWN0UHJpdmF0ZUtleScpLm9jdHN0cigpXG4gIClcbn0pXG5cbmV4cG9ydHMuRW5jcnlwdGVkUHJpdmF0ZUtleSA9IEVuY3J5cHRlZFByaXZhdGVLZXlJbmZvXG5cbnZhciBEU0FQcml2YXRlS2V5ID0gYXNuMS5kZWZpbmUoJ0RTQVByaXZhdGVLZXknLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCd2ZXJzaW9uJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3AnKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncScpLmludCgpLFxuICAgIHRoaXMua2V5KCdnJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3B1Yl9rZXknKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncHJpdl9rZXknKS5pbnQoKVxuICApXG59KVxuZXhwb3J0cy5EU0FQcml2YXRlS2V5ID0gRFNBUHJpdmF0ZUtleVxuXG5leHBvcnRzLkRTQXBhcmFtID0gYXNuMS5kZWZpbmUoJ0RTQXBhcmFtJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLmludCgpXG59KVxudmFyIEVDUHJpdmF0ZUtleSA9IGFzbjEuZGVmaW5lKCdFQ1ByaXZhdGVLZXknLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCd2ZXJzaW9uJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3ByaXZhdGVLZXknKS5vY3RzdHIoKSxcbiAgICB0aGlzLmtleSgncGFyYW1ldGVycycpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKEVDUGFyYW1ldGVycyksXG4gICAgdGhpcy5rZXkoJ3B1YmxpY0tleScpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKClcbiAgKVxufSlcbmV4cG9ydHMuRUNQcml2YXRlS2V5ID0gRUNQcml2YXRlS2V5XG52YXIgRUNQYXJhbWV0ZXJzID0gYXNuMS5kZWZpbmUoJ0VDUGFyYW1ldGVycycsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jaG9pY2Uoe1xuICAgIG5hbWVkQ3VydmU6IHRoaXMub2JqaWQoKVxuICB9KVxufSlcblxuZXhwb3J0cy5zaWduYXR1cmUgPSBhc24xLmRlZmluZSgnc2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgncicpLmludCgpLFxuICAgIHRoaXMua2V5KCdzJykuaW50KClcbiAgKVxufSlcbiIsIi8vIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYXBhdGlsL3BlbXN0cmlwXG52YXIgZmluZFByb2MgPSAvUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFxccj9cXG5ERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspXFxyP1xcblxccj9cXG4oWzAtOUEtelxcblxcclxcK1xcL1xcPV0rKVxccj9cXG4vbVxudmFyIHN0YXJ0UmVnZXggPSAvXi0tLS0tQkVHSU4gKC4qKSBLRVktLS0tLVxccj9cXG4vbVxudmFyIGZ1bGxSZWdleCA9IC9eLS0tLS1CRUdJTiAoLiopIEtFWS0tLS0tXFxyP1xcbihbMC05QS16XFxuXFxyXFwrXFwvXFw9XSspXFxyP1xcbi0tLS0tRU5EIFxcMSBLRVktLS0tLSQvbVxudmFyIGV2cCA9IHJlcXVpcmUoJ2V2cF9ieXRlc3Rva2V5JylcbnZhciBjaXBoZXJzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1hZXMnKVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2tleSwgcGFzc3dvcmQpIHtcbiAgdmFyIGtleSA9IG9rZXkudG9TdHJpbmcoKVxuICB2YXIgbWF0Y2ggPSBrZXkubWF0Y2goZmluZFByb2MpXG4gIHZhciBkZWNyeXB0ZWRcbiAgaWYgKCFtYXRjaCkge1xuICAgIHZhciBtYXRjaDIgPSBrZXkubWF0Y2goZnVsbFJlZ2V4KVxuICAgIGRlY3J5cHRlZCA9IG5ldyBCdWZmZXIobWF0Y2gyWzJdLnJlcGxhY2UoL1xccj9cXG4vZywgJycpLCAnYmFzZTY0JylcbiAgfSBlbHNlIHtcbiAgICB2YXIgc3VpdGUgPSAnYWVzJyArIG1hdGNoWzFdXG4gICAgdmFyIGl2ID0gbmV3IEJ1ZmZlcihtYXRjaFsyXSwgJ2hleCcpXG4gICAgdmFyIGNpcGhlclRleHQgPSBuZXcgQnVmZmVyKG1hdGNoWzNdLnJlcGxhY2UoL1xccj9cXG4vZywgJycpLCAnYmFzZTY0JylcbiAgICB2YXIgY2lwaGVyS2V5ID0gZXZwKHBhc3N3b3JkLCBpdi5zbGljZSgwLCA4KSwgcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSkua2V5XG4gICAgdmFyIG91dCA9IFtdXG4gICAgdmFyIGNpcGhlciA9IGNpcGhlcnMuY3JlYXRlRGVjaXBoZXJpdihzdWl0ZSwgY2lwaGVyS2V5LCBpdilcbiAgICBvdXQucHVzaChjaXBoZXIudXBkYXRlKGNpcGhlclRleHQpKVxuICAgIG91dC5wdXNoKGNpcGhlci5maW5hbCgpKVxuICAgIGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQob3V0KVxuICB9XG4gIHZhciB0YWcgPSBrZXkubWF0Y2goc3RhcnRSZWdleClbMV0gKyAnIEtFWSdcbiAgcmV0dXJuIHtcbiAgICB0YWc6IHRhZyxcbiAgICBkYXRhOiBkZWNyeXB0ZWRcbiAgfVxufVxuIiwidmFyIGFzbjEgPSByZXF1aXJlKCcuL2FzbjEnKVxudmFyIGFlc2lkID0gcmVxdWlyZSgnLi9hZXNpZC5qc29uJylcbnZhciBmaXhQcm9jID0gcmVxdWlyZSgnLi9maXhQcm9jJylcbnZhciBjaXBoZXJzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1hZXMnKVxudmFyIGNvbXBhdCA9IHJlcXVpcmUoJ3Bia2RmMicpXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlS2V5c1xuXG5mdW5jdGlvbiBwYXJzZUtleXMgKGJ1ZmZlcikge1xuICB2YXIgcGFzc3dvcmRcbiAgaWYgKHR5cGVvZiBidWZmZXIgPT09ICdvYmplY3QnICYmICFCdWZmZXIuaXNCdWZmZXIoYnVmZmVyKSkge1xuICAgIHBhc3N3b3JkID0gYnVmZmVyLnBhc3NwaHJhc2VcbiAgICBidWZmZXIgPSBidWZmZXIua2V5XG4gIH1cbiAgaWYgKHR5cGVvZiBidWZmZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgYnVmZmVyID0gbmV3IEJ1ZmZlcihidWZmZXIpXG4gIH1cblxuICB2YXIgc3RyaXBwZWQgPSBmaXhQcm9jKGJ1ZmZlciwgcGFzc3dvcmQpXG5cbiAgdmFyIHR5cGUgPSBzdHJpcHBlZC50YWdcbiAgdmFyIGRhdGEgPSBzdHJpcHBlZC5kYXRhXG4gIHZhciBzdWJ0eXBlLCBuZGF0YVxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdQVUJMSUMgS0VZJzpcbiAgICAgIG5kYXRhID0gYXNuMS5QdWJsaWNLZXkuZGVjb2RlKGRhdGEsICdkZXInKVxuICAgICAgc3VidHlwZSA9IG5kYXRhLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbignLicpXG4gICAgICBzd2l0Y2ggKHN1YnR5cGUpIHtcbiAgICAgICAgY2FzZSAnMS4yLjg0MC4xMTM1NDkuMS4xLjEnOlxuICAgICAgICAgIHJldHVybiBhc24xLlJTQVB1YmxpY0tleS5kZWNvZGUobmRhdGEuc3ViamVjdFB1YmxpY0tleS5kYXRhLCAnZGVyJylcbiAgICAgICAgY2FzZSAnMS4yLjg0MC4xMDA0NS4yLjEnOlxuICAgICAgICAgIG5kYXRhLnN1YmplY3RQcml2YXRlS2V5ID0gbmRhdGEuc3ViamVjdFB1YmxpY0tleVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZWMnLFxuICAgICAgICAgICAgZGF0YTogbmRhdGFcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJzEuMi44NDAuMTAwNDAuNC4xJzpcbiAgICAgICAgICBuZGF0YS5hbGdvcml0aG0ucGFyYW1zLnB1Yl9rZXkgPSBhc24xLkRTQXBhcmFtLmRlY29kZShuZGF0YS5zdWJqZWN0UHVibGljS2V5LmRhdGEsICdkZXInKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZHNhJyxcbiAgICAgICAgICAgIGRhdGE6IG5kYXRhLmFsZ29yaXRobS5wYXJhbXNcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcigndW5rbm93biBrZXkgaWQgJyArIHN1YnR5cGUpXG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24ga2V5IHR5cGUgJyArIHR5cGUpXG4gICAgY2FzZSAnRU5DUllQVEVEIFBSSVZBVEUgS0VZJzpcbiAgICAgIGRhdGEgPSBhc24xLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKGRhdGEsICdkZXInKVxuICAgICAgZGF0YSA9IGRlY3J5cHQoZGF0YSwgcGFzc3dvcmQpXG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgY2FzZSAnUFJJVkFURSBLRVknOlxuICAgICAgbmRhdGEgPSBhc24xLlByaXZhdGVLZXkuZGVjb2RlKGRhdGEsICdkZXInKVxuICAgICAgc3VidHlwZSA9IG5kYXRhLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbignLicpXG4gICAgICBzd2l0Y2ggKHN1YnR5cGUpIHtcbiAgICAgICAgY2FzZSAnMS4yLjg0MC4xMTM1NDkuMS4xLjEnOlxuICAgICAgICAgIHJldHVybiBhc24xLlJTQVByaXZhdGVLZXkuZGVjb2RlKG5kYXRhLnN1YmplY3RQcml2YXRlS2V5LCAnZGVyJylcbiAgICAgICAgY2FzZSAnMS4yLjg0MC4xMDA0NS4yLjEnOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJ2ZTogbmRhdGEuYWxnb3JpdGhtLmN1cnZlLFxuICAgICAgICAgICAgcHJpdmF0ZUtleTogYXNuMS5FQ1ByaXZhdGVLZXkuZGVjb2RlKG5kYXRhLnN1YmplY3RQcml2YXRlS2V5LCAnZGVyJykucHJpdmF0ZUtleVxuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnMS4yLjg0MC4xMDA0MC40LjEnOlxuICAgICAgICAgIG5kYXRhLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXkgPSBhc24xLkRTQXBhcmFtLmRlY29kZShuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleSwgJ2RlcicpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdkc2EnLFxuICAgICAgICAgICAgcGFyYW1zOiBuZGF0YS5hbGdvcml0aG0ucGFyYW1zXG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24ga2V5IGlkICcgKyBzdWJ0eXBlKVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGtleSB0eXBlICcgKyB0eXBlKVxuICAgIGNhc2UgJ1JTQSBQVUJMSUMgS0VZJzpcbiAgICAgIHJldHVybiBhc24xLlJTQVB1YmxpY0tleS5kZWNvZGUoZGF0YSwgJ2RlcicpXG4gICAgY2FzZSAnUlNBIFBSSVZBVEUgS0VZJzpcbiAgICAgIHJldHVybiBhc24xLlJTQVByaXZhdGVLZXkuZGVjb2RlKGRhdGEsICdkZXInKVxuICAgIGNhc2UgJ0RTQSBQUklWQVRFIEtFWSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZHNhJyxcbiAgICAgICAgcGFyYW1zOiBhc24xLkRTQVByaXZhdGVLZXkuZGVjb2RlKGRhdGEsICdkZXInKVxuICAgICAgfVxuICAgIGNhc2UgJ0VDIFBSSVZBVEUgS0VZJzpcbiAgICAgIGRhdGEgPSBhc24xLkVDUHJpdmF0ZUtleS5kZWNvZGUoZGF0YSwgJ2RlcicpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJ2ZTogZGF0YS5wYXJhbWV0ZXJzLnZhbHVlLFxuICAgICAgICBwcml2YXRlS2V5OiBkYXRhLnByaXZhdGVLZXlcbiAgICAgIH1cbiAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24ga2V5IHR5cGUgJyArIHR5cGUpXG4gIH1cbn1cbnBhcnNlS2V5cy5zaWduYXR1cmUgPSBhc24xLnNpZ25hdHVyZVxuZnVuY3Rpb24gZGVjcnlwdCAoZGF0YSwgcGFzc3dvcmQpIHtcbiAgdmFyIHNhbHQgPSBkYXRhLmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdFxuICB2YXIgaXRlcnMgPSBwYXJzZUludChkYXRhLmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuaXRlcnMudG9TdHJpbmcoKSwgMTApXG4gIHZhciBhbGdvID0gYWVzaWRbZGF0YS5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKCcuJyldXG4gIHZhciBpdiA9IGRhdGEuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2XG4gIHZhciBjaXBoZXJUZXh0ID0gZGF0YS5zdWJqZWN0UHJpdmF0ZUtleVxuICB2YXIga2V5bGVuID0gcGFyc2VJbnQoYWxnby5zcGxpdCgnLScpWzFdLCAxMCkgLyA4XG4gIHZhciBrZXkgPSBjb21wYXQucGJrZGYyU3luYyhwYXNzd29yZCwgc2FsdCwgaXRlcnMsIGtleWxlbilcbiAgdmFyIGNpcGhlciA9IGNpcGhlcnMuY3JlYXRlRGVjaXBoZXJpdihhbGdvLCBrZXksIGl2KVxuICB2YXIgb3V0ID0gW11cbiAgb3V0LnB1c2goY2lwaGVyLnVwZGF0ZShjaXBoZXJUZXh0KSlcbiAgb3V0LnB1c2goY2lwaGVyLmZpbmFsKCkpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KG91dClcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwidmFyIGNyZWF0ZUhtYWMgPSByZXF1aXJlKCdjcmVhdGUtaG1hYycpXG52YXIgTUFYX0FMTE9DID0gTWF0aC5wb3coMiwgMzApIC0gMSAvLyBkZWZhdWx0IGluIGlvanNcblxuZXhwb3J0cy5wYmtkZjIgPSBwYmtkZjJcbmZ1bmN0aW9uIHBia2RmMiAocGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGtleWxlbiwgZGlnZXN0LCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGRpZ2VzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gZGlnZXN0XG4gICAgZGlnZXN0ID0gdW5kZWZpbmVkXG4gIH1cblxuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBjYWxsYmFjayBwcm92aWRlZCB0byBwYmtkZjInKVxuICB9XG5cbiAgdmFyIHJlc3VsdCA9IHBia2RmMlN5bmMocGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGtleWxlbiwgZGlnZXN0KVxuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBjYWxsYmFjayh1bmRlZmluZWQsIHJlc3VsdClcbiAgfSlcbn1cblxuZXhwb3J0cy5wYmtkZjJTeW5jID0gcGJrZGYyU3luY1xuZnVuY3Rpb24gcGJrZGYyU3luYyAocGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGtleWxlbiwgZGlnZXN0KSB7XG4gIGlmICh0eXBlb2YgaXRlcmF0aW9ucyAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJdGVyYXRpb25zIG5vdCBhIG51bWJlcicpXG4gIH1cblxuICBpZiAoaXRlcmF0aW9ucyA8IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCYWQgaXRlcmF0aW9ucycpXG4gIH1cblxuICBpZiAodHlwZW9mIGtleWxlbiAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbGVuZ3RoIG5vdCBhIG51bWJlcicpXG4gIH1cblxuICBpZiAoa2V5bGVuIDwgMCB8fCBrZXlsZW4gPiBNQVhfQUxMT0MpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCYWQga2V5IGxlbmd0aCcpXG4gIH1cblxuICBkaWdlc3QgPSBkaWdlc3QgfHwgJ3NoYTEnXG5cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIocGFzc3dvcmQpKSBwYXNzd29yZCA9IG5ldyBCdWZmZXIocGFzc3dvcmQsICdiaW5hcnknKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihzYWx0KSkgc2FsdCA9IG5ldyBCdWZmZXIoc2FsdCwgJ2JpbmFyeScpXG5cbiAgdmFyIGhMZW5cbiAgdmFyIGwgPSAxXG4gIHZhciBESyA9IG5ldyBCdWZmZXIoa2V5bGVuKVxuICB2YXIgYmxvY2sxID0gbmV3IEJ1ZmZlcihzYWx0Lmxlbmd0aCArIDQpXG4gIHNhbHQuY29weShibG9jazEsIDAsIDAsIHNhbHQubGVuZ3RoKVxuXG4gIHZhciByXG4gIHZhciBUXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbDsgaSsrKSB7XG4gICAgYmxvY2sxLndyaXRlVUludDMyQkUoaSwgc2FsdC5sZW5ndGgpXG4gICAgdmFyIFUgPSBjcmVhdGVIbWFjKGRpZ2VzdCwgcGFzc3dvcmQpLnVwZGF0ZShibG9jazEpLmRpZ2VzdCgpXG5cbiAgICBpZiAoIWhMZW4pIHtcbiAgICAgIGhMZW4gPSBVLmxlbmd0aFxuICAgICAgVCA9IG5ldyBCdWZmZXIoaExlbilcbiAgICAgIGwgPSBNYXRoLmNlaWwoa2V5bGVuIC8gaExlbilcbiAgICAgIHIgPSBrZXlsZW4gLSAobCAtIDEpICogaExlblxuICAgIH1cblxuICAgIFUuY29weShULCAwLCAwLCBoTGVuKVxuXG4gICAgZm9yICh2YXIgaiA9IDE7IGogPCBpdGVyYXRpb25zOyBqKyspIHtcbiAgICAgIFUgPSBjcmVhdGVIbWFjKGRpZ2VzdCwgcGFzc3dvcmQpLnVwZGF0ZShVKS5kaWdlc3QoKVxuXG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IGhMZW47IGsrKykge1xuICAgICAgICBUW2tdIF49IFVba11cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGVzdFBvcyA9IChpIC0gMSkgKiBoTGVuXG4gICAgdmFyIGxlbiA9IChpID09PSBsID8gciA6IGhMZW4pXG4gICAgVC5jb3B5KERLLCBkZXN0UG9zLCAwLCBsZW4pXG4gIH1cblxuICByZXR1cm4gREtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKCFwcm9jZXNzLnZlcnNpb24gfHxcbiAgICBwcm9jZXNzLnZlcnNpb24uaW5kZXhPZigndjAuJykgPT09IDAgfHxcbiAgICBwcm9jZXNzLnZlcnNpb24uaW5kZXhPZigndjEuJykgPT09IDAgJiYgcHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoJ3YxLjguJykgIT09IDApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBuZXh0VGljaztcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcHJvY2Vzcy5uZXh0VGljaztcbn1cblxuZnVuY3Rpb24gbmV4dFRpY2soZm4pIHtcbiAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICB2YXIgaSA9IDA7XG4gIHdoaWxlIChpIDwgYXJncy5sZW5ndGgpIHtcbiAgICBhcmdzW2krK10gPSBhcmd1bWVudHNbaV07XG4gIH1cbiAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2soKSB7XG4gICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gIH0pO1xufVxuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCJleHBvcnRzLnB1YmxpY0VuY3J5cHQgPSByZXF1aXJlKCcuL3B1YmxpY0VuY3J5cHQnKTtcbmV4cG9ydHMucHJpdmF0ZURlY3J5cHQgPSByZXF1aXJlKCcuL3ByaXZhdGVEZWNyeXB0Jyk7XG5cbmV4cG9ydHMucHJpdmF0ZUVuY3J5cHQgPSBmdW5jdGlvbiBwcml2YXRlRW5jcnlwdChrZXksIGJ1Zikge1xuICByZXR1cm4gZXhwb3J0cy5wdWJsaWNFbmNyeXB0KGtleSwgYnVmLCB0cnVlKTtcbn07XG5cbmV4cG9ydHMucHVibGljRGVjcnlwdCA9IGZ1bmN0aW9uIHB1YmxpY0RlY3J5cHQoa2V5LCBidWYpIHtcbiAgcmV0dXJuIGV4cG9ydHMucHJpdmF0ZURlY3J5cHQoa2V5LCBidWYsIHRydWUpO1xufTsiLCJ2YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZWVkLCBsZW4pIHtcbiAgdmFyIHQgPSBuZXcgQnVmZmVyKCcnKTtcbiAgdmFyICBpID0gMCwgYztcbiAgd2hpbGUgKHQubGVuZ3RoIDwgbGVuKSB7XG4gICAgYyA9IGkyb3BzKGkrKyk7XG4gICAgdCA9IEJ1ZmZlci5jb25jYXQoW3QsIGNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoc2VlZCkudXBkYXRlKGMpLmRpZ2VzdCgpXSk7XG4gIH1cbiAgcmV0dXJuIHQuc2xpY2UoMCwgbGVuKTtcbn07XG5cbmZ1bmN0aW9uIGkyb3BzKGMpIHtcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIoNCk7XG4gIG91dC53cml0ZVVJbnQzMkJFKGMsMCk7XG4gIHJldHVybiBvdXQ7XG59IiwidmFyIHBhcnNlS2V5cyA9IHJlcXVpcmUoJ3BhcnNlLWFzbjEnKTtcbnZhciBtZ2YgPSByZXF1aXJlKCcuL21nZicpO1xudmFyIHhvciA9IHJlcXVpcmUoJy4veG9yJyk7XG52YXIgYm4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGNydCA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktcnNhJyk7XG52YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJyk7XG52YXIgd2l0aFB1YmxpYyA9IHJlcXVpcmUoJy4vd2l0aFB1YmxpYycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwcml2YXRlRGVjcnlwdChwcml2YXRlX2tleSwgZW5jLCByZXZlcnNlKSB7XG4gIHZhciBwYWRkaW5nO1xuICBpZiAocHJpdmF0ZV9rZXkucGFkZGluZykge1xuICAgIHBhZGRpbmcgPSBwcml2YXRlX2tleS5wYWRkaW5nO1xuICB9IGVsc2UgaWYgKHJldmVyc2UpIHtcbiAgICBwYWRkaW5nID0gMTtcbiAgfSBlbHNlIHtcbiAgICBwYWRkaW5nID0gNDtcbiAgfVxuICBcbiAgdmFyIGtleSA9IHBhcnNlS2V5cyhwcml2YXRlX2tleSk7XG4gIHZhciBrID0ga2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO1xuICBpZiAoZW5jLmxlbmd0aCA+IGsgfHwgbmV3IGJuKGVuYykuY21wKGtleS5tb2R1bHVzKSA+PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkZWNyeXB0aW9uIGVycm9yJyk7XG4gIH1cbiAgdmFyIG1zZztcbiAgaWYgKHJldmVyc2UpIHtcbiAgICBtc2cgPSB3aXRoUHVibGljKG5ldyBibihlbmMpLCBrZXkpO1xuICB9IGVsc2Uge1xuICAgIG1zZyA9IGNydChlbmMsIGtleSk7XG4gIH1cbiAgdmFyIHpCdWZmZXIgPSBuZXcgQnVmZmVyKGsgLSBtc2cubGVuZ3RoKTtcbiAgekJ1ZmZlci5maWxsKDApO1xuICBtc2cgPSBCdWZmZXIuY29uY2F0KFt6QnVmZmVyLCBtc2ddLCBrKTtcbiAgaWYgKHBhZGRpbmcgPT09IDQpIHtcbiAgICByZXR1cm4gb2FlcChrZXksIG1zZyk7XG4gIH0gZWxzZSBpZiAocGFkZGluZyA9PT0gMSkge1xuICAgIHJldHVybiBwa2NzMShrZXksIG1zZywgcmV2ZXJzZSk7XG4gIH0gZWxzZSBpZiAocGFkZGluZyA9PT0gMykge1xuICAgIHJldHVybiBtc2c7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHBhZGRpbmcnKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gb2FlcChrZXksIG1zZyl7XG4gIHZhciBuID0ga2V5Lm1vZHVsdXM7XG4gIHZhciBrID0ga2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO1xuICB2YXIgbUxlbiA9IG1zZy5sZW5ndGg7XG4gIHZhciBpSGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUobmV3IEJ1ZmZlcignJykpLmRpZ2VzdCgpO1xuICB2YXIgaExlbiA9IGlIYXNoLmxlbmd0aDtcbiAgdmFyIGhMZW4yID0gMiAqIGhMZW47XG4gIGlmIChtc2dbMF0gIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZXJyb3InKTtcbiAgfVxuICB2YXIgbWFza2VkU2VlZCA9IG1zZy5zbGljZSgxLCBoTGVuICsgMSk7XG4gIHZhciBtYXNrZWREYiA9ICBtc2cuc2xpY2UoaExlbiArIDEpO1xuICB2YXIgc2VlZCA9IHhvcihtYXNrZWRTZWVkLCBtZ2YobWFza2VkRGIsIGhMZW4pKTtcbiAgdmFyIGRiID0geG9yKG1hc2tlZERiLCBtZ2Yoc2VlZCwgayAtIGhMZW4gLSAxKSk7XG4gIGlmIChjb21wYXJlKGlIYXNoLCBkYi5zbGljZSgwLCBoTGVuKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZXJyb3InKTtcbiAgfVxuICB2YXIgaSA9IGhMZW47XG4gIHdoaWxlIChkYltpXSA9PT0gMCkge1xuICAgIGkrKztcbiAgfVxuICBpZiAoZGJbaSsrXSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGVjcnlwdGlvbiBlcnJvcicpO1xuICB9XG4gIHJldHVybiBkYi5zbGljZShpKTtcbn1cblxuZnVuY3Rpb24gcGtjczEoa2V5LCBtc2csIHJldmVyc2Upe1xuICB2YXIgcDEgPSBtc2cuc2xpY2UoMCwgMik7XG4gIHZhciBpID0gMjtcbiAgdmFyIHN0YXR1cyA9IDA7XG4gIHdoaWxlIChtc2dbaSsrXSAhPT0gMCkge1xuICAgIGlmIChpID49IG1zZy5sZW5ndGgpIHtcbiAgICAgIHN0YXR1cysrO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHZhciBwcyA9IG1zZy5zbGljZSgyLCBpIC0gMSk7XG4gIHZhciBwMiA9IG1zZy5zbGljZShpIC0gMSwgaSk7XG5cbiAgaWYgKChwMS50b1N0cmluZygnaGV4JykgIT09ICcwMDAyJyAmJiAhcmV2ZXJzZSkgfHwgKHAxLnRvU3RyaW5nKCdoZXgnKSAhPT0gJzAwMDEnICYmIHJldmVyc2UpKXtcbiAgICBzdGF0dXMrKztcbiAgfVxuICBpZiAocHMubGVuZ3RoIDwgOCkge1xuICAgIHN0YXR1cysrO1xuICB9XG4gIGlmIChzdGF0dXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZXJyb3InKTtcbiAgfVxuICByZXR1cm4gIG1zZy5zbGljZShpKTtcbn1cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYil7XG4gIGEgPSBuZXcgQnVmZmVyKGEpO1xuICBiID0gbmV3IEJ1ZmZlcihiKTtcbiAgdmFyIGRpZiA9IDA7XG4gIHZhciBsZW4gPSBhLmxlbmd0aDtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIGRpZisrO1xuICAgIGxlbiA9IE1hdGgubWluKGEubGVuZ3RoLCBiLmxlbmd0aCk7XG4gIH1cbiAgdmFyIGkgPSAtMTtcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIGRpZiArPSAoYVtpXSBeIGJbaV0pO1xuICB9XG4gIHJldHVybiBkaWY7XG59IiwidmFyIHBhcnNlS2V5cyA9IHJlcXVpcmUoJ3BhcnNlLWFzbjEnKTtcbnZhciByYW5kb21CeXRlcyA9IHJlcXVpcmUoJ3JhbmRvbWJ5dGVzJyk7XG52YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJyk7XG52YXIgbWdmID0gcmVxdWlyZSgnLi9tZ2YnKTtcbnZhciB4b3IgPSByZXF1aXJlKCcuL3hvcicpO1xudmFyIGJuID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciB3aXRoUHVibGljID0gcmVxdWlyZSgnLi93aXRoUHVibGljJyk7XG52YXIgY3J0ID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1yc2EnKTtcblxudmFyIGNvbnN0YW50cyA9IHtcbiAgUlNBX1BLQ1MxX09BRVBfUEFERElORzogNCxcbiAgUlNBX1BLQ1MxX1BBRERJTjogMSxcbiAgUlNBX05PX1BBRERJTkc6IDNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcHVibGljRW5jcnlwdChwdWJsaWNfa2V5LCBtc2csIHJldmVyc2UpIHtcbiAgdmFyIHBhZGRpbmc7XG4gIGlmIChwdWJsaWNfa2V5LnBhZGRpbmcpIHtcbiAgICBwYWRkaW5nID0gcHVibGljX2tleS5wYWRkaW5nO1xuICB9IGVsc2UgaWYgKHJldmVyc2UpIHtcbiAgICBwYWRkaW5nID0gMTtcbiAgfSBlbHNlIHtcbiAgICBwYWRkaW5nID0gNDtcbiAgfVxuICB2YXIga2V5ID0gcGFyc2VLZXlzKHB1YmxpY19rZXkpO1xuICB2YXIgcGFkZGVkTXNnO1xuICBpZiAocGFkZGluZyA9PT0gNCkge1xuICAgIHBhZGRlZE1zZyA9IG9hZXAoa2V5LCBtc2cpO1xuICB9IGVsc2UgaWYgKHBhZGRpbmcgPT09IDEpIHtcbiAgICBwYWRkZWRNc2cgPSBwa2NzMShrZXksIG1zZywgcmV2ZXJzZSk7XG4gIH0gZWxzZSBpZiAocGFkZGluZyA9PT0gMykge1xuICAgIHBhZGRlZE1zZyA9IG5ldyBibihtc2cpO1xuICAgIGlmIChwYWRkZWRNc2cuY21wKGtleS5tb2R1bHVzKSA+PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHBhZGRpbmcnKTtcbiAgfVxuICBpZiAocmV2ZXJzZSkge1xuICAgIHJldHVybiBjcnQocGFkZGVkTXNnLCBrZXkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB3aXRoUHVibGljKHBhZGRlZE1zZywga2V5KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gb2FlcChrZXksIG1zZyl7XG4gIHZhciBrID0ga2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO1xuICB2YXIgbUxlbiA9IG1zZy5sZW5ndGg7XG4gIHZhciBpSGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUobmV3IEJ1ZmZlcignJykpLmRpZ2VzdCgpO1xuICB2YXIgaExlbiA9IGlIYXNoLmxlbmd0aDtcbiAgdmFyIGhMZW4yID0gMiAqIGhMZW47XG4gIGlmIChtTGVuID4gayAtIGhMZW4yIC0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignbWVzc2FnZSB0b28gbG9uZycpO1xuICB9XG4gIHZhciBwcyA9IG5ldyBCdWZmZXIoayAtIG1MZW4gLSBoTGVuMiAtIDIpO1xuICBwcy5maWxsKDApO1xuICB2YXIgZGJsZW4gPSBrIC0gaExlbiAtIDE7XG4gIHZhciBzZWVkID0gcmFuZG9tQnl0ZXMoaExlbik7XG4gIHZhciBtYXNrZWREYiA9IHhvcihCdWZmZXIuY29uY2F0KFtpSGFzaCwgcHMsIG5ldyBCdWZmZXIoWzFdKSwgbXNnXSwgZGJsZW4pLCBtZ2Yoc2VlZCwgZGJsZW4pKTtcbiAgdmFyIG1hc2tlZFNlZWQgPSB4b3Ioc2VlZCwgbWdmKG1hc2tlZERiLCBoTGVuKSk7XG4gIHJldHVybiBuZXcgYm4oQnVmZmVyLmNvbmNhdChbbmV3IEJ1ZmZlcihbMF0pLCBtYXNrZWRTZWVkLCBtYXNrZWREYl0sIGspKTtcbn1cbmZ1bmN0aW9uIHBrY3MxKGtleSwgbXNnLCByZXZlcnNlKXtcbiAgdmFyIG1MZW4gPSBtc2cubGVuZ3RoO1xuICB2YXIgayA9IGtleS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtcbiAgaWYgKG1MZW4gPiBrIC0gMTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21lc3NhZ2UgdG9vIGxvbmcnKTtcbiAgfVxuICB2YXIgcHM7XG4gIGlmIChyZXZlcnNlKSB7XG4gICAgcHMgPSBuZXcgQnVmZmVyKGsgLSBtTGVuIC0gMyk7XG4gICAgcHMuZmlsbCgweGZmKTtcbiAgfSBlbHNlIHtcbiAgICBwcyA9IG5vblplcm8oayAtIG1MZW4gLSAzKTtcbiAgfVxuICByZXR1cm4gbmV3IGJuKEJ1ZmZlci5jb25jYXQoW25ldyBCdWZmZXIoWzAsIHJldmVyc2U/MToyXSksIHBzLCBuZXcgQnVmZmVyKFswXSksIG1zZ10sIGspKTtcbn1cbmZ1bmN0aW9uIG5vblplcm8obGVuLCBjcnlwdG8pIHtcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIobGVuKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2FjaGUgPSByYW5kb21CeXRlcyhsZW4qMik7XG4gIHZhciBjdXIgPSAwO1xuICB2YXIgbnVtO1xuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIGlmIChjdXIgPT09IGNhY2hlLmxlbmd0aCkge1xuICAgICAgY2FjaGUgPSByYW5kb21CeXRlcyhsZW4qMik7XG4gICAgICBjdXIgPSAwO1xuICAgIH1cbiAgICBudW0gPSBjYWNoZVtjdXIrK107XG4gICAgaWYgKG51bSkge1xuICAgICAgb3V0W2krK10gPSBudW07XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59IiwidmFyIGJuID0gcmVxdWlyZSgnYm4uanMnKTtcbmZ1bmN0aW9uIHdpdGhQdWJsaWMocGFkZGVkTXNnLCBrZXkpIHtcbiAgcmV0dXJuIG5ldyBCdWZmZXIocGFkZGVkTXNnXG4gICAgLnRvUmVkKGJuLm1vbnQoa2V5Lm1vZHVsdXMpKVxuICAgIC5yZWRQb3cobmV3IGJuKGtleS5wdWJsaWNFeHBvbmVudCkpXG4gICAgLmZyb21SZWQoKVxuICAgIC50b0FycmF5KCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdpdGhQdWJsaWM7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4b3IoYSwgYikge1xuICB2YXIgbGVuID0gYS5sZW5ndGg7XG4gIHZhciBpID0gLTE7XG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBhW2ldIF49IGJbaV07XG4gIH1cbiAgcmV0dXJuIGFcbn07IiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIG9sZEJyb3dzZXIgKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3NlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExJylcbn1cblxudmFyIGNyeXB0byA9IGdsb2JhbC5jcnlwdG8gfHwgZ2xvYmFsLm1zQ3J5cHRvXG5cbmlmIChjcnlwdG8gJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJhbmRvbUJ5dGVzXG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IG9sZEJyb3dzZXJcbn1cblxuZnVuY3Rpb24gcmFuZG9tQnl0ZXMgKHNpemUsIGNiKSB7XG4gIC8vIHBoYW50b21qcyBuZWVkcyB0byB0aHJvd1xuICBpZiAoc2l6ZSA+IDY1NTM2KSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMnKVxuICAvLyBpbiBjYXNlIGJyb3dzZXJpZnkgIGlzbid0IHVzaW5nIHRoZSBVaW50OEFycmF5IHZlcnNpb25cbiAgdmFyIHJhd0J5dGVzID0gbmV3IGdsb2JhbC5VaW50OEFycmF5KHNpemUpXG5cbiAgLy8gVGhpcyB3aWxsIG5vdCB3b3JrIGluIG9sZGVyIGJyb3dzZXJzLlxuICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL3dpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzXG4gIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMocmF3Qnl0ZXMpXG5cbiAgLy8gcGhhbnRvbWpzIGRvZXNuJ3QgbGlrZSBhIGJ1ZmZlciBiZWluZyBwYXNzZWQgaGVyZVxuICB2YXIgYnl0ZXMgPSBuZXcgQnVmZmVyKHJhd0J5dGVzLmJ1ZmZlcilcblxuICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgY2IobnVsbCwgYnl0ZXMpXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9saWIvX3N0cmVhbV9kdXBsZXguanNcIilcbiIsIi8vIGEgZHVwbGV4IHN0cmVhbSBpcyBqdXN0IGEgc3RyZWFtIHRoYXQgaXMgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUuXG4vLyBTaW5jZSBKUyBkb2Vzbid0IGhhdmUgbXVsdGlwbGUgcHJvdG90eXBhbCBpbmhlcml0YW5jZSwgdGhpcyBjbGFzc1xuLy8gcHJvdG90eXBhbGx5IGluaGVyaXRzIGZyb20gUmVhZGFibGUsIGFuZCB0aGVuIHBhcmFzaXRpY2FsbHkgZnJvbVxuLy8gV3JpdGFibGUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgcmV0dXJuIGtleXM7XG59XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleDtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBwcm9jZXNzTmV4dFRpY2sgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV9yZWFkYWJsZScpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3dyaXRhYmxlJyk7XG5cbnV0aWwuaW5oZXJpdHMoRHVwbGV4LCBSZWFkYWJsZSk7XG5cbnZhciBrZXlzID0gb2JqZWN0S2V5cyhXcml0YWJsZS5wcm90b3R5cGUpO1xuZm9yICh2YXIgdiA9IDA7IHYgPCBrZXlzLmxlbmd0aDsgdisrKSB7XG4gIHZhciBtZXRob2QgPSBrZXlzW3ZdO1xuICBpZiAoIUR1cGxleC5wcm90b3R5cGVbbWV0aG9kXSlcbiAgICBEdXBsZXgucHJvdG90eXBlW21ldGhvZF0gPSBXcml0YWJsZS5wcm90b3R5cGVbbWV0aG9kXTtcbn1cblxuZnVuY3Rpb24gRHVwbGV4KG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpXG4gICAgcmV0dXJuIG5ldyBEdXBsZXgob3B0aW9ucyk7XG5cbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlYWRhYmxlID09PSBmYWxzZSlcbiAgICB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy53cml0YWJsZSA9PT0gZmFsc2UpXG4gICAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuXG4gIHRoaXMuYWxsb3dIYWxmT3BlbiA9IHRydWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuYWxsb3dIYWxmT3BlbiA9PT0gZmFsc2UpXG4gICAgdGhpcy5hbGxvd0hhbGZPcGVuID0gZmFsc2U7XG5cbiAgdGhpcy5vbmNlKCdlbmQnLCBvbmVuZCk7XG59XG5cbi8vIHRoZSBuby1oYWxmLW9wZW4gZW5mb3JjZXJcbmZ1bmN0aW9uIG9uZW5kKCkge1xuICAvLyBpZiB3ZSBhbGxvdyBoYWxmLW9wZW4gc3RhdGUsIG9yIGlmIHRoZSB3cml0YWJsZSBzaWRlIGVuZGVkLFxuICAvLyB0aGVuIHdlJ3JlIG9rLlxuICBpZiAodGhpcy5hbGxvd0hhbGZPcGVuIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQpXG4gICAgcmV0dXJuO1xuXG4gIC8vIG5vIG1vcmUgZGF0YSBjYW4gYmUgd3JpdHRlbi5cbiAgLy8gQnV0IGFsbG93IG1vcmUgd3JpdGVzIHRvIGhhcHBlbiBpbiB0aGlzIHRpY2suXG4gIHByb2Nlc3NOZXh0VGljayhvbkVuZE5ULCB0aGlzKTtcbn1cblxuZnVuY3Rpb24gb25FbmROVChzZWxmKSB7XG4gIHNlbGYuZW5kKCk7XG59XG5cbmZ1bmN0aW9uIGZvckVhY2ggKHhzLCBmKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZih4c1tpXSwgaSk7XG4gIH1cbn1cbiIsIi8vIGEgcGFzc3Rocm91Z2ggc3RyZWFtLlxuLy8gYmFzaWNhbGx5IGp1c3QgdGhlIG1vc3QgbWluaW1hbCBzb3J0IG9mIFRyYW5zZm9ybSBzdHJlYW0uXG4vLyBFdmVyeSB3cml0dGVuIGNodW5rIGdldHMgb3V0cHV0IGFzLWlzLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFzc1Rocm91Z2g7XG5cbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL19zdHJlYW1fdHJhbnNmb3JtJyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudXRpbC5pbmhlcml0cyhQYXNzVGhyb3VnaCwgVHJhbnNmb3JtKTtcblxuZnVuY3Rpb24gUGFzc1Rocm91Z2gob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFzc1Rocm91Z2gpKVxuICAgIHJldHVybiBuZXcgUGFzc1Rocm91Z2gob3B0aW9ucyk7XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG59XG5cblBhc3NUaHJvdWdoLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihudWxsLCBjaHVuayk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRhYmxlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHByb2Nlc3NOZXh0VGljayA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5Jyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5SZWFkYWJsZS5SZWFkYWJsZVN0YXRlID0gUmVhZGFibGVTdGF0ZTtcblxudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRUVsaXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RoO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW07XG4oZnVuY3Rpb24gKCl7dHJ5e1xuICBTdHJlYW0gPSByZXF1aXJlKCdzdCcgKyAncmVhbScpO1xufWNhdGNoKF8pe31maW5hbGx5e1xuICBpZiAoIVN0cmVhbSlcbiAgICBTdHJlYW0gPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG59fSgpKVxuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgZGVidWdVdGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGRlYnVnO1xuaWYgKGRlYnVnVXRpbCAmJiBkZWJ1Z1V0aWwuZGVidWdsb2cpIHtcbiAgZGVidWcgPSBkZWJ1Z1V0aWwuZGVidWdsb2coJ3N0cmVhbScpO1xufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbiAoKSB7fTtcbn1cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgU3RyaW5nRGVjb2RlcjtcblxudXRpbC5pbmhlcml0cyhSZWFkYWJsZSwgU3RyZWFtKTtcblxudmFyIER1cGxleDtcbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleClcbiAgICB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciBkZWZhdWx0SHdtID0gdGhpcy5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IChod20gfHwgaHdtID09PSAwKSA/IGh3bSA6IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSB+fnRoaXMuaGlnaFdhdGVyTWFyaztcblxuICB0aGlzLmJ1ZmZlciA9IFtdO1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIHRoaXMucGlwZXMgPSBudWxsO1xuICB0aGlzLnBpcGVzQ291bnQgPSAwO1xuICB0aGlzLmZsb3dpbmcgPSBudWxsO1xuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIHRoaXMuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyB3aGVuZXZlciB3ZSByZXR1cm4gbnVsbCwgdGhlbiB3ZSBzZXQgYSBmbGFnIHRvIHNheVxuICAvLyB0aGF0IHdlJ3JlIGF3YWl0aW5nIGEgJ3JlYWRhYmxlJyBldmVudCBlbWlzc2lvbi5cbiAgdGhpcy5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZUxpc3RlbmluZyA9IGZhbHNlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIHdoZW4gcGlwaW5nLCB3ZSBvbmx5IGNhcmUgYWJvdXQgJ3JlYWRhYmxlJyBldmVudHMgdGhhdCBoYXBwZW5cbiAgLy8gYWZ0ZXIgcmVhZCgpaW5nIGFsbCB0aGUgYnl0ZXMgYW5kIG5vdCBnZXR0aW5nIGFueSBwdXNoYmFjay5cbiAgdGhpcy5yYW5PdXQgPSBmYWxzZTtcblxuICAvLyB0aGUgbnVtYmVyIG9mIHdyaXRlcnMgdGhhdCBhcmUgYXdhaXRpbmcgYSBkcmFpbiBldmVudCBpbiAucGlwZSgpc1xuICB0aGlzLmF3YWl0RHJhaW4gPSAwO1xuXG4gIC8vIGlmIHRydWUsIGEgbWF5YmVSZWFkTW9yZSBoYXMgYmVlbiBzY2hlZHVsZWRcbiAgdGhpcy5yZWFkaW5nTW9yZSA9IGZhbHNlO1xuXG4gIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gIHRoaXMuZW5jb2RpbmcgPSBudWxsO1xuICBpZiAob3B0aW9ucy5lbmNvZGluZykge1xuICAgIGlmICghU3RyaW5nRGVjb2RlcilcbiAgICAgIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICAgIHRoaXMuZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKG9wdGlvbnMuZW5jb2RpbmcpO1xuICAgIHRoaXMuZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nO1xuICB9XG59XG5cbnZhciBEdXBsZXg7XG5mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSlcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlKG9wdGlvbnMpO1xuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBuZXcgUmVhZGFibGVTdGF0ZShvcHRpb25zLCB0aGlzKTtcblxuICAvLyBsZWdhY3lcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMucmVhZCA9PT0gJ2Z1bmN0aW9uJylcbiAgICB0aGlzLl9yZWFkID0gb3B0aW9ucy5yZWFkO1xuXG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG4vLyBNYW51YWxseSBzaG92ZSBzb21ldGhpbmcgaW50byB0aGUgcmVhZCgpIGJ1ZmZlci5cbi8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBoaWdoV2F0ZXJNYXJrIGhhcyBub3QgYmVlbiBoaXQgeWV0LFxuLy8gc2ltaWxhciB0byBob3cgV3JpdGFibGUud3JpdGUoKSByZXR1cm5zIHRydWUgaWYgeW91IHNob3VsZFxuLy8gd3JpdGUoKSBzb21lIG1vcmUuXG5SZWFkYWJsZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuXG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBlbmNvZGluZyB8fCBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgaWYgKGVuY29kaW5nICE9PSBzdGF0ZS5lbmNvZGluZykge1xuICAgICAgY2h1bmsgPSBuZXcgQnVmZmVyKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICBlbmNvZGluZyA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGZhbHNlKTtcbn07XG5cbi8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpXG5SZWFkYWJsZS5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uKGNodW5rKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgJycsIHRydWUpO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLmlzUGF1c2VkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPT09IGZhbHNlO1xufTtcblxuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQpIHtcbiAgdmFyIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG4gIGlmIChlcikge1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfSBlbHNlIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpO1xuICB9IGVsc2UgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkge1xuICAgIGlmIChzdGF0ZS5lbmRlZCAmJiAhYWRkVG9Gcm9udCkge1xuICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoJ3N0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GJyk7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZEVtaXR0ZWQgJiYgYWRkVG9Gcm9udCkge1xuICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoJ3N0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50Jyk7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIWFkZFRvRnJvbnQgJiYgIWVuY29kaW5nKVxuICAgICAgICBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspO1xuXG4gICAgICBpZiAoIWFkZFRvRnJvbnQpXG4gICAgICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcblxuICAgICAgLy8gaWYgd2Ugd2FudCB0aGUgZGF0YSBub3csIGp1c3QgZW1pdCBpdC5cbiAgICAgIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuc3luYykge1xuICAgICAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgICAgIGlmIChhZGRUb0Zyb250KVxuICAgICAgICAgIHN0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcblxuICAgICAgICBpZiAoc3RhdGUubmVlZFJlYWRhYmxlKVxuICAgICAgICAgIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xuICAgICAgfVxuXG4gICAgICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBuZWVkTW9yZURhdGEoc3RhdGUpO1xufVxuXG5cbi8vIGlmIGl0J3MgcGFzdCB0aGUgaGlnaCB3YXRlciBtYXJrLCB3ZSBjYW4gcHVzaCBpbiBzb21lIG1vcmUuXG4vLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZVxuLy8gbW9yZSBieXRlcy4gIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsXG4vLyBzdWNoIGFzIHRoZSByZXBsLiAgQWxzbywgaWYgdGhlIHB1c2goKSB0cmlnZ2VyZWQgYVxuLy8gcmVhZGFibGUgZXZlbnQsIGFuZCB0aGUgdXNlciBjYWxsZWQgcmVhZChsYXJnZU51bWJlcikgc3VjaCB0aGF0XG4vLyBuZWVkUmVhZGFibGUgd2FzIHNldCwgdGhlbiB3ZSBvdWdodCB0byBwdXNoIG1vcmUsIHNvIHRoYXQgYW5vdGhlclxuLy8gJ3JlYWRhYmxlJyBldmVudCB3aWxsIGJlIHRyaWdnZXJlZC5cbmZ1bmN0aW9uIG5lZWRNb3JlRGF0YShzdGF0ZSkge1xuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmXG4gICAgICAgICAoc3RhdGUubmVlZFJlYWRhYmxlIHx8XG4gICAgICAgICAgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fFxuICAgICAgICAgIHN0YXRlLmxlbmd0aCA9PT0gMCk7XG59XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oZW5jKSB7XG4gIGlmICghU3RyaW5nRGVjb2RlcilcbiAgICBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoZW5jKTtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IGVuYztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBEb24ndCByYWlzZSB0aGUgaHdtID4gOE1CXG52YXIgTUFYX0hXTSA9IDB4ODAwMDAwO1xuZnVuY3Rpb24gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobikge1xuICBpZiAobiA+PSBNQVhfSFdNKSB7XG4gICAgbiA9IE1BWF9IV007XG4gIH0gZWxzZSB7XG4gICAgLy8gR2V0IHRoZSBuZXh0IGhpZ2hlc3QgcG93ZXIgb2YgMlxuICAgIG4tLTtcbiAgICBuIHw9IG4gPj4+IDE7XG4gICAgbiB8PSBuID4+PiAyO1xuICAgIG4gfD0gbiA+Pj4gNDtcbiAgICBuIHw9IG4gPj4+IDg7XG4gICAgbiB8PSBuID4+PiAxNjtcbiAgICBuKys7XG4gIH1cbiAgcmV0dXJuIG47XG59XG5cbmZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobiwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZClcbiAgICByZXR1cm4gMDtcblxuICBpZiAoc3RhdGUub2JqZWN0TW9kZSlcbiAgICByZXR1cm4gbiA9PT0gMCA/IDAgOiAxO1xuXG4gIGlmIChuID09PSBudWxsIHx8IGlzTmFOKG4pKSB7XG4gICAgLy8gb25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUuYnVmZmVyLmxlbmd0aClcbiAgICAgIHJldHVybiBzdGF0ZS5idWZmZXJbMF0ubGVuZ3RoO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBzdGF0ZS5sZW5ndGg7XG4gIH1cblxuICBpZiAobiA8PSAwKVxuICAgIHJldHVybiAwO1xuXG4gIC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSB0YXJnZXQgYnVmZmVyIGxldmVsLFxuICAvLyB0aGVuIHJhaXNlIHRoZSB3YXRlciBtYXJrLiAgQnVtcCB1cCB0byB0aGUgbmV4dCBoaWdoZXN0XG4gIC8vIHBvd2VyIG9mIDIsIHRvIHByZXZlbnQgaW5jcmVhc2luZyBpdCBleGNlc3NpdmVseSBpbiB0aW55XG4gIC8vIGFtb3VudHMuXG4gIGlmIChuID4gc3RhdGUuaGlnaFdhdGVyTWFyaylcbiAgICBzdGF0ZS5oaWdoV2F0ZXJNYXJrID0gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobik7XG5cbiAgLy8gZG9uJ3QgaGF2ZSB0aGF0IG11Y2guICByZXR1cm4gbnVsbCwgdW5sZXNzIHdlJ3ZlIGVuZGVkLlxuICBpZiAobiA+IHN0YXRlLmxlbmd0aCkge1xuICAgIGlmICghc3RhdGUuZW5kZWQpIHtcbiAgICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbjtcbn1cblxuLy8geW91IGNhbiBvdmVycmlkZSBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBhc3luYyBfcmVhZChuKSBiZWxvdy5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24obikge1xuICBkZWJ1ZygncmVhZCcsIG4pO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgbk9yaWcgPSBuO1xuXG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA+IDApXG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgLy8gaWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAobiA9PT0gMCAmJlxuICAgICAgc3RhdGUubmVlZFJlYWRhYmxlICYmXG4gICAgICAoc3RhdGUubGVuZ3RoID49IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgZGVidWcoJ3JlYWQ6IGVtaXRSZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpXG4gICAgICBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICBlbHNlXG4gICAgICBlbWl0UmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBuID0gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSk7XG5cbiAgLy8gaWYgd2UndmUgZW5kZWQsIGFuZCB3ZSdyZSBub3cgY2xlYXIsIHRoZW4gZmluaXNoIGl0IHVwLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkge1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApXG4gICAgICBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEFsbCB0aGUgYWN0dWFsIGNodW5rIGdlbmVyYXRpb24gbG9naWMgbmVlZHMgdG8gYmVcbiAgLy8gKmJlbG93KiB0aGUgY2FsbCB0byBfcmVhZC4gIFRoZSByZWFzb24gaXMgdGhhdCBpbiBjZXJ0YWluXG4gIC8vIHN5bnRoZXRpYyBzdHJlYW0gY2FzZXMsIHN1Y2ggYXMgcGFzc3Rocm91Z2ggc3RyZWFtcywgX3JlYWRcbiAgLy8gbWF5IGJlIGEgY29tcGxldGVseSBzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hpY2ggbWF5IGNoYW5nZVxuICAvLyB0aGUgc3RhdGUgb2YgdGhlIHJlYWQgYnVmZmVyLCBwcm92aWRpbmcgZW5vdWdoIGRhdGEgd2hlblxuICAvLyBiZWZvcmUgdGhlcmUgd2FzICpub3QqIGVub3VnaC5cbiAgLy9cbiAgLy8gU28sIHRoZSBzdGVwcyBhcmU6XG4gIC8vIDEuIEZpZ3VyZSBvdXQgd2hhdCB0aGUgc3RhdGUgb2YgdGhpbmdzIHdpbGwgYmUgYWZ0ZXIgd2UgZG9cbiAgLy8gYSByZWFkIGZyb20gdGhlIGJ1ZmZlci5cbiAgLy9cbiAgLy8gMi4gSWYgdGhhdCByZXN1bHRpbmcgc3RhdGUgd2lsbCB0cmlnZ2VyIGEgX3JlYWQsIHRoZW4gY2FsbCBfcmVhZC5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IGJlIGFzeW5jaHJvbm91cywgb3Igc3luY2hyb25vdXMuICBZZXMsIGl0IGlzXG4gIC8vIGRlZXBseSB1Z2x5IHRvIHdyaXRlIEFQSXMgdGhpcyB3YXksIGJ1dCB0aGF0IHN0aWxsIGRvZXNuJ3QgbWVhblxuICAvLyB0aGF0IHRoZSBSZWFkYWJsZSBjbGFzcyBzaG91bGQgYmVoYXZlIGltcHJvcGVybHksIGFzIHN0cmVhbXMgYXJlXG4gIC8vIGRlc2lnbmVkIHRvIGJlIHN5bmMvYXN5bmMgYWdub3N0aWMuXG4gIC8vIFRha2Ugbm90ZSBpZiB0aGUgX3JlYWQgY2FsbCBpcyBzeW5jIG9yIGFzeW5jIChpZSwgaWYgdGhlIHJlYWQgY2FsbFxuICAvLyBoYXMgcmV0dXJuZWQgeWV0KSwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IGl0J3Mgc2FmZSB0byBlbWl0XG4gIC8vICdyZWFkYWJsZScgZXRjLlxuICAvL1xuICAvLyAzLiBBY3R1YWxseSBwdWxsIHRoZSByZXF1ZXN0ZWQgY2h1bmtzIG91dCBvZiB0aGUgYnVmZmVyIGFuZCByZXR1cm4uXG5cbiAgLy8gaWYgd2UgbmVlZCBhIHJlYWRhYmxlIGV2ZW50LCB0aGVuIHdlIG5lZWQgdG8gZG8gc29tZSByZWFkaW5nLlxuICB2YXIgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlO1xuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZCk7XG5cbiAgLy8gaWYgd2UgY3VycmVudGx5IGhhdmUgbGVzcyB0aGFuIHRoZSBoaWdoV2F0ZXJNYXJrLCB0aGVuIGFsc28gcmVhZCBzb21lXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlO1xuICAgIGRlYnVnKCdsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyaycsIGRvUmVhZCk7XG4gIH1cblxuICAvLyBob3dldmVyLCBpZiB3ZSd2ZSBlbmRlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50LCBhbmQgaWYgd2UncmUgYWxyZWFkeVxuICAvLyByZWFkaW5nLCB0aGVuIGl0J3MgdW5uZWNlc3NhcnkuXG4gIGlmIChzdGF0ZS5lbmRlZCB8fCBzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZG9SZWFkID0gZmFsc2U7XG4gICAgZGVidWcoJ3JlYWRpbmcgb3IgZW5kZWQnLCBkb1JlYWQpO1xuICB9XG5cbiAgaWYgKGRvUmVhZCkge1xuICAgIGRlYnVnKCdkbyByZWFkJyk7XG4gICAgc3RhdGUucmVhZGluZyA9IHRydWU7XG4gICAgc3RhdGUuc3luYyA9IHRydWU7XG4gICAgLy8gaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgemVybywgdGhlbiB3ZSAqbmVlZCogYSByZWFkYWJsZSBldmVudC5cbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKVxuICAgICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvLyBjYWxsIGludGVybmFsIHJlYWQgbWV0aG9kXG4gICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKTtcbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7XG4gIH1cblxuICAvLyBJZiBfcmVhZCBwdXNoZWQgZGF0YSBzeW5jaHJvbm91c2x5LCB0aGVuIGByZWFkaW5nYCB3aWxsIGJlIGZhbHNlLFxuICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gIGlmIChkb1JlYWQgJiYgIXN0YXRlLnJlYWRpbmcpXG4gICAgbiA9IGhvd011Y2hUb1JlYWQobk9yaWcsIHN0YXRlKTtcblxuICB2YXIgcmV0O1xuICBpZiAobiA+IDApXG4gICAgcmV0ID0gZnJvbUxpc3Qobiwgc3RhdGUpO1xuICBlbHNlXG4gICAgcmV0ID0gbnVsbDtcblxuICBpZiAocmV0ID09PSBudWxsKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBuID0gMDtcbiAgfVxuXG4gIHN0YXRlLmxlbmd0aCAtPSBuO1xuXG4gIC8vIElmIHdlIGhhdmUgbm90aGluZyBpbiB0aGUgYnVmZmVyLCB0aGVuIHdlIHdhbnQgdG8ga25vd1xuICAvLyBhcyBzb29uIGFzIHdlICpkbyogZ2V0IHNvbWV0aGluZyBpbnRvIHRoZSBidWZmZXIuXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLmVuZGVkKVxuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICBpZiAobk9yaWcgIT09IG4gJiYgc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoID09PSAwKVxuICAgIGVuZFJlYWRhYmxlKHRoaXMpO1xuXG4gIGlmIChyZXQgIT09IG51bGwpXG4gICAgdGhpcy5lbWl0KCdkYXRhJywgcmV0KTtcblxuICByZXR1cm4gcmV0O1xufTtcblxuZnVuY3Rpb24gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuaykge1xuICB2YXIgZXIgPSBudWxsO1xuICBpZiAoIShCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSAmJlxuICAgICAgdHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJlxuICAgICAgY2h1bmsgIT09IG51bGwgJiZcbiAgICAgIGNodW5rICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgcmV0dXJuIGVyO1xufVxuXG5cbmZ1bmN0aW9uIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUuZW5kZWQpIHJldHVybjtcbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuXG4gIC8vIGVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBpZiAoc3RhdGUuc3luYylcbiAgICAgIHByb2Nlc3NOZXh0VGljayhlbWl0UmVhZGFibGVfLCBzdHJlYW0pO1xuICAgIGVsc2VcbiAgICAgIGVtaXRSZWFkYWJsZV8oc3RyZWFtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGVfKHN0cmVhbSkge1xuICBkZWJ1ZygnZW1pdCByZWFkYWJsZScpO1xuICBzdHJlYW0uZW1pdCgncmVhZGFibGUnKTtcbiAgZmxvdyhzdHJlYW0pO1xufVxuXG5cbi8vIGF0IHRoaXMgcG9pbnQsIHRoZSB1c2VyIGhhcyBwcmVzdW1hYmx5IHNlZW4gdGhlICdyZWFkYWJsZScgZXZlbnQsXG4vLyBhbmQgY2FsbGVkIHJlYWQoKSB0byBjb25zdW1lIHNvbWUgZGF0YS4gIHRoYXQgbWF5IGhhdmUgdHJpZ2dlcmVkXG4vLyBpbiB0dXJuIGFub3RoZXIgX3JlYWQobikgY2FsbCwgaW4gd2hpY2ggY2FzZSByZWFkaW5nID0gdHJ1ZSBpZlxuLy8gaXQncyBpbiBwcm9ncmVzcy5cbi8vIEhvd2V2ZXIsIGlmIHdlJ3JlIG5vdCBlbmRlZCwgb3IgcmVhZGluZywgYW5kIHRoZSBsZW5ndGggPCBod20sXG4vLyB0aGVuIGdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIG1vcmUgcHJlZW1wdGl2ZWx5LlxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWU7XG4gICAgcHJvY2Vzc05leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gIHdoaWxlICghc3RhdGUucmVhZGluZyAmJiAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiZcbiAgICAgICAgIHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkZWJ1ZygnbWF5YmVSZWFkTW9yZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgICBpZiAobGVuID09PSBzdGF0ZS5sZW5ndGgpXG4gICAgICAvLyBkaWRuJ3QgZ2V0IGFueSBkYXRhLCBzdG9wIHNwaW5uaW5nLlxuICAgICAgYnJlYWs7XG4gICAgZWxzZVxuICAgICAgbGVuID0gc3RhdGUubGVuZ3RoO1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2U7XG59XG5cbi8vIGFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24obikge1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKGRlc3QsIHBpcGVPcHRzKSB7XG4gIHZhciBzcmMgPSB0aGlzO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuXG4gIHN3aXRjaCAoc3RhdGUucGlwZXNDb3VudCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHN0YXRlLnBpcGVzID0gZGVzdDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTpcbiAgICAgIHN0YXRlLnBpcGVzID0gW3N0YXRlLnBpcGVzLCBkZXN0XTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBzdGF0ZS5waXBlcy5wdXNoKGRlc3QpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgc3RhdGUucGlwZXNDb3VudCArPSAxO1xuICBkZWJ1ZygncGlwZSBjb3VudD0lZCBvcHRzPSVqJywgc3RhdGUucGlwZXNDb3VudCwgcGlwZU9wdHMpO1xuXG4gIHZhciBkb0VuZCA9ICghcGlwZU9wdHMgfHwgcGlwZU9wdHMuZW5kICE9PSBmYWxzZSkgJiZcbiAgICAgICAgICAgICAgZGVzdCAhPT0gcHJvY2Vzcy5zdGRvdXQgJiZcbiAgICAgICAgICAgICAgZGVzdCAhPT0gcHJvY2Vzcy5zdGRlcnI7XG5cbiAgdmFyIGVuZEZuID0gZG9FbmQgPyBvbmVuZCA6IGNsZWFudXA7XG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKVxuICAgIHByb2Nlc3NOZXh0VGljayhlbmRGbik7XG4gIGVsc2VcbiAgICBzcmMub25jZSgnZW5kJywgZW5kRm4pO1xuXG4gIGRlc3Qub24oJ3VucGlwZScsIG9udW5waXBlKTtcbiAgZnVuY3Rpb24gb251bnBpcGUocmVhZGFibGUpIHtcbiAgICBkZWJ1Zygnb251bnBpcGUnKTtcbiAgICBpZiAocmVhZGFibGUgPT09IHNyYykge1xuICAgICAgY2xlYW51cCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGRlYnVnKCdvbmVuZCcpO1xuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuICAvLyB3aGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAvLyBoYW5kbGVyIGluIGZsb3coKSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgcmVwZWF0ZWRseSBpc1xuICAvLyB0b28gc2xvdy5cbiAgdmFyIG9uZHJhaW4gPSBwaXBlT25EcmFpbihzcmMpO1xuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gIHZhciBjbGVhbmVkVXAgPSBmYWxzZTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZygnY2xlYW51cCcpO1xuICAgIC8vIGNsZWFudXAgZXZlbnQgaGFuZGxlcnMgb25jZSB0aGUgcGlwZSBpcyBicm9rZW5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigndW5waXBlJywgb251bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgY2xlYW51cCk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcblxuICAgIGNsZWFuZWRVcCA9IHRydWU7XG5cbiAgICAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluICYmXG4gICAgICAgICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpXG4gICAgICBvbmRyYWluKCk7XG4gIH1cblxuICBzcmMub24oJ2RhdGEnLCBvbmRhdGEpO1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgdmFyIHJldCA9IGRlc3Qud3JpdGUoY2h1bmspO1xuICAgIGlmIChmYWxzZSA9PT0gcmV0KSB7XG4gICAgICAvLyBJZiB0aGUgdXNlciB1bnBpcGVkIGR1cmluZyBgZGVzdC53cml0ZSgpYCwgaXQgaXMgcG9zc2libGVcbiAgICAgIC8vIHRvIGdldCBzdHVjayBpbiBhIHBlcm1hbmVudGx5IHBhdXNlZCBzdGF0ZSBpZiB0aGF0IHdyaXRlXG4gICAgICAvLyBhbHNvIHJldHVybmVkIGZhbHNlLlxuICAgICAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEgJiZcbiAgICAgICAgICBzdGF0ZS5waXBlc1swXSA9PT0gZGVzdCAmJlxuICAgICAgICAgIHNyYy5saXN0ZW5lckNvdW50KCdkYXRhJykgPT09IDEgJiZcbiAgICAgICAgICAhY2xlYW5lZFVwKSB7XG4gICAgICAgIGRlYnVnKCdmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UnLCBzcmMuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbik7XG4gICAgICAgIHNyYy5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKys7XG4gICAgICB9XG4gICAgICBzcmMucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgZGVzdCBoYXMgYW4gZXJyb3IsIHRoZW4gc3RvcCBwaXBpbmcgaW50byBpdC5cbiAgLy8gaG93ZXZlciwgZG9uJ3Qgc3VwcHJlc3MgdGhlIHRocm93aW5nIGJlaGF2aW9yIGZvciB0aGlzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgZGVidWcoJ29uZXJyb3InLCBlcik7XG4gICAgdW5waXBlKCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBpZiAoRUVsaXN0ZW5lckNvdW50KGRlc3QsICdlcnJvcicpID09PSAwKVxuICAgICAgZGVzdC5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfVxuICAvLyBUaGlzIGlzIGEgYnJ1dGFsbHkgdWdseSBoYWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBlcnJvciBoYW5kbGVyXG4gIC8vIGlzIGF0dGFjaGVkIGJlZm9yZSBhbnkgdXNlcmxhbmQgb25lcy4gIE5FVkVSIERPIFRISVMuXG4gIGlmICghZGVzdC5fZXZlbnRzIHx8ICFkZXN0Ll9ldmVudHMuZXJyb3IpXG4gICAgZGVzdC5vbignZXJyb3InLCBvbmVycm9yKTtcbiAgZWxzZSBpZiAoaXNBcnJheShkZXN0Ll9ldmVudHMuZXJyb3IpKVxuICAgIGRlc3QuX2V2ZW50cy5lcnJvci51bnNoaWZ0KG9uZXJyb3IpO1xuICBlbHNlXG4gICAgZGVzdC5fZXZlbnRzLmVycm9yID0gW29uZXJyb3IsIGRlc3QuX2V2ZW50cy5lcnJvcl07XG5cblxuICAvLyBCb3RoIGNsb3NlIGFuZCBmaW5pc2ggc2hvdWxkIHRyaWdnZXIgdW5waXBlLCBidXQgb25seSBvbmNlLlxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2Nsb3NlJywgb25jbG9zZSk7XG4gIGZ1bmN0aW9uIG9uZmluaXNoKCkge1xuICAgIGRlYnVnKCdvbmZpbmlzaCcpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG5cbiAgZnVuY3Rpb24gdW5waXBlKCkge1xuICAgIGRlYnVnKCd1bnBpcGUnKTtcbiAgICBzcmMudW5waXBlKGRlc3QpO1xuICB9XG5cbiAgLy8gdGVsbCB0aGUgZGVzdCB0aGF0IGl0J3MgYmVpbmcgcGlwZWQgdG9cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKTtcblxuICAvLyBzdGFydCB0aGUgZmxvdyBpZiBpdCBoYXNuJ3QgYmVlbiBzdGFydGVkIGFscmVhZHkuXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpO1xuICAgIHNyYy5yZXN1bWUoKTtcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufTtcblxuZnVuY3Rpb24gcGlwZU9uRHJhaW4oc3JjKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGU7XG4gICAgZGVidWcoJ3BpcGVPbkRyYWluJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4pXG4gICAgICBzdGF0ZS5hd2FpdERyYWluLS07XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gPT09IDAgJiYgRUVsaXN0ZW5lckNvdW50KHNyYywgJ2RhdGEnKSkge1xuICAgICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgICBmbG93KHNyYyk7XG4gICAgfVxuICB9O1xufVxuXG5cblJlYWRhYmxlLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbihkZXN0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgLy8gaWYgd2UncmUgbm90IHBpcGluZyBhbnl3aGVyZSwgdGhlbiBkbyBub3RoaW5nLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMClcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBqdXN0IG9uZSBkZXN0aW5hdGlvbi4gIG1vc3QgY29tbW9uIGNhc2UuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSB7XG4gICAgLy8gcGFzc2VkIGluIG9uZSwgYnV0IGl0J3Mgbm90IHRoZSByaWdodCBvbmUuXG4gICAgaWYgKGRlc3QgJiYgZGVzdCAhPT0gc3RhdGUucGlwZXMpXG4gICAgICByZXR1cm4gdGhpcztcblxuICAgIGlmICghZGVzdClcbiAgICAgIGRlc3QgPSBzdGF0ZS5waXBlcztcblxuICAgIC8vIGdvdCBhIG1hdGNoLlxuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgaWYgKGRlc3QpXG4gICAgICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gc2xvdyBjYXNlLiBtdWx0aXBsZSBwaXBlIGRlc3RpbmF0aW9ucy5cblxuICBpZiAoIWRlc3QpIHtcbiAgICAvLyByZW1vdmUgYWxsLlxuICAgIHZhciBkZXN0cyA9IHN0YXRlLnBpcGVzO1xuICAgIHZhciBsZW4gPSBzdGF0ZS5waXBlc0NvdW50O1xuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgZGVzdHNbaV0uZW1pdCgndW5waXBlJywgdGhpcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB0cnkgdG8gZmluZCB0aGUgcmlnaHQgb25lLlxuICB2YXIgaSA9IGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpO1xuICBpZiAoaSA9PT0gLTEpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgc3RhdGUucGlwZXMuc3BsaWNlKGksIDEpO1xuICBzdGF0ZS5waXBlc0NvdW50IC09IDE7XG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKVxuICAgIHN0YXRlLnBpcGVzID0gc3RhdGUucGlwZXNbMF07XG5cbiAgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIHNldCB1cCBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBhc2tlZCBmb3Jcbi8vIEVuc3VyZSByZWFkYWJsZSBsaXN0ZW5lcnMgZXZlbnR1YWxseSBnZXQgc29tZXRoaW5nXG5SZWFkYWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbihldiwgZm4pIHtcbiAgdmFyIHJlcyA9IFN0cmVhbS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCBldiwgZm4pO1xuXG4gIC8vIElmIGxpc3RlbmluZyB0byBkYXRhLCBhbmQgaXQgaGFzIG5vdCBleHBsaWNpdGx5IGJlZW4gcGF1c2VkLFxuICAvLyB0aGVuIGNhbGwgcmVzdW1lIHRvIHN0YXJ0IHRoZSBmbG93IG9mIGRhdGEgb24gdGhlIG5leHQgdGljay5cbiAgaWYgKGV2ID09PSAnZGF0YScgJiYgZmFsc2UgIT09IHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZykge1xuICAgIHRoaXMucmVzdW1lKCk7XG4gIH1cblxuICBpZiAoZXYgPT09ICdyZWFkYWJsZScgJiYgdGhpcy5yZWFkYWJsZSkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKCFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSB0cnVlO1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgICAgIHByb2Nlc3NOZXh0VGljayhuUmVhZGluZ05leHRUaWNrLCB0aGlzKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBSZWFkYWJsZS5wcm90b3R5cGUub247XG5cbmZ1bmN0aW9uIG5SZWFkaW5nTmV4dFRpY2soc2VsZikge1xuICBkZWJ1ZygncmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwJyk7XG4gIHNlbGYucmVhZCgwKTtcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lJyk7XG4gICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgcmVzdW1lKHRoaXMsIHN0YXRlKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIHJlc3VtZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVzdW1lU2NoZWR1bGVkKSB7XG4gICAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBwcm9jZXNzTmV4dFRpY2socmVzdW1lXywgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lXyhzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZykge1xuICAgIGRlYnVnKCdyZXN1bWUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gIH1cblxuICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpO1xuICBmbG93KHN0cmVhbSk7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKVxuICAgIHN0cmVhbS5yZWFkKDApO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbigpIHtcbiAgZGVidWcoJ2NhbGwgcGF1c2UgZmxvd2luZz0laicsIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyk7XG4gIGlmIChmYWxzZSAhPT0gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3BhdXNlJyk7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0KCdwYXVzZScpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gZmxvdyhzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZmxvdycsIHN0YXRlLmZsb3dpbmcpO1xuICBpZiAoc3RhdGUuZmxvd2luZykge1xuICAgIGRvIHtcbiAgICAgIHZhciBjaHVuayA9IHN0cmVhbS5yZWFkKCk7XG4gICAgfSB3aGlsZSAobnVsbCAhPT0gY2h1bmsgJiYgc3RhdGUuZmxvd2luZyk7XG4gIH1cbn1cblxuLy8gd3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHBhdXNlZCA9IGZhbHNlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBlbmQnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKVxuICAgICAgICBzZWxmLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIHNlbGYucHVzaChudWxsKTtcbiAgfSk7XG5cbiAgc3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24oY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpXG4gICAgICBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspO1xuXG4gICAgLy8gZG9uJ3Qgc2tpcCBvdmVyIGZhbHN5IHZhbHVlcyBpbiBvYmplY3RNb2RlXG4gICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgJiYgKGNodW5rID09PSBudWxsIHx8IGNodW5rID09PSB1bmRlZmluZWQpKVxuICAgICAgcmV0dXJuO1xuICAgIGVsc2UgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmICghY2h1bmsgfHwgIWNodW5rLmxlbmd0aCkpXG4gICAgICByZXR1cm47XG5cbiAgICB2YXIgcmV0ID0gc2VsZi5wdXNoKGNodW5rKTtcbiAgICBpZiAoIXJldCkge1xuICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcHJveHkgYWxsIHRoZSBvdGhlciBtZXRob2RzLlxuICAvLyBpbXBvcnRhbnQgd2hlbiB3cmFwcGluZyBmaWx0ZXJzIGFuZCBkdXBsZXhlcy5cbiAgZm9yICh2YXIgaSBpbiBzdHJlYW0pIHtcbiAgICBpZiAodGhpc1tpXSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzdHJlYW1baV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNbaV0gPSBmdW5jdGlvbihtZXRob2QpIHsgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3RyZWFtW21ldGhvZF0uYXBwbHkoc3RyZWFtLCBhcmd1bWVudHMpO1xuICAgICAgfTsgfShpKTtcbiAgICB9XG4gIH1cblxuICAvLyBwcm94eSBjZXJ0YWluIGltcG9ydGFudCBldmVudHMuXG4gIHZhciBldmVudHMgPSBbJ2Vycm9yJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knLCAncGF1c2UnLCAncmVzdW1lJ107XG4gIGZvckVhY2goZXZlbnRzLCBmdW5jdGlvbihldikge1xuICAgIHN0cmVhbS5vbihldiwgc2VsZi5lbWl0LmJpbmQoc2VsZiwgZXYpKTtcbiAgfSk7XG5cbiAgLy8gd2hlbiB3ZSB0cnkgdG8gY29uc3VtZSBzb21lIG1vcmUgYnl0ZXMsIHNpbXBseSB1bnBhdXNlIHRoZVxuICAvLyB1bmRlcmx5aW5nIHN0cmVhbS5cbiAgc2VsZi5fcmVhZCA9IGZ1bmN0aW9uKG4pIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBfcmVhZCcsIG4pO1xuICAgIGlmIChwYXVzZWQpIHtcbiAgICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgICAgc3RyZWFtLnJlc3VtZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gc2VsZjtcbn07XG5cblxuLy8gZXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuUmVhZGFibGUuX2Zyb21MaXN0ID0gZnJvbUxpc3Q7XG5cbi8vIFBsdWNrIG9mZiBuIGJ5dGVzIGZyb20gYW4gYXJyYXkgb2YgYnVmZmVycy5cbi8vIExlbmd0aCBpcyB0aGUgY29tYmluZWQgbGVuZ3RocyBvZiBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIGxpc3QuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICB2YXIgbGlzdCA9IHN0YXRlLmJ1ZmZlcjtcbiAgdmFyIGxlbmd0aCA9IHN0YXRlLmxlbmd0aDtcbiAgdmFyIHN0cmluZ01vZGUgPSAhIXN0YXRlLmRlY29kZXI7XG4gIHZhciBvYmplY3RNb2RlID0gISFzdGF0ZS5vYmplY3RNb2RlO1xuICB2YXIgcmV0O1xuXG4gIC8vIG5vdGhpbmcgaW4gdGhlIGxpc3QsIGRlZmluaXRlbHkgZW1wdHkuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gbnVsbDtcblxuICBpZiAobGVuZ3RoID09PSAwKVxuICAgIHJldCA9IG51bGw7XG4gIGVsc2UgaWYgKG9iamVjdE1vZGUpXG4gICAgcmV0ID0gbGlzdC5zaGlmdCgpO1xuICBlbHNlIGlmICghbiB8fCBuID49IGxlbmd0aCkge1xuICAgIC8vIHJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgYXJyYXkuXG4gICAgaWYgKHN0cmluZ01vZGUpXG4gICAgICByZXQgPSBsaXN0LmpvaW4oJycpO1xuICAgIGVsc2UgaWYgKGxpc3QubGVuZ3RoID09PSAxKVxuICAgICAgcmV0ID0gbGlzdFswXTtcbiAgICBlbHNlXG4gICAgICByZXQgPSBCdWZmZXIuY29uY2F0KGxpc3QsIGxlbmd0aCk7XG4gICAgbGlzdC5sZW5ndGggPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQganVzdCBzb21lIG9mIGl0LlxuICAgIGlmIChuIDwgbGlzdFswXS5sZW5ndGgpIHtcbiAgICAgIC8vIGp1c3QgdGFrZSBhIHBhcnQgb2YgdGhlIGZpcnN0IGxpc3QgaXRlbS5cbiAgICAgIC8vIHNsaWNlIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzLlxuICAgICAgdmFyIGJ1ZiA9IGxpc3RbMF07XG4gICAgICByZXQgPSBidWYuc2xpY2UoMCwgbik7XG4gICAgICBsaXN0WzBdID0gYnVmLnNsaWNlKG4pO1xuICAgIH0gZWxzZSBpZiAobiA9PT0gbGlzdFswXS5sZW5ndGgpIHtcbiAgICAgIC8vIGZpcnN0IGxpc3QgaXMgYSBwZXJmZWN0IG1hdGNoXG4gICAgICByZXQgPSBsaXN0LnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbXBsZXggY2FzZS5cbiAgICAgIC8vIHdlIGhhdmUgZW5vdWdoIHRvIGNvdmVyIGl0LCBidXQgaXQgc3BhbnMgcGFzdCB0aGUgZmlyc3QgYnVmZmVyLlxuICAgICAgaWYgKHN0cmluZ01vZGUpXG4gICAgICAgIHJldCA9ICcnO1xuICAgICAgZWxzZVxuICAgICAgICByZXQgPSBuZXcgQnVmZmVyKG4pO1xuXG4gICAgICB2YXIgYyA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbCAmJiBjIDwgbjsgaSsrKSB7XG4gICAgICAgIHZhciBidWYgPSBsaXN0WzBdO1xuICAgICAgICB2YXIgY3B5ID0gTWF0aC5taW4obiAtIGMsIGJ1Zi5sZW5ndGgpO1xuXG4gICAgICAgIGlmIChzdHJpbmdNb2RlKVxuICAgICAgICAgIHJldCArPSBidWYuc2xpY2UoMCwgY3B5KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGJ1Zi5jb3B5KHJldCwgYywgMCwgY3B5KTtcblxuICAgICAgICBpZiAoY3B5IDwgYnVmLmxlbmd0aClcbiAgICAgICAgICBsaXN0WzBdID0gYnVmLnNsaWNlKGNweSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG5cbiAgICAgICAgYyArPSBjcHk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcblxuICAvLyBJZiB3ZSBnZXQgaGVyZSBiZWZvcmUgY29uc3VtaW5nIGFsbCB0aGUgYnl0ZXMsIHRoZW4gdGhhdCBpcyBhXG4gIC8vIGJ1ZyBpbiBub2RlLiAgU2hvdWxkIG5ldmVyIGhhcHBlbi5cbiAgaWYgKHN0YXRlLmxlbmd0aCA+IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdlbmRSZWFkYWJsZSBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO1xuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICBwcm9jZXNzTmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBvbmUgbGFzdCB1bnNoaWZ0LlxuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgc3RhdGUuZW5kRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvckVhY2ggKHhzLCBmKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZih4c1tpXSwgaSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5kZXhPZiAoeHMsIHgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoeHNbaV0gPT09IHgpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn1cbiIsIi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcblxudmFyIER1cGxleCA9IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFRyYW5zZm9ybSwgRHVwbGV4KTtcblxuXG5mdW5jdGlvbiBUcmFuc2Zvcm1TdGF0ZShzdHJlYW0pIHtcbiAgdGhpcy5hZnRlclRyYW5zZm9ybSA9IGZ1bmN0aW9uKGVyLCBkYXRhKSB7XG4gICAgcmV0dXJuIGFmdGVyVHJhbnNmb3JtKHN0cmVhbSwgZXIsIGRhdGEpO1xuICB9O1xuXG4gIHRoaXMubmVlZFRyYW5zZm9ybSA9IGZhbHNlO1xuICB0aGlzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuICB0aGlzLndyaXRlY2h1bmsgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybShzdHJlYW0sIGVyLCBkYXRhKSB7XG4gIHZhciB0cyA9IHN0cmVhbS5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuXG4gIHZhciBjYiA9IHRzLndyaXRlY2I7XG5cbiAgaWYgKCFjYilcbiAgICByZXR1cm4gc3RyZWFtLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdubyB3cml0ZWNiIGluIFRyYW5zZm9ybSBjbGFzcycpKTtcblxuICB0cy53cml0ZWNodW5rID0gbnVsbDtcbiAgdHMud3JpdGVjYiA9IG51bGw7XG5cbiAgaWYgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkKVxuICAgIHN0cmVhbS5wdXNoKGRhdGEpO1xuXG4gIGlmIChjYilcbiAgICBjYihlcik7XG5cbiAgdmFyIHJzID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBycy5yZWFkaW5nID0gZmFsc2U7XG4gIGlmIChycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykge1xuICAgIHN0cmVhbS5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIFRyYW5zZm9ybShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUcmFuc2Zvcm0pKVxuICAgIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuXG4gIER1cGxleC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlID0gbmV3IFRyYW5zZm9ybVN0YXRlKHRoaXMpO1xuXG4gIC8vIHdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgdmFyIHN0cmVhbSA9IHRoaXM7XG5cbiAgLy8gc3RhcnQgb3V0IGFza2luZyBmb3IgYSByZWFkYWJsZSBldmVudCBvbmNlIGRhdGEgaXMgdHJhbnNmb3JtZWQuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyB3ZSBoYXZlIGltcGxlbWVudGVkIHRoZSBfcmVhZCBtZXRob2QsIGFuZCBkb25lIHRoZSBvdGhlciB0aGluZ3NcbiAgLy8gdGhhdCBSZWFkYWJsZSB3YW50cyBiZWZvcmUgdGhlIGZpcnN0IF9yZWFkIGNhbGwsIHNvIHVuc2V0IHRoZVxuICAvLyBzeW5jIGd1YXJkIGZsYWcuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIHRoaXMuX3RyYW5zZm9ybSA9IG9wdGlvbnMudHJhbnNmb3JtO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZsdXNoID09PSAnZnVuY3Rpb24nKVxuICAgICAgdGhpcy5fZmx1c2ggPSBvcHRpb25zLmZsdXNoO1xuICB9XG5cbiAgdGhpcy5vbmNlKCdwcmVmaW5pc2gnLCBmdW5jdGlvbigpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX2ZsdXNoID09PSAnZnVuY3Rpb24nKVxuICAgICAgdGhpcy5fZmx1c2goZnVuY3Rpb24oZXIpIHtcbiAgICAgICAgZG9uZShzdHJlYW0sIGVyKTtcbiAgICAgIH0pO1xuICAgIGVsc2VcbiAgICAgIGRvbmUoc3RyZWFtKTtcbiAgfSk7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZykge1xuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtID0gZmFsc2U7XG4gIHJldHVybiBEdXBsZXgucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBjaHVuaywgZW5jb2RpbmcpO1xufTtcblxuLy8gVGhpcyBpcyB0aGUgcGFydCB3aGVyZSB5b3UgZG8gc3R1ZmYhXG4vLyBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGluIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyAnY2h1bmsnIGlzIGFuIGlucHV0IGNodW5rLlxuLy9cbi8vIENhbGwgYHB1c2gobmV3Q2h1bmspYCB0byBwYXNzIGFsb25nIHRyYW5zZm9ybWVkIG91dHB1dFxuLy8gdG8gdGhlIHJlYWRhYmxlIHNpZGUuICBZb3UgbWF5IGNhbGwgJ3B1c2gnIHplcm8gb3IgbW9yZSB0aW1lcy5cbi8vXG4vLyBDYWxsIGBjYihlcnIpYCB3aGVuIHlvdSBhcmUgZG9uZSB3aXRoIHRoaXMgY2h1bmsuICBJZiB5b3UgcGFzc1xuLy8gYW4gZXJyb3IsIHRoZW4gdGhhdCdsbCBwdXQgdGhlIGh1cnQgb24gdGhlIHdob2xlIG9wZXJhdGlvbi4gIElmIHlvdVxuLy8gbmV2ZXIgY2FsbCBjYigpLCB0aGVuIHlvdSdsbCBuZXZlciBnZXQgYW5vdGhlciBjaHVuay5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMud3JpdGVjYiA9IGNiO1xuICB0cy53cml0ZWNodW5rID0gY2h1bms7XG4gIHRzLndyaXRlZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgaWYgKCF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICh0cy5uZWVkVHJhbnNmb3JtIHx8XG4gICAgICAgIHJzLm5lZWRSZWFkYWJsZSB8fFxuICAgICAgICBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKVxuICAgICAgdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufTtcblxuLy8gRG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgYXJncyBhcmUgaGVyZS5cbi8vIF90cmFuc2Zvcm0gZG9lcyBhbGwgdGhlIHdvcmsuXG4vLyBUaGF0IHdlIGdvdCBoZXJlIG1lYW5zIHRoYXQgdGhlIHJlYWRhYmxlIHNpZGUgd2FudHMgbW9yZSBkYXRhLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uKG4pIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG5cbiAgaWYgKHRzLndyaXRlY2h1bmsgIT09IG51bGwgJiYgdHMud3JpdGVjYiAmJiAhdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdHMudHJhbnNmb3JtaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl90cmFuc2Zvcm0odHMud3JpdGVjaHVuaywgdHMud3JpdGVlbmNvZGluZywgdHMuYWZ0ZXJUcmFuc2Zvcm0pO1xuICB9IGVsc2Uge1xuICAgIC8vIG1hcmsgdGhhdCB3ZSBuZWVkIGEgdHJhbnNmb3JtLCBzbyB0aGF0IGFueSBkYXRhIHRoYXQgY29tZXMgaW5cbiAgICAvLyB3aWxsIGdldCBwcm9jZXNzZWQsIG5vdyB0aGF0IHdlJ3ZlIGFza2VkIGZvciBpdC5cbiAgICB0cy5uZWVkVHJhbnNmb3JtID0gdHJ1ZTtcbiAgfVxufTtcblxuXG5mdW5jdGlvbiBkb25lKHN0cmVhbSwgZXIpIHtcbiAgaWYgKGVyKVxuICAgIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG5cbiAgLy8gaWYgdGhlcmUncyBub3RoaW5nIGluIHRoZSB3cml0ZSBidWZmZXIsIHRoZW4gdGhhdCBtZWFuc1xuICAvLyB0aGF0IG5vdGhpbmcgbW9yZSB3aWxsIGV2ZXIgYmUgcHJvdmlkZWRcbiAgdmFyIHdzID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICB2YXIgdHMgPSBzdHJlYW0uX3RyYW5zZm9ybVN0YXRlO1xuXG4gIGlmICh3cy5sZW5ndGgpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdjYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAnKTtcblxuICBpZiAodHMudHJhbnNmb3JtaW5nKVxuICAgIHRocm93IG5ldyBFcnJvcignY2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZycpO1xuXG4gIHJldHVybiBzdHJlYW0ucHVzaChudWxsKTtcbn1cbiIsIi8vIEEgYml0IHNpbXBsZXIgdGhhbiByZWFkYWJsZSBzdHJlYW1zLlxuLy8gSW1wbGVtZW50IGFuIGFzeW5jIC5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYiksIGFuZCBpdCdsbCBoYW5kbGUgYWxsXG4vLyB0aGUgZHJhaW4gZXZlbnQgZW1pc3Npb24gYW5kIGJ1ZmZlcmluZy5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyaXRhYmxlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHByb2Nlc3NOZXh0VGljayA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5Xcml0YWJsZS5Xcml0YWJsZVN0YXRlID0gV3JpdGFibGVTdGF0ZTtcblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpbnRlcm5hbFV0aWwgPSB7XG4gIGRlcHJlY2F0ZTogcmVxdWlyZSgndXRpbC1kZXByZWNhdGUnKVxufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW07XG4oZnVuY3Rpb24gKCl7dHJ5e1xuICBTdHJlYW0gPSByZXF1aXJlKCdzdCcgKyAncmVhbScpO1xufWNhdGNoKF8pe31maW5hbGx5e1xuICBpZiAoIVN0cmVhbSlcbiAgICBTdHJlYW0gPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG59fSgpKVxuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbnV0aWwuaW5oZXJpdHMoV3JpdGFibGUsIFN0cmVhbSk7XG5cbmZ1bmN0aW9uIG5vcCgpIHt9XG5cbmZ1bmN0aW9uIFdyaXRlUmVxKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhpcy5jaHVuayA9IGNodW5rO1xuICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHRoaXMuY2FsbGJhY2sgPSBjYjtcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbn1cblxudmFyIER1cGxleDtcbmZ1bmN0aW9uIFdyaXRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyZWFtXG4gIC8vIGNvbnRhaW5zIGJ1ZmZlcnMgb3Igb2JqZWN0cy5cbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleClcbiAgICB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggd3JpdGUoKSBzdGFydHMgcmV0dXJuaW5nIGZhbHNlXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgdGhhdCB3ZSBhbHdheXMgcmV0dXJuIGZhbHNlIGlmXG4gIC8vIHRoZSBlbnRpcmUgYnVmZmVyIGlzIG5vdCBmbHVzaGVkIGltbWVkaWF0ZWx5IG9uIHdyaXRlKClcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIGRlZmF1bHRId20gPSB0aGlzLm9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDtcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gKGh3bSB8fCBod20gPT09IDApID8gaHdtIDogZGVmYXVsdEh3bTtcblxuICAvLyBjYXN0IHRvIGludHMuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IH5+dGhpcy5oaWdoV2F0ZXJNYXJrO1xuXG4gIHRoaXMubmVlZERyYWluID0gZmFsc2U7XG4gIC8vIGF0IHRoZSBzdGFydCBvZiBjYWxsaW5nIGVuZCgpXG4gIHRoaXMuZW5kaW5nID0gZmFsc2U7XG4gIC8vIHdoZW4gZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgcmV0dXJuZWRcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICAvLyB3aGVuICdmaW5pc2gnIGlzIGVtaXR0ZWRcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIHNob3VsZCB3ZSBkZWNvZGUgc3RyaW5ncyBpbnRvIGJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdG8gX3dyaXRlP1xuICAvLyB0aGlzIGlzIGhlcmUgc28gdGhhdCBzb21lIG5vZGUtY29yZSBzdHJlYW1zIGNhbiBvcHRpbWl6ZSBzdHJpbmdcbiAgLy8gaGFuZGxpbmcgYXQgYSBsb3dlciBsZXZlbC5cbiAgdmFyIG5vRGVjb2RlID0gb3B0aW9ucy5kZWNvZGVTdHJpbmdzID09PSBmYWxzZTtcbiAgdGhpcy5kZWNvZGVTdHJpbmdzID0gIW5vRGVjb2RlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIG5vdCBhbiBhY3R1YWwgYnVmZmVyIHdlIGtlZXAgdHJhY2sgb2YsIGJ1dCBhIG1lYXN1cmVtZW50XG4gIC8vIG9mIGhvdyBtdWNoIHdlJ3JlIHdhaXRpbmcgdG8gZ2V0IHB1c2hlZCB0byBzb21lIHVuZGVybHlpbmdcbiAgLy8gc29ja2V0IG9yIGZpbGUuXG4gIHRoaXMubGVuZ3RoID0gMDtcblxuICAvLyBhIGZsYWcgdG8gc2VlIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdyaXRlLlxuICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcblxuICAvLyB3aGVuIHRydWUgYWxsIHdyaXRlcyB3aWxsIGJlIGJ1ZmZlcmVkIHVudGlsIC51bmNvcmsoKSBjYWxsXG4gIHRoaXMuY29ya2VkID0gMDtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyBhIGZsYWcgdG8ga25vdyBpZiB3ZSdyZSBwcm9jZXNzaW5nIHByZXZpb3VzbHkgYnVmZmVyZWQgaXRlbXMsIHdoaWNoXG4gIC8vIG1heSBjYWxsIHRoZSBfd3JpdGUoKSBjYWxsYmFjayBpbiB0aGUgc2FtZSB0aWNrLCBzbyB0aGF0IHdlIGRvbid0XG4gIC8vIGVuZCB1cCBpbiBhbiBvdmVybGFwcGVkIG9ud3JpdGUgc2l0dWF0aW9uLlxuICB0aGlzLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCdzIHBhc3NlZCB0byBfd3JpdGUoY2h1bmssY2IpXG4gIHRoaXMub253cml0ZSA9IGZ1bmN0aW9uKGVyKSB7XG4gICAgb253cml0ZShzdHJlYW0sIGVyKTtcbiAgfTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCB0aGUgdXNlciBzdXBwbGllcyB0byB3cml0ZShjaHVuayxlbmNvZGluZyxjYilcbiAgdGhpcy53cml0ZWNiID0gbnVsbDtcblxuICAvLyB0aGUgYW1vdW50IHRoYXQgaXMgYmVpbmcgd3JpdHRlbiB3aGVuIF93cml0ZSBpcyBjYWxsZWQuXG4gIHRoaXMud3JpdGVsZW4gPSAwO1xuXG4gIHRoaXMuYnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcblxuICAvLyBudW1iZXIgb2YgcGVuZGluZyB1c2VyLXN1cHBsaWVkIHdyaXRlIGNhbGxiYWNrc1xuICAvLyB0aGlzIG11c3QgYmUgMCBiZWZvcmUgJ2ZpbmlzaCcgY2FuIGJlIGVtaXR0ZWRcbiAgdGhpcy5wZW5kaW5nY2IgPSAwO1xuXG4gIC8vIGVtaXQgcHJlZmluaXNoIGlmIHRoZSBvbmx5IHRoaW5nIHdlJ3JlIHdhaXRpbmcgZm9yIGlzIF93cml0ZSBjYnNcbiAgLy8gVGhpcyBpcyByZWxldmFudCBmb3Igc3luY2hyb25vdXMgVHJhbnNmb3JtIHN0cmVhbXNcbiAgdGhpcy5wcmVmaW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIFRydWUgaWYgdGhlIGVycm9yIHdhcyBhbHJlYWR5IGVtaXR0ZWQgYW5kIHNob3VsZCBub3QgYmUgdGhyb3duIGFnYWluXG4gIHRoaXMuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG59XG5cbldyaXRhYmxlU3RhdGUucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uIHdyaXRhYmxlU3RhdGVHZXRCdWZmZXIoKSB7XG4gIHZhciBjdXJyZW50ID0gdGhpcy5idWZmZXJlZFJlcXVlc3Q7XG4gIHZhciBvdXQgPSBbXTtcbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICBvdXQucHVzaChjdXJyZW50KTtcbiAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICB9XG4gIHJldHVybiBvdXQ7XG59O1xuXG4oZnVuY3Rpb24gKCl7dHJ5IHtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0YXRlLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcbiAgZ2V0OiBpbnRlcm5hbFV0aWwuZGVwcmVjYXRlKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJ1ZmZlcigpO1xuICB9LCAnX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgJyArXG4gICAgICdpbnN0ZWFkLicpXG59KTtcbn1jYXRjaChfKXt9fSgpKTtcblxuXG52YXIgRHVwbGV4O1xuZnVuY3Rpb24gV3JpdGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIC8vIFdyaXRhYmxlIGN0b3IgaXMgYXBwbGllZCB0byBEdXBsZXhlcywgdGhvdWdoIHRoZXkncmUgbm90XG4gIC8vIGluc3RhbmNlb2YgV3JpdGFibGUsIHRoZXkncmUgaW5zdGFuY2VvZiBSZWFkYWJsZS5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFdyaXRhYmxlKSAmJiAhKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKVxuICAgIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucyk7XG5cbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeS5cbiAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGUgPT09ICdmdW5jdGlvbicpXG4gICAgICB0aGlzLl93cml0ZSA9IG9wdGlvbnMud3JpdGU7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGV2ID09PSAnZnVuY3Rpb24nKVxuICAgICAgdGhpcy5fd3JpdGV2ID0gb3B0aW9ucy53cml0ZXY7XG4gIH1cblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuLy8gT3RoZXJ3aXNlIHBlb3BsZSBjYW4gcGlwZSBXcml0YWJsZSBzdHJlYW1zLCB3aGljaCBpcyBqdXN0IHdyb25nLlxuV3JpdGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignQ2Fubm90IHBpcGUuIE5vdCByZWFkYWJsZS4nKSk7XG59O1xuXG5cbmZ1bmN0aW9uIHdyaXRlQWZ0ZXJFbmQoc3RyZWFtLCBjYikge1xuICB2YXIgZXIgPSBuZXcgRXJyb3IoJ3dyaXRlIGFmdGVyIGVuZCcpO1xuICAvLyBUT0RPOiBkZWZlciBlcnJvciBldmVudHMgY29uc2lzdGVudGx5IGV2ZXJ5d2hlcmUsIG5vdCBqdXN0IHRoZSBjYlxuICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIHByb2Nlc3NOZXh0VGljayhjYiwgZXIpO1xufVxuXG4vLyBJZiB3ZSBnZXQgc29tZXRoaW5nIHRoYXQgaXMgbm90IGEgYnVmZmVyLCBzdHJpbmcsIG51bGwsIG9yIHVuZGVmaW5lZCxcbi8vIGFuZCB3ZSdyZSBub3QgaW4gb2JqZWN0TW9kZSwgdGhlbiB0aGF0J3MgYW4gZXJyb3IuXG4vLyBPdGhlcndpc2Ugc3RyZWFtIGNodW5rcyBhcmUgYWxsIGNvbnNpZGVyZWQgdG8gYmUgb2YgbGVuZ3RoPTEsIGFuZCB0aGVcbi8vIHdhdGVybWFya3MgZGV0ZXJtaW5lIGhvdyBtYW55IG9iamVjdHMgdG8ga2VlcCBpbiB0aGUgYnVmZmVyLCByYXRoZXIgdGhhblxuLy8gaG93IG1hbnkgYnl0ZXMgb3IgY2hhcmFjdGVycy5cbmZ1bmN0aW9uIHZhbGlkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGNiKSB7XG4gIHZhciB2YWxpZCA9IHRydWU7XG5cbiAgaWYgKCEoQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkgJiZcbiAgICAgIHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiZcbiAgICAgIGNodW5rICE9PSBudWxsICYmXG4gICAgICBjaHVuayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAhc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIHZhciBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gICAgcHJvY2Vzc05leHRUaWNrKGNiLCBlcik7XG4gICAgdmFsaWQgPSBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsaWQ7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHJldCA9IGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmspKVxuICAgIGVuY29kaW5nID0gJ2J1ZmZlcic7XG4gIGVsc2UgaWYgKCFlbmNvZGluZylcbiAgICBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcblxuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKVxuICAgIGNiID0gbm9wO1xuXG4gIGlmIChzdGF0ZS5lbmRlZClcbiAgICB3cml0ZUFmdGVyRW5kKHRoaXMsIGNiKTtcbiAgZWxzZSBpZiAodmFsaWRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGNiKSkge1xuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHJldCA9IHdyaXRlT3JCdWZmZXIodGhpcywgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5jb3JrID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgc3RhdGUuY29ya2VkKys7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUudW5jb3JrID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZC0tO1xuXG4gICAgaWYgKCFzdGF0ZS53cml0aW5nICYmXG4gICAgICAgICFzdGF0ZS5jb3JrZWQgJiZcbiAgICAgICAgIXN0YXRlLmZpbmlzaGVkICYmXG4gICAgICAgICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmXG4gICAgICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdClcbiAgICAgIGNsZWFyQnVmZmVyKHRoaXMsIHN0YXRlKTtcbiAgfVxufTtcblxuV3JpdGFibGUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZyA9IGZ1bmN0aW9uIHNldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZykge1xuICAvLyBub2RlOjpQYXJzZUVuY29kaW5nKCkgcmVxdWlyZXMgbG93ZXIgY2FzZS5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpXG4gICAgZW5jb2RpbmcgPSBlbmNvZGluZy50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIShbJ2hleCcsICd1dGY4JywgJ3V0Zi04JywgJ2FzY2lpJywgJ2JpbmFyeScsICdiYXNlNjQnLFxuJ3VjczInLCAndWNzLTInLCd1dGYxNmxlJywgJ3V0Zi0xNmxlJywgJ3JhdyddXG4uaW5kZXhPZigoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKSkgPiAtMSkpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKTtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2RpbmcgPSBlbmNvZGluZztcbn07XG5cbmZ1bmN0aW9uIGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpIHtcbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmXG4gICAgICBzdGF0ZS5kZWNvZGVTdHJpbmdzICE9PSBmYWxzZSAmJlxuICAgICAgdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgIGNodW5rID0gbmV3IEJ1ZmZlcihjaHVuaywgZW5jb2RpbmcpO1xuICB9XG4gIHJldHVybiBjaHVuaztcbn1cblxuLy8gaWYgd2UncmUgYWxyZWFkeSB3cml0aW5nIHNvbWV0aGluZywgdGhlbiBqdXN0IHB1dCB0aGlzXG4vLyBpbiB0aGUgcXVldWUsIGFuZCB3YWl0IG91ciB0dXJuLiAgT3RoZXJ3aXNlLCBjYWxsIF93cml0ZVxuLy8gSWYgd2UgcmV0dXJuIGZhbHNlLCB0aGVuIHdlIG5lZWQgYSBkcmFpbiBldmVudCwgc28gc2V0IHRoYXQgZmxhZy5cbmZ1bmN0aW9uIHdyaXRlT3JCdWZmZXIoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjaHVuayA9IGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpO1xuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmspKVxuICAgIGVuY29kaW5nID0gJ2J1ZmZlcic7XG4gIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcblxuICBzdGF0ZS5sZW5ndGggKz0gbGVuO1xuXG4gIHZhciByZXQgPSBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICAvLyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHByZXZpb3VzIG5lZWREcmFpbiB3aWxsIG5vdCBiZSByZXNldCB0byBmYWxzZS5cbiAgaWYgKCFyZXQpXG4gICAgc3RhdGUubmVlZERyYWluID0gdHJ1ZTtcblxuICBpZiAoc3RhdGUud3JpdGluZyB8fCBzdGF0ZS5jb3JrZWQpIHtcbiAgICB2YXIgbGFzdCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG5ldyBXcml0ZVJlcShjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICBpZiAobGFzdCkge1xuICAgICAgbGFzdC5uZXh0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW47XG4gIHN0YXRlLndyaXRlY2IgPSBjYjtcbiAgc3RhdGUud3JpdGluZyA9IHRydWU7XG4gIHN0YXRlLnN5bmMgPSB0cnVlO1xuICBpZiAod3JpdGV2KVxuICAgIHN0cmVhbS5fd3JpdGV2KGNodW5rLCBzdGF0ZS5vbndyaXRlKTtcbiAgZWxzZVxuICAgIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKTtcbiAgc3RhdGUuc3luYyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKSB7XG4gIC0tc3RhdGUucGVuZGluZ2NiO1xuICBpZiAoc3luYylcbiAgICBwcm9jZXNzTmV4dFRpY2soY2IsIGVyKTtcbiAgZWxzZVxuICAgIGNiKGVyKTtcblxuICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpIHtcbiAgc3RhdGUud3JpdGluZyA9IGZhbHNlO1xuICBzdGF0ZS53cml0ZWNiID0gbnVsbDtcbiAgc3RhdGUubGVuZ3RoIC09IHN0YXRlLndyaXRlbGVuO1xuICBzdGF0ZS53cml0ZWxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGUoc3RyZWFtLCBlcikge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIHZhciBzeW5jID0gc3RhdGUuc3luYztcbiAgdmFyIGNiID0gc3RhdGUud3JpdGVjYjtcblxuICBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpO1xuXG4gIGlmIChlcilcbiAgICBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKTtcbiAgZWxzZSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgYWN0dWFsbHkgcmVhZHkgdG8gZmluaXNoLCBidXQgZG9uJ3QgZW1pdCB5ZXRcbiAgICB2YXIgZmluaXNoZWQgPSBuZWVkRmluaXNoKHN0YXRlKTtcblxuICAgIGlmICghZmluaXNoZWQgJiZcbiAgICAgICAgIXN0YXRlLmNvcmtlZCAmJlxuICAgICAgICAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJlxuICAgICAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QpIHtcbiAgICAgIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzeW5jKSB7XG4gICAgICBwcm9jZXNzTmV4dFRpY2soYWZ0ZXJXcml0ZSwgc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYikge1xuICBpZiAoIWZpbmlzaGVkKVxuICAgIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKTtcbiAgc3RhdGUucGVuZGluZ2NiLS07XG4gIGNiKCk7XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xufVxuXG4vLyBNdXN0IGZvcmNlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBvbiBuZXh0VGljaywgc28gdGhhdCB3ZSBkb24ndFxuLy8gZW1pdCAnZHJhaW4nIGJlZm9yZSB0aGUgd3JpdGUoKSBjb25zdW1lciBnZXRzIHRoZSAnZmFsc2UnIHJldHVyblxuLy8gdmFsdWUsIGFuZCBoYXMgYSBjaGFuY2UgdG8gYXR0YWNoIGEgJ2RyYWluJyBsaXN0ZW5lci5cbmZ1bmN0aW9uIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUubmVlZERyYWluKSB7XG4gICAgc3RhdGUubmVlZERyYWluID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2RyYWluJyk7XG4gIH1cbn1cblxuXG4vLyBpZiB0aGVyZSdzIHNvbWV0aGluZyBpbiB0aGUgYnVmZmVyIHdhaXRpbmcsIHRoZW4gcHJvY2VzcyBpdFxuZnVuY3Rpb24gY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSkge1xuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgdmFyIGVudHJ5ID0gc3RhdGUuYnVmZmVyZWRSZXF1ZXN0O1xuXG4gIGlmIChzdHJlYW0uX3dyaXRldiAmJiBlbnRyeSAmJiBlbnRyeS5uZXh0KSB7XG4gICAgLy8gRmFzdCBjYXNlLCB3cml0ZSBldmVyeXRoaW5nIHVzaW5nIF93cml0ZXYoKVxuICAgIHZhciBidWZmZXIgPSBbXTtcbiAgICB2YXIgY2JzID0gW107XG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICBjYnMucHVzaChlbnRyeS5jYWxsYmFjayk7XG4gICAgICBidWZmZXIucHVzaChlbnRyeSk7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgfVxuXG4gICAgLy8gY291bnQgdGhlIG9uZSB3ZSBhcmUgYWRkaW5nLCBhcyB3ZWxsLlxuICAgIC8vIFRPRE8oaXNhYWNzKSBjbGVhbiB0aGlzIHVwXG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB0cnVlLCBzdGF0ZS5sZW5ndGgsIGJ1ZmZlciwgJycsIGZ1bmN0aW9uKGVycikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc3RhdGUucGVuZGluZ2NiLS07XG4gICAgICAgIGNic1tpXShlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgYnVmZmVyXG4gIH0gZWxzZSB7XG4gICAgLy8gU2xvdyBjYXNlLCB3cml0ZSBjaHVua3Mgb25lLWJ5LW9uZVxuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgdmFyIGNodW5rID0gZW50cnkuY2h1bms7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBlbnRyeS5lbmNvZGluZztcbiAgICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuXG4gICAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgLy8gaWYgd2UgZGlkbid0IGNhbGwgdGhlIG9ud3JpdGUgaW1tZWRpYXRlbHksIHRoZW5cbiAgICAgIC8vIGl0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0IGRvZXMuXG4gICAgICAvLyBhbHNvLCB0aGF0IG1lYW5zIHRoYXQgdGhlIGNodW5rIGFuZCBjYiBhcmUgY3VycmVudGx5XG4gICAgICAvLyBiZWluZyBwcm9jZXNzZWQsIHNvIG1vdmUgdGhlIGJ1ZmZlciBjb3VudGVyIHBhc3QgdGhlbS5cbiAgICAgIGlmIChzdGF0ZS53cml0aW5nKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbnRyeSA9PT0gbnVsbClcbiAgICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB9XG4gIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9IGVudHJ5O1xuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgPSBudWxsO1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmICh0eXBlb2YgY2h1bmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGNodW5rO1xuICAgIGNodW5rID0gbnVsbDtcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoY2h1bmsgIT09IG51bGwgJiYgY2h1bmsgIT09IHVuZGVmaW5lZClcbiAgICB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7XG5cbiAgLy8gLmVuZCgpIGZ1bGx5IHVuY29ya3NcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZCA9IDE7XG4gICAgdGhpcy51bmNvcmsoKTtcbiAgfVxuXG4gIC8vIGlnbm9yZSB1bm5lY2Vzc2FyeSBlbmQoKSBjYWxscy5cbiAgaWYgKCFzdGF0ZS5lbmRpbmcgJiYgIXN0YXRlLmZpbmlzaGVkKVxuICAgIGVuZFdyaXRhYmxlKHRoaXMsIHN0YXRlLCBjYik7XG59O1xuXG5cbmZ1bmN0aW9uIG5lZWRGaW5pc2goc3RhdGUpIHtcbiAgcmV0dXJuIChzdGF0ZS5lbmRpbmcgJiZcbiAgICAgICAgICBzdGF0ZS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPT09IG51bGwgJiZcbiAgICAgICAgICAhc3RhdGUuZmluaXNoZWQgJiZcbiAgICAgICAgICAhc3RhdGUud3JpdGluZyk7XG59XG5cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQpIHtcbiAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIG5lZWQgPSBuZWVkRmluaXNoKHN0YXRlKTtcbiAgaWYgKG5lZWQpIHtcbiAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwKSB7XG4gICAgICBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSk7XG4gICAgICBzdGF0ZS5maW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgnZmluaXNoJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5lZWQ7XG59XG5cbmZ1bmN0aW9uIGVuZFdyaXRhYmxlKHN0cmVhbSwgc3RhdGUsIGNiKSB7XG4gIHN0YXRlLmVuZGluZyA9IHRydWU7XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICBpZiAoY2IpIHtcbiAgICBpZiAoc3RhdGUuZmluaXNoZWQpXG4gICAgICBwcm9jZXNzTmV4dFRpY2soY2IpO1xuICAgIGVsc2VcbiAgICAgIHN0cmVhbS5vbmNlKCdmaW5pc2gnLCBjYik7XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qc1wiKVxuIiwidmFyIFN0cmVhbSA9IChmdW5jdGlvbiAoKXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVxdWlyZSgnc3QnICsgJ3JlYW0nKTsgLy8gaGFjayB0byBmaXggYSBjaXJjdWxhciBkZXBlbmRlbmN5IGlzc3VlIHdoZW4gdXNlZCB3aXRoIGJyb3dzZXJpZnlcbiAgfSBjYXRjaChfKXt9XG59KCkpO1xuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcycpO1xuZXhwb3J0cy5TdHJlYW0gPSBTdHJlYW0gfHwgZXhwb3J0cztcbmV4cG9ydHMuUmVhZGFibGUgPSBleHBvcnRzO1xuZXhwb3J0cy5Xcml0YWJsZSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fd3JpdGFibGUuanMnKTtcbmV4cG9ydHMuRHVwbGV4ID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9kdXBsZXguanMnKTtcbmV4cG9ydHMuVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMnKTtcbmV4cG9ydHMuUGFzc1Rocm91Z2ggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qc1wiKVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9saWIvX3N0cmVhbV93cml0YWJsZS5qc1wiKVxuIiwiLypcbkNyeXB0b0pTIHYzLjEuMlxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXG4oYykgMjAwOS0yMDEzIGJ5IEplZmYgTW90dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcbiovXG4vKiogQHByZXNlcnZlXG4oYykgMjAxMiBieSBDw6lkcmljIE1lc25pbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cbi8vIGNvbnN0YW50cyB0YWJsZVxudmFyIHpsID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dXG5cbnZhciB6ciA9IFtcbiAgNSwgMTQsIDcsIDAsIDksIDIsIDExLCA0LCAxMywgNiwgMTUsIDgsIDEsIDEwLCAzLCAxMixcbiAgNiwgMTEsIDMsIDcsIDAsIDEzLCA1LCAxMCwgMTQsIDE1LCA4LCAxMiwgNCwgOSwgMSwgMixcbiAgMTUsIDUsIDEsIDMsIDcsIDE0LCA2LCA5LCAxMSwgOCwgMTIsIDIsIDEwLCAwLCA0LCAxMyxcbiAgOCwgNiwgNCwgMSwgMywgMTEsIDE1LCAwLCA1LCAxMiwgMiwgMTMsIDksIDcsIDEwLCAxNCxcbiAgMTIsIDE1LCAxMCwgNCwgMSwgNSwgOCwgNywgNiwgMiwgMTMsIDE0LCAwLCAzLCA5LCAxMVxuXVxuXG52YXIgc2wgPSBbXG4gIDExLCAxNCwgMTUsIDEyLCA1LCA4LCA3LCA5LCAxMSwgMTMsIDE0LCAxNSwgNiwgNywgOSwgOCxcbiAgNywgNiwgOCwgMTMsIDExLCA5LCA3LCAxNSwgNywgMTIsIDE1LCA5LCAxMSwgNywgMTMsIDEyLFxuICAxMSwgMTMsIDYsIDcsIDE0LCA5LCAxMywgMTUsIDE0LCA4LCAxMywgNiwgNSwgMTIsIDcsIDUsXG4gIDExLCAxMiwgMTQsIDE1LCAxNCwgMTUsIDksIDgsIDksIDE0LCA1LCA2LCA4LCA2LCA1LCAxMixcbiAgOSwgMTUsIDUsIDExLCA2LCA4LCAxMywgMTIsIDUsIDEyLCAxMywgMTQsIDExLCA4LCA1LCA2XG5dXG5cbnZhciBzciA9IFtcbiAgOCwgOSwgOSwgMTEsIDEzLCAxNSwgMTUsIDUsIDcsIDcsIDgsIDExLCAxNCwgMTQsIDEyLCA2LFxuICA5LCAxMywgMTUsIDcsIDEyLCA4LCA5LCAxMSwgNywgNywgMTIsIDcsIDYsIDE1LCAxMywgMTEsXG4gIDksIDcsIDE1LCAxMSwgOCwgNiwgNiwgMTQsIDEyLCAxMywgNSwgMTQsIDEzLCAxMywgNywgNSxcbiAgMTUsIDUsIDgsIDExLCAxNCwgMTQsIDYsIDE0LCA2LCA5LCAxMiwgOSwgMTIsIDUsIDE1LCA4LFxuICA4LCA1LCAxMiwgOSwgMTIsIDUsIDE0LCA2LCA4LCAxMywgNiwgNSwgMTUsIDEzLCAxMSwgMTFcbl1cblxudmFyIGhsID0gWzB4MDAwMDAwMDAsIDB4NUE4Mjc5OTksIDB4NkVEOUVCQTEsIDB4OEYxQkJDREMsIDB4QTk1M0ZENEVdXG52YXIgaHIgPSBbMHg1MEEyOEJFNiwgMHg1QzRERDEyNCwgMHg2RDcwM0VGMywgMHg3QTZENzZFOSwgMHgwMDAwMDAwMF1cblxuZnVuY3Rpb24gYnl0ZXNUb1dvcmRzIChieXRlcykge1xuICB2YXIgd29yZHMgPSBbXVxuICBmb3IgKHZhciBpID0gMCwgYiA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKywgYiArPSA4KSB7XG4gICAgd29yZHNbYiA+Pj4gNV0gfD0gYnl0ZXNbaV0gPDwgKDI0IC0gYiAlIDMyKVxuICB9XG4gIHJldHVybiB3b3Jkc1xufVxuXG5mdW5jdGlvbiB3b3Jkc1RvQnl0ZXMgKHdvcmRzKSB7XG4gIHZhciBieXRlcyA9IFtdXG4gIGZvciAodmFyIGIgPSAwOyBiIDwgd29yZHMubGVuZ3RoICogMzI7IGIgKz0gOCkge1xuICAgIGJ5dGVzLnB1c2goKHdvcmRzW2IgPj4+IDVdID4+PiAoMjQgLSBiICUgMzIpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NCbG9jayAoSCwgTSwgb2Zmc2V0KSB7XG4gIC8vIHN3YXAgZW5kaWFuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIHZhciBvZmZzZXRfaSA9IG9mZnNldCArIGlcbiAgICB2YXIgTV9vZmZzZXRfaSA9IE1bb2Zmc2V0X2ldXG5cbiAgICAvLyBTd2FwXG4gICAgTVtvZmZzZXRfaV0gPSAoXG4gICAgICAoKChNX29mZnNldF9pIDw8IDgpIHwgKE1fb2Zmc2V0X2kgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG4gICAgICAoKChNX29mZnNldF9pIDw8IDI0KSB8IChNX29mZnNldF9pID4+PiA4KSkgJiAweGZmMDBmZjAwKVxuICAgIClcbiAgfVxuXG4gIC8vIFdvcmtpbmcgdmFyaWFibGVzXG4gIHZhciBhbCwgYmwsIGNsLCBkbCwgZWxcbiAgdmFyIGFyLCBiciwgY3IsIGRyLCBlclxuXG4gIGFyID0gYWwgPSBIWzBdXG4gIGJyID0gYmwgPSBIWzFdXG4gIGNyID0gY2wgPSBIWzJdXG4gIGRyID0gZGwgPSBIWzNdXG4gIGVyID0gZWwgPSBIWzRdXG5cbiAgLy8gY29tcHV0YXRpb25cbiAgdmFyIHRcbiAgZm9yIChpID0gMDsgaSA8IDgwOyBpICs9IDEpIHtcbiAgICB0ID0gKGFsICsgTVtvZmZzZXQgKyB6bFtpXV0pIHwgMFxuICAgIGlmIChpIDwgMTYpIHtcbiAgICAgIHQgKz0gZjEoYmwsIGNsLCBkbCkgKyBobFswXVxuICAgIH0gZWxzZSBpZiAoaSA8IDMyKSB7XG4gICAgICB0ICs9IGYyKGJsLCBjbCwgZGwpICsgaGxbMV1cbiAgICB9IGVsc2UgaWYgKGkgPCA0OCkge1xuICAgICAgdCArPSBmMyhibCwgY2wsIGRsKSArIGhsWzJdXG4gICAgfSBlbHNlIGlmIChpIDwgNjQpIHtcbiAgICAgIHQgKz0gZjQoYmwsIGNsLCBkbCkgKyBobFszXVxuICAgIH0gZWxzZSB7Ly8gaWYgKGk8ODApIHtcbiAgICAgIHQgKz0gZjUoYmwsIGNsLCBkbCkgKyBobFs0XVxuICAgIH1cbiAgICB0ID0gdCB8IDBcbiAgICB0ID0gcm90bCh0LCBzbFtpXSlcbiAgICB0ID0gKHQgKyBlbCkgfCAwXG4gICAgYWwgPSBlbFxuICAgIGVsID0gZGxcbiAgICBkbCA9IHJvdGwoY2wsIDEwKVxuICAgIGNsID0gYmxcbiAgICBibCA9IHRcblxuICAgIHQgPSAoYXIgKyBNW29mZnNldCArIHpyW2ldXSkgfCAwXG4gICAgaWYgKGkgPCAxNikge1xuICAgICAgdCArPSBmNShiciwgY3IsIGRyKSArIGhyWzBdXG4gICAgfSBlbHNlIGlmIChpIDwgMzIpIHtcbiAgICAgIHQgKz0gZjQoYnIsIGNyLCBkcikgKyBoclsxXVxuICAgIH0gZWxzZSBpZiAoaSA8IDQ4KSB7XG4gICAgICB0ICs9IGYzKGJyLCBjciwgZHIpICsgaHJbMl1cbiAgICB9IGVsc2UgaWYgKGkgPCA2NCkge1xuICAgICAgdCArPSBmMihiciwgY3IsIGRyKSArIGhyWzNdXG4gICAgfSBlbHNlIHsvLyBpZiAoaTw4MCkge1xuICAgICAgdCArPSBmMShiciwgY3IsIGRyKSArIGhyWzRdXG4gICAgfVxuXG4gICAgdCA9IHQgfCAwXG4gICAgdCA9IHJvdGwodCwgc3JbaV0pXG4gICAgdCA9ICh0ICsgZXIpIHwgMFxuICAgIGFyID0gZXJcbiAgICBlciA9IGRyXG4gICAgZHIgPSByb3RsKGNyLCAxMClcbiAgICBjciA9IGJyXG4gICAgYnIgPSB0XG4gIH1cblxuICAvLyBpbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuICB0ID0gKEhbMV0gKyBjbCArIGRyKSB8IDBcbiAgSFsxXSA9IChIWzJdICsgZGwgKyBlcikgfCAwXG4gIEhbMl0gPSAoSFszXSArIGVsICsgYXIpIHwgMFxuICBIWzNdID0gKEhbNF0gKyBhbCArIGJyKSB8IDBcbiAgSFs0XSA9IChIWzBdICsgYmwgKyBjcikgfCAwXG4gIEhbMF0gPSB0XG59XG5cbmZ1bmN0aW9uIGYxICh4LCB5LCB6KSB7XG4gIHJldHVybiAoKHgpIF4gKHkpIF4gKHopKVxufVxuXG5mdW5jdGlvbiBmMiAoeCwgeSwgeikge1xuICByZXR1cm4gKCgoeCkgJiAoeSkpIHwgKCh+eCkgJiAoeikpKVxufVxuXG5mdW5jdGlvbiBmMyAoeCwgeSwgeikge1xuICByZXR1cm4gKCgoeCkgfCAofih5KSkpIF4gKHopKVxufVxuXG5mdW5jdGlvbiBmNCAoeCwgeSwgeikge1xuICByZXR1cm4gKCgoeCkgJiAoeikpIHwgKCh5KSAmICh+KHopKSkpXG59XG5cbmZ1bmN0aW9uIGY1ICh4LCB5LCB6KSB7XG4gIHJldHVybiAoKHgpIF4gKCh5KSB8ICh+KHopKSkpXG59XG5cbmZ1bmN0aW9uIHJvdGwgKHgsIG4pIHtcbiAgcmV0dXJuICh4IDw8IG4pIHwgKHggPj4+ICgzMiAtIG4pKVxufVxuXG5mdW5jdGlvbiByaXBlbWQxNjAgKG1lc3NhZ2UpIHtcbiAgdmFyIEggPSBbMHg2NzQ1MjMwMSwgMHhFRkNEQUI4OSwgMHg5OEJBRENGRSwgMHgxMDMyNTQ3NiwgMHhDM0QyRTFGMF1cblxuICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgbWVzc2FnZSA9IG5ldyBCdWZmZXIobWVzc2FnZSwgJ3V0ZjgnKVxuICB9XG5cbiAgdmFyIG0gPSBieXRlc1RvV29yZHMobWVzc2FnZSlcblxuICB2YXIgbkJpdHNMZWZ0ID0gbWVzc2FnZS5sZW5ndGggKiA4XG4gIHZhciBuQml0c1RvdGFsID0gbWVzc2FnZS5sZW5ndGggKiA4XG5cbiAgLy8gQWRkIHBhZGRpbmdcbiAgbVtuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpXG4gIG1bKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IChcbiAgICAoKChuQml0c1RvdGFsIDw8IDgpIHwgKG5CaXRzVG90YWwgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG4gICAgKCgobkJpdHNUb3RhbCA8PCAyNCkgfCAobkJpdHNUb3RhbCA+Pj4gOCkpICYgMHhmZjAwZmYwMClcbiAgKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkgKz0gMTYpIHtcbiAgICBwcm9jZXNzQmxvY2soSCwgbSwgaSlcbiAgfVxuXG4gIC8vIHN3YXAgZW5kaWFuXG4gIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAvLyBzaG9ydGN1dFxuICAgIHZhciBIX2kgPSBIW2ldXG5cbiAgICAvLyBTd2FwXG4gICAgSFtpXSA9ICgoKEhfaSA8PCA4KSB8IChIX2kgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG4gICAgICAoKChIX2kgPDwgMjQpIHwgKEhfaSA+Pj4gOCkpICYgMHhmZjAwZmYwMClcbiAgfVxuXG4gIHZhciBkaWdlc3RieXRlcyA9IHdvcmRzVG9CeXRlcyhIKVxuICByZXR1cm4gbmV3IEJ1ZmZlcihkaWdlc3RieXRlcylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByaXBlbWQxNjBcbiIsIi8vIHByb3RvdHlwZSBjbGFzcyBmb3IgaGFzaCBmdW5jdGlvbnNcbmZ1bmN0aW9uIEhhc2ggKGJsb2NrU2l6ZSwgZmluYWxTaXplKSB7XG4gIHRoaXMuX2Jsb2NrID0gbmV3IEJ1ZmZlcihibG9ja1NpemUpXG4gIHRoaXMuX2ZpbmFsU2l6ZSA9IGZpbmFsU2l6ZVxuICB0aGlzLl9ibG9ja1NpemUgPSBibG9ja1NpemVcbiAgdGhpcy5fbGVuID0gMFxuICB0aGlzLl9zID0gMFxufVxuXG5IYXNoLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmMgPSBlbmMgfHwgJ3V0ZjgnXG4gICAgZGF0YSA9IG5ldyBCdWZmZXIoZGF0YSwgZW5jKVxuICB9XG5cbiAgdmFyIGwgPSB0aGlzLl9sZW4gKz0gZGF0YS5sZW5ndGhcbiAgdmFyIHMgPSB0aGlzLl9zIHx8IDBcbiAgdmFyIGYgPSAwXG4gIHZhciBidWZmZXIgPSB0aGlzLl9ibG9ja1xuXG4gIHdoaWxlIChzIDwgbCkge1xuICAgIHZhciB0ID0gTWF0aC5taW4oZGF0YS5sZW5ndGgsIGYgKyB0aGlzLl9ibG9ja1NpemUgLSAocyAlIHRoaXMuX2Jsb2NrU2l6ZSkpXG4gICAgdmFyIGNoID0gKHQgLSBmKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaDsgaSsrKSB7XG4gICAgICBidWZmZXJbKHMgJSB0aGlzLl9ibG9ja1NpemUpICsgaV0gPSBkYXRhW2kgKyBmXVxuICAgIH1cblxuICAgIHMgKz0gY2hcbiAgICBmICs9IGNoXG5cbiAgICBpZiAoKHMgJSB0aGlzLl9ibG9ja1NpemUpID09PSAwKSB7XG4gICAgICB0aGlzLl91cGRhdGUoYnVmZmVyKVxuICAgIH1cbiAgfVxuICB0aGlzLl9zID0gc1xuXG4gIHJldHVybiB0aGlzXG59XG5cbkhhc2gucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgLy8gU3VwcG9zZSB0aGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIE0sIGluIGJpdHMsIGlzIGxcbiAgdmFyIGwgPSB0aGlzLl9sZW4gKiA4XG5cbiAgLy8gQXBwZW5kIHRoZSBiaXQgMSB0byB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlXG4gIHRoaXMuX2Jsb2NrW3RoaXMuX2xlbiAlIHRoaXMuX2Jsb2NrU2l6ZV0gPSAweDgwXG5cbiAgLy8gYW5kIHRoZW4gayB6ZXJvIGJpdHMsIHdoZXJlIGsgaXMgdGhlIHNtYWxsZXN0IG5vbi1uZWdhdGl2ZSBzb2x1dGlvbiB0byB0aGUgZXF1YXRpb24gKGwgKyAxICsgaykgPT09IGZpbmFsU2l6ZSBtb2QgYmxvY2tTaXplXG4gIHRoaXMuX2Jsb2NrLmZpbGwoMCwgdGhpcy5fbGVuICUgdGhpcy5fYmxvY2tTaXplICsgMSlcblxuICBpZiAobCAlICh0aGlzLl9ibG9ja1NpemUgKiA4KSA+PSB0aGlzLl9maW5hbFNpemUgKiA4KSB7XG4gICAgdGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKVxuICAgIHRoaXMuX2Jsb2NrLmZpbGwoMClcbiAgfVxuXG4gIC8vIHRvIHRoaXMgYXBwZW5kIHRoZSBibG9jayB3aGljaCBpcyBlcXVhbCB0byB0aGUgbnVtYmVyIGwgd3JpdHRlbiBpbiBiaW5hcnlcbiAgLy8gVE9ETzogaGFuZGxlIGNhc2Ugd2hlcmUgbCBpcyA+IE1hdGgucG93KDIsIDI5KVxuICB0aGlzLl9ibG9jay53cml0ZUludDMyQkUobCwgdGhpcy5fYmxvY2tTaXplIC0gNClcblxuICB2YXIgaGFzaCA9IHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jaykgfHwgdGhpcy5faGFzaCgpXG5cbiAgcmV0dXJuIGVuYyA/IGhhc2gudG9TdHJpbmcoZW5jKSA6IGhhc2hcbn1cblxuSGFzaC5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2hcbiIsInZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTSEEgKGFsZ29yaXRobSkge1xuICBhbGdvcml0aG0gPSBhbGdvcml0aG0udG9Mb3dlckNhc2UoKVxuXG4gIHZhciBBbGdvcml0aG0gPSBleHBvcnRzW2FsZ29yaXRobV1cbiAgaWYgKCFBbGdvcml0aG0pIHRocm93IG5ldyBFcnJvcihhbGdvcml0aG0gKyAnIGlzIG5vdCBzdXBwb3J0ZWQgKHdlIGFjY2VwdCBwdWxsIHJlcXVlc3RzKScpXG5cbiAgcmV0dXJuIG5ldyBBbGdvcml0aG0oKVxufVxuXG5leHBvcnRzLnNoYSA9IHJlcXVpcmUoJy4vc2hhJylcbmV4cG9ydHMuc2hhMSA9IHJlcXVpcmUoJy4vc2hhMScpXG5leHBvcnRzLnNoYTIyNCA9IHJlcXVpcmUoJy4vc2hhMjI0JylcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEyNTYnKVxuZXhwb3J0cy5zaGEzODQgPSByZXF1aXJlKCcuL3NoYTM4NCcpXG5leHBvcnRzLnNoYTUxMiA9IHJlcXVpcmUoJy4vc2hhNTEyJylcbiIsIi8qXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNlY3VyZSBIYXNoIEFsZ29yaXRobSwgU0hBLTAsIGFzIGRlZmluZWRcbiAqIGluIEZJUFMgUFVCIDE4MC0xXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzaGExLmpzIG9mIHRoZSBzYW1lIHJlcG9zaXRvcnkuXG4gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFNIQS0wIGFuZCBTSEEtMSBpcyBqdXN0IGEgYml0d2lzZSByb3RhdGUgbGVmdFxuICogb3BlcmF0aW9uIHdhcyBhZGRlZC5cbiAqL1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG5cbnZhciBXID0gbmV3IEFycmF5KDgwKVxuXG5mdW5jdGlvbiBTaGEgKCkge1xuICB0aGlzLmluaXQoKVxuICB0aGlzLl93ID0gV1xuXG4gIEhhc2guY2FsbCh0aGlzLCA2NCwgNTYpXG59XG5cbmluaGVyaXRzKFNoYSwgSGFzaClcblxuU2hhLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9hID0gMHg2NzQ1MjMwMSB8IDBcbiAgdGhpcy5fYiA9IDB4ZWZjZGFiODkgfCAwXG4gIHRoaXMuX2MgPSAweDk4YmFkY2ZlIHwgMFxuICB0aGlzLl9kID0gMHgxMDMyNTQ3NiB8IDBcbiAgdGhpcy5fZSA9IDB4YzNkMmUxZjAgfCAwXG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLypcbiAqIEJpdHdpc2Ugcm90YXRlIGEgMzItYml0IG51bWJlciB0byB0aGUgbGVmdC5cbiAqL1xuZnVuY3Rpb24gcm9sIChudW0sIGNudCkge1xuICByZXR1cm4gKG51bSA8PCBjbnQpIHwgKG51bSA+Pj4gKDMyIC0gY250KSlcbn1cblxuU2hhLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKE0pIHtcbiAgdmFyIFcgPSB0aGlzLl93XG5cbiAgdmFyIGEgPSB0aGlzLl9hXG4gIHZhciBiID0gdGhpcy5fYlxuICB2YXIgYyA9IHRoaXMuX2NcbiAgdmFyIGQgPSB0aGlzLl9kXG4gIHZhciBlID0gdGhpcy5fZVxuXG4gIHZhciBqID0gMFxuICB2YXIga1xuXG4gIC8qXG4gICAqIFNIQS0xIGhhcyBhIGJpdHdpc2Ugcm90YXRlIGxlZnQgb3BlcmF0aW9uLiBCdXQsIFNIQSBpcyBub3RcbiAgICogZnVuY3Rpb24gY2FsY1coKSB7IHJldHVybiByb2woV1tqIC0gM10gXiBXW2ogLSAgOF0gXiBXW2ogLSAxNF0gXiBXW2ogLSAxNl0sIDEpIH1cbiAgICovXG4gIGZ1bmN0aW9uIGNhbGNXICgpIHsgcmV0dXJuIFdbaiAtIDNdIF4gV1tqIC0gOF0gXiBXW2ogLSAxNF0gXiBXW2ogLSAxNl0gfVxuICBmdW5jdGlvbiBsb29wICh3LCBmKSB7XG4gICAgV1tqXSA9IHdcblxuICAgIHZhciB0ID0gcm9sKGEsIDUpICsgZiArIGUgKyB3ICsga1xuXG4gICAgZSA9IGRcbiAgICBkID0gY1xuICAgIGMgPSByb2woYiwgMzApXG4gICAgYiA9IGFcbiAgICBhID0gdFxuICAgIGorK1xuICB9XG5cbiAgayA9IDE1MTg1MDAyNDlcbiAgd2hpbGUgKGogPCAxNikgbG9vcChNLnJlYWRJbnQzMkJFKGogKiA0KSwgKGIgJiBjKSB8ICgofmIpICYgZCkpXG4gIHdoaWxlIChqIDwgMjApIGxvb3AoY2FsY1coKSwgKGIgJiBjKSB8ICgofmIpICYgZCkpXG4gIGsgPSAxODU5Nzc1MzkzXG4gIHdoaWxlIChqIDwgNDApIGxvb3AoY2FsY1coKSwgYiBeIGMgXiBkKVxuICBrID0gLTE4OTQwMDc1ODhcbiAgd2hpbGUgKGogPCA2MCkgbG9vcChjYWxjVygpLCAoYiAmIGMpIHwgKGIgJiBkKSB8IChjICYgZCkpXG4gIGsgPSAtODk5NDk3NTE0XG4gIHdoaWxlIChqIDwgODApIGxvb3AoY2FsY1coKSwgYiBeIGMgXiBkKVxuXG4gIHRoaXMuX2EgPSAoYSArIHRoaXMuX2EpIHwgMFxuICB0aGlzLl9iID0gKGIgKyB0aGlzLl9iKSB8IDBcbiAgdGhpcy5fYyA9IChjICsgdGhpcy5fYykgfCAwXG4gIHRoaXMuX2QgPSAoZCArIHRoaXMuX2QpIHwgMFxuICB0aGlzLl9lID0gKGUgKyB0aGlzLl9lKSB8IDBcbn1cblxuU2hhLnByb3RvdHlwZS5faGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEggPSBuZXcgQnVmZmVyKDIwKVxuXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2EgfCAwLCAwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9iIHwgMCwgNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYyB8IDAsIDgpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2QgfCAwLCAxMilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZSB8IDAsIDE2KVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhXG5cbiIsIi8qXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNlY3VyZSBIYXNoIEFsZ29yaXRobSwgU0hBLTEsIGFzIGRlZmluZWRcbiAqIGluIEZJUFMgUFVCIDE4MC0xXG4gKiBWZXJzaW9uIDIuMWEgQ29weXJpZ2h0IFBhdWwgSm9obnN0b24gMjAwMCAtIDIwMDIuXG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2VcbiAqIFNlZSBodHRwOi8vcGFqaG9tZS5vcmcudWsvY3J5cHQvbWQ1IGZvciBkZXRhaWxzLlxuICovXG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBIYXNoID0gcmVxdWlyZSgnLi9oYXNoJylcblxudmFyIFcgPSBuZXcgQXJyYXkoODApXG5cbmZ1bmN0aW9uIFNoYTEgKCkge1xuICB0aGlzLmluaXQoKVxuICB0aGlzLl93ID0gV1xuXG4gIEhhc2guY2FsbCh0aGlzLCA2NCwgNTYpXG59XG5cbmluaGVyaXRzKFNoYTEsIEhhc2gpXG5cblNoYTEucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2EgPSAweDY3NDUyMzAxIHwgMFxuICB0aGlzLl9iID0gMHhlZmNkYWI4OSB8IDBcbiAgdGhpcy5fYyA9IDB4OThiYWRjZmUgfCAwXG4gIHRoaXMuX2QgPSAweDEwMzI1NDc2IHwgMFxuICB0aGlzLl9lID0gMHhjM2QyZTFmMCB8IDBcblxuICByZXR1cm4gdGhpc1xufVxuXG4vKlxuICogQml0d2lzZSByb3RhdGUgYSAzMi1iaXQgbnVtYmVyIHRvIHRoZSBsZWZ0LlxuICovXG5mdW5jdGlvbiByb2wgKG51bSwgY250KSB7XG4gIHJldHVybiAobnVtIDw8IGNudCkgfCAobnVtID4+PiAoMzIgLSBjbnQpKVxufVxuXG5TaGExLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKE0pIHtcbiAgdmFyIFcgPSB0aGlzLl93XG5cbiAgdmFyIGEgPSB0aGlzLl9hXG4gIHZhciBiID0gdGhpcy5fYlxuICB2YXIgYyA9IHRoaXMuX2NcbiAgdmFyIGQgPSB0aGlzLl9kXG4gIHZhciBlID0gdGhpcy5fZVxuXG4gIHZhciBqID0gMFxuICB2YXIga1xuXG4gIGZ1bmN0aW9uIGNhbGNXICgpIHsgcmV0dXJuIHJvbChXW2ogLSAzXSBeIFdbaiAtIDhdIF4gV1tqIC0gMTRdIF4gV1tqIC0gMTZdLCAxKSB9XG4gIGZ1bmN0aW9uIGxvb3AgKHcsIGYpIHtcbiAgICBXW2pdID0gd1xuXG4gICAgdmFyIHQgPSByb2woYSwgNSkgKyBmICsgZSArIHcgKyBrXG5cbiAgICBlID0gZFxuICAgIGQgPSBjXG4gICAgYyA9IHJvbChiLCAzMClcbiAgICBiID0gYVxuICAgIGEgPSB0XG4gICAgaisrXG4gIH1cblxuICBrID0gMTUxODUwMDI0OVxuICB3aGlsZSAoaiA8IDE2KSBsb29wKE0ucmVhZEludDMyQkUoaiAqIDQpLCAoYiAmIGMpIHwgKCh+YikgJiBkKSlcbiAgd2hpbGUgKGogPCAyMCkgbG9vcChjYWxjVygpLCAoYiAmIGMpIHwgKCh+YikgJiBkKSlcbiAgayA9IDE4NTk3NzUzOTNcbiAgd2hpbGUgKGogPCA0MCkgbG9vcChjYWxjVygpLCBiIF4gYyBeIGQpXG4gIGsgPSAtMTg5NDAwNzU4OFxuICB3aGlsZSAoaiA8IDYwKSBsb29wKGNhbGNXKCksIChiICYgYykgfCAoYiAmIGQpIHwgKGMgJiBkKSlcbiAgayA9IC04OTk0OTc1MTRcbiAgd2hpbGUgKGogPCA4MCkgbG9vcChjYWxjVygpLCBiIF4gYyBeIGQpXG5cbiAgdGhpcy5fYSA9IChhICsgdGhpcy5fYSkgfCAwXG4gIHRoaXMuX2IgPSAoYiArIHRoaXMuX2IpIHwgMFxuICB0aGlzLl9jID0gKGMgKyB0aGlzLl9jKSB8IDBcbiAgdGhpcy5fZCA9IChkICsgdGhpcy5fZCkgfCAwXG4gIHRoaXMuX2UgPSAoZSArIHRoaXMuX2UpIHwgMFxufVxuXG5TaGExLnByb3RvdHlwZS5faGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEggPSBuZXcgQnVmZmVyKDIwKVxuXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2EgfCAwLCAwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9iIHwgMCwgNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYyB8IDAsIDgpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2QgfCAwLCAxMilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZSB8IDAsIDE2KVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhMVxuIiwiLyoqXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNlY3VyZSBIYXNoIEFsZ29yaXRobSwgU0hBLTI1NiwgYXMgZGVmaW5lZFxuICogaW4gRklQUyAxODAtMlxuICogVmVyc2lvbiAyLjItYmV0YSBDb3B5cmlnaHQgQW5nZWwgTWFyaW4sIFBhdWwgSm9obnN0b24gMjAwMCAtIDIwMDkuXG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKlxuICovXG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBTaGEyNTYgPSByZXF1aXJlKCcuL3NoYTI1NicpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG5cbnZhciBXID0gbmV3IEFycmF5KDY0KVxuXG5mdW5jdGlvbiBTaGEyMjQgKCkge1xuICB0aGlzLmluaXQoKVxuXG4gIHRoaXMuX3cgPSBXIC8vIG5ldyBBcnJheSg2NClcblxuICBIYXNoLmNhbGwodGhpcywgNjQsIDU2KVxufVxuXG5pbmhlcml0cyhTaGEyMjQsIFNoYTI1NilcblxuU2hhMjI0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9hID0gMHhjMTA1OWVkOCB8IDBcbiAgdGhpcy5fYiA9IDB4MzY3Y2Q1MDcgfCAwXG4gIHRoaXMuX2MgPSAweDMwNzBkZDE3IHwgMFxuICB0aGlzLl9kID0gMHhmNzBlNTkzOSB8IDBcbiAgdGhpcy5fZSA9IDB4ZmZjMDBiMzEgfCAwXG4gIHRoaXMuX2YgPSAweDY4NTgxNTExIHwgMFxuICB0aGlzLl9nID0gMHg2NGY5OGZhNyB8IDBcbiAgdGhpcy5faCA9IDB4YmVmYTRmYTQgfCAwXG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuU2hhMjI0LnByb3RvdHlwZS5faGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEggPSBuZXcgQnVmZmVyKDI4KVxuXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2EsIDApXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2IsIDQpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2MsIDgpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2QsIDEyKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9lLCAxNilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZiwgMjApXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2csIDI0KVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhMjI0XG4iLCIvKipcbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2VjdXJlIEhhc2ggQWxnb3JpdGhtLCBTSEEtMjU2LCBhcyBkZWZpbmVkXG4gKiBpbiBGSVBTIDE4MC0yXG4gKiBWZXJzaW9uIDIuMi1iZXRhIENvcHlyaWdodCBBbmdlbCBNYXJpbiwgUGF1bCBKb2huc3RvbiAyMDAwIC0gMjAwOS5cbiAqIE90aGVyIGNvbnRyaWJ1dG9yczogR3JlZyBIb2x0LCBBbmRyZXcgS2VwZXJ0LCBZZG5hciwgTG9zdGluZXRcbiAqXG4gKi9cblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIEhhc2ggPSByZXF1aXJlKCcuL2hhc2gnKVxuXG52YXIgSyA9IFtcbiAgMHg0MjhBMkY5OCwgMHg3MTM3NDQ5MSwgMHhCNUMwRkJDRiwgMHhFOUI1REJBNSxcbiAgMHgzOTU2QzI1QiwgMHg1OUYxMTFGMSwgMHg5MjNGODJBNCwgMHhBQjFDNUVENSxcbiAgMHhEODA3QUE5OCwgMHgxMjgzNUIwMSwgMHgyNDMxODVCRSwgMHg1NTBDN0RDMyxcbiAgMHg3MkJFNUQ3NCwgMHg4MERFQjFGRSwgMHg5QkRDMDZBNywgMHhDMTlCRjE3NCxcbiAgMHhFNDlCNjlDMSwgMHhFRkJFNDc4NiwgMHgwRkMxOURDNiwgMHgyNDBDQTFDQyxcbiAgMHgyREU5MkM2RiwgMHg0QTc0ODRBQSwgMHg1Q0IwQTlEQywgMHg3NkY5ODhEQSxcbiAgMHg5ODNFNTE1MiwgMHhBODMxQzY2RCwgMHhCMDAzMjdDOCwgMHhCRjU5N0ZDNyxcbiAgMHhDNkUwMEJGMywgMHhENUE3OTE0NywgMHgwNkNBNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN0I3MEE4NSwgMHgyRTFCMjEzOCwgMHg0RDJDNkRGQywgMHg1MzM4MEQxMyxcbiAgMHg2NTBBNzM1NCwgMHg3NjZBMEFCQiwgMHg4MUMyQzkyRSwgMHg5MjcyMkM4NSxcbiAgMHhBMkJGRThBMSwgMHhBODFBNjY0QiwgMHhDMjRCOEI3MCwgMHhDNzZDNTFBMyxcbiAgMHhEMTkyRTgxOSwgMHhENjk5MDYyNCwgMHhGNDBFMzU4NSwgMHgxMDZBQTA3MCxcbiAgMHgxOUE0QzExNiwgMHgxRTM3NkMwOCwgMHgyNzQ4Nzc0QywgMHgzNEIwQkNCNSxcbiAgMHgzOTFDMENCMywgMHg0RUQ4QUE0QSwgMHg1QjlDQ0E0RiwgMHg2ODJFNkZGMyxcbiAgMHg3NDhGODJFRSwgMHg3OEE1NjM2RiwgMHg4NEM4NzgxNCwgMHg4Q0M3MDIwOCxcbiAgMHg5MEJFRkZGQSwgMHhBNDUwNkNFQiwgMHhCRUY5QTNGNywgMHhDNjcxNzhGMlxuXVxuXG52YXIgVyA9IG5ldyBBcnJheSg2NClcblxuZnVuY3Rpb24gU2hhMjU2ICgpIHtcbiAgdGhpcy5pbml0KClcblxuICB0aGlzLl93ID0gVyAvLyBuZXcgQXJyYXkoNjQpXG5cbiAgSGFzaC5jYWxsKHRoaXMsIDY0LCA1Nilcbn1cblxuaW5oZXJpdHMoU2hhMjU2LCBIYXNoKVxuXG5TaGEyNTYucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2EgPSAweDZhMDllNjY3IHwgMFxuICB0aGlzLl9iID0gMHhiYjY3YWU4NSB8IDBcbiAgdGhpcy5fYyA9IDB4M2M2ZWYzNzIgfCAwXG4gIHRoaXMuX2QgPSAweGE1NGZmNTNhIHwgMFxuICB0aGlzLl9lID0gMHg1MTBlNTI3ZiB8IDBcbiAgdGhpcy5fZiA9IDB4OWIwNTY4OGMgfCAwXG4gIHRoaXMuX2cgPSAweDFmODNkOWFiIHwgMFxuICB0aGlzLl9oID0gMHg1YmUwY2QxOSB8IDBcblxuICByZXR1cm4gdGhpc1xufVxuXG5mdW5jdGlvbiBDaCAoeCwgeSwgeikge1xuICByZXR1cm4geiBeICh4ICYgKHkgXiB6KSlcbn1cblxuZnVuY3Rpb24gTWFqICh4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIHwgKHogJiAoeCB8IHkpKVxufVxuXG5mdW5jdGlvbiBTaWdtYTAgKHgpIHtcbiAgcmV0dXJuICh4ID4+PiAyIHwgeCA8PCAzMCkgXiAoeCA+Pj4gMTMgfCB4IDw8IDE5KSBeICh4ID4+PiAyMiB8IHggPDwgMTApXG59XG5cbmZ1bmN0aW9uIFNpZ21hMSAoeCkge1xuICByZXR1cm4gKHggPj4+IDYgfCB4IDw8IDI2KSBeICh4ID4+PiAxMSB8IHggPDwgMjEpIF4gKHggPj4+IDI1IHwgeCA8PCA3KVxufVxuXG5mdW5jdGlvbiBHYW1tYTAgKHgpIHtcbiAgcmV0dXJuICh4ID4+PiA3IHwgeCA8PCAyNSkgXiAoeCA+Pj4gMTggfCB4IDw8IDE0KSBeICh4ID4+PiAzKVxufVxuXG5mdW5jdGlvbiBHYW1tYTEgKHgpIHtcbiAgcmV0dXJuICh4ID4+PiAxNyB8IHggPDwgMTUpIF4gKHggPj4+IDE5IHwgeCA8PCAxMykgXiAoeCA+Pj4gMTApXG59XG5cblNoYTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChNKSB7XG4gIHZhciBXID0gdGhpcy5fd1xuXG4gIHZhciBhID0gdGhpcy5fYSB8IDBcbiAgdmFyIGIgPSB0aGlzLl9iIHwgMFxuICB2YXIgYyA9IHRoaXMuX2MgfCAwXG4gIHZhciBkID0gdGhpcy5fZCB8IDBcbiAgdmFyIGUgPSB0aGlzLl9lIHwgMFxuICB2YXIgZiA9IHRoaXMuX2YgfCAwXG4gIHZhciBnID0gdGhpcy5fZyB8IDBcbiAgdmFyIGggPSB0aGlzLl9oIHwgMFxuXG4gIHZhciBqID0gMFxuXG4gIGZ1bmN0aW9uIGNhbGNXICgpIHsgcmV0dXJuIEdhbW1hMShXW2ogLSAyXSkgKyBXW2ogLSA3XSArIEdhbW1hMChXW2ogLSAxNV0pICsgV1tqIC0gMTZdIH1cbiAgZnVuY3Rpb24gbG9vcCAodykge1xuICAgIFdbal0gPSB3XG5cbiAgICB2YXIgVDEgPSBoICsgU2lnbWExKGUpICsgQ2goZSwgZiwgZykgKyBLW2pdICsgd1xuICAgIHZhciBUMiA9IFNpZ21hMChhKSArIE1haihhLCBiLCBjKVxuXG4gICAgaCA9IGdcbiAgICBnID0gZlxuICAgIGYgPSBlXG4gICAgZSA9IGQgKyBUMVxuICAgIGQgPSBjXG4gICAgYyA9IGJcbiAgICBiID0gYVxuICAgIGEgPSBUMSArIFQyXG5cbiAgICBqKytcbiAgfVxuXG4gIHdoaWxlIChqIDwgMTYpIGxvb3AoTS5yZWFkSW50MzJCRShqICogNCkpXG4gIHdoaWxlIChqIDwgNjQpIGxvb3AoY2FsY1coKSlcblxuICB0aGlzLl9hID0gKGEgKyB0aGlzLl9hKSB8IDBcbiAgdGhpcy5fYiA9IChiICsgdGhpcy5fYikgfCAwXG4gIHRoaXMuX2MgPSAoYyArIHRoaXMuX2MpIHwgMFxuICB0aGlzLl9kID0gKGQgKyB0aGlzLl9kKSB8IDBcbiAgdGhpcy5fZSA9IChlICsgdGhpcy5fZSkgfCAwXG4gIHRoaXMuX2YgPSAoZiArIHRoaXMuX2YpIHwgMFxuICB0aGlzLl9nID0gKGcgKyB0aGlzLl9nKSB8IDBcbiAgdGhpcy5faCA9IChoICsgdGhpcy5faCkgfCAwXG59XG5cblNoYTI1Ni5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gbmV3IEJ1ZmZlcigzMilcblxuICBILndyaXRlSW50MzJCRSh0aGlzLl9hLCAwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9iLCA0KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9jLCA4KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9kLCAxMilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZSwgMTYpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2YsIDIwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9nLCAyNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5faCwgMjgpXG5cbiAgcmV0dXJuIEhcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGEyNTZcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBTSEE1MTIgPSByZXF1aXJlKCcuL3NoYTUxMicpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG5cbnZhciBXID0gbmV3IEFycmF5KDE2MClcblxuZnVuY3Rpb24gU2hhMzg0ICgpIHtcbiAgdGhpcy5pbml0KClcbiAgdGhpcy5fdyA9IFdcblxuICBIYXNoLmNhbGwodGhpcywgMTI4LCAxMTIpXG59XG5cbmluaGVyaXRzKFNoYTM4NCwgU0hBNTEyKVxuXG5TaGEzODQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2EgPSAweGNiYmI5ZDVkIHwgMFxuICB0aGlzLl9iID0gMHg2MjlhMjkyYSB8IDBcbiAgdGhpcy5fYyA9IDB4OTE1OTAxNWEgfCAwXG4gIHRoaXMuX2QgPSAweDE1MmZlY2Q4IHwgMFxuICB0aGlzLl9lID0gMHg2NzMzMjY2NyB8IDBcbiAgdGhpcy5fZiA9IDB4OGViNDRhODcgfCAwXG4gIHRoaXMuX2cgPSAweGRiMGMyZTBkIHwgMFxuICB0aGlzLl9oID0gMHg0N2I1NDgxZCB8IDBcblxuICB0aGlzLl9hbCA9IDB4YzEwNTllZDggfCAwXG4gIHRoaXMuX2JsID0gMHgzNjdjZDUwNyB8IDBcbiAgdGhpcy5fY2wgPSAweDMwNzBkZDE3IHwgMFxuICB0aGlzLl9kbCA9IDB4ZjcwZTU5MzkgfCAwXG4gIHRoaXMuX2VsID0gMHhmZmMwMGIzMSB8IDBcbiAgdGhpcy5fZmwgPSAweDY4NTgxNTExIHwgMFxuICB0aGlzLl9nbCA9IDB4NjRmOThmYTcgfCAwXG4gIHRoaXMuX2hsID0gMHhiZWZhNGZhNCB8IDBcblxuICByZXR1cm4gdGhpc1xufVxuXG5TaGEzODQucHJvdG90eXBlLl9oYXNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgSCA9IG5ldyBCdWZmZXIoNDgpXG5cbiAgZnVuY3Rpb24gd3JpdGVJbnQ2NEJFIChoLCBsLCBvZmZzZXQpIHtcbiAgICBILndyaXRlSW50MzJCRShoLCBvZmZzZXQpXG4gICAgSC53cml0ZUludDMyQkUobCwgb2Zmc2V0ICsgNClcbiAgfVxuXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9hLCB0aGlzLl9hbCwgMClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2IsIHRoaXMuX2JsLCA4KVxuICB3cml0ZUludDY0QkUodGhpcy5fYywgdGhpcy5fY2wsIDE2KVxuICB3cml0ZUludDY0QkUodGhpcy5fZCwgdGhpcy5fZGwsIDI0KVxuICB3cml0ZUludDY0QkUodGhpcy5fZSwgdGhpcy5fZWwsIDMyKVxuICB3cml0ZUludDY0QkUodGhpcy5fZiwgdGhpcy5fZmwsIDQwKVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhMzg0XG4iLCJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG5cbnZhciBLID0gW1xuICAweDQyOGEyZjk4LCAweGQ3MjhhZTIyLCAweDcxMzc0NDkxLCAweDIzZWY2NWNkLFxuICAweGI1YzBmYmNmLCAweGVjNGQzYjJmLCAweGU5YjVkYmE1LCAweDgxODlkYmJjLFxuICAweDM5NTZjMjViLCAweGYzNDhiNTM4LCAweDU5ZjExMWYxLCAweGI2MDVkMDE5LFxuICAweDkyM2Y4MmE0LCAweGFmMTk0ZjliLCAweGFiMWM1ZWQ1LCAweGRhNmQ4MTE4LFxuICAweGQ4MDdhYTk4LCAweGEzMDMwMjQyLCAweDEyODM1YjAxLCAweDQ1NzA2ZmJlLFxuICAweDI0MzE4NWJlLCAweDRlZTRiMjhjLCAweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyLFxuICAweDcyYmU1ZDc0LCAweGYyN2I4OTZmLCAweDgwZGViMWZlLCAweDNiMTY5NmIxLFxuICAweDliZGMwNmE3LCAweDI1YzcxMjM1LCAweGMxOWJmMTc0LCAweGNmNjkyNjk0LFxuICAweGU0OWI2OWMxLCAweDllZjE0YWQyLCAweGVmYmU0Nzg2LCAweDM4NGYyNWUzLFxuICAweDBmYzE5ZGM2LCAweDhiOGNkNWI1LCAweDI0MGNhMWNjLCAweDc3YWM5YzY1LFxuICAweDJkZTkyYzZmLCAweDU5MmIwMjc1LCAweDRhNzQ4NGFhLCAweDZlYTZlNDgzLFxuICAweDVjYjBhOWRjLCAweGJkNDFmYmQ0LCAweDc2Zjk4OGRhLCAweDgzMTE1M2I1LFxuICAweDk4M2U1MTUyLCAweGVlNjZkZmFiLCAweGE4MzFjNjZkLCAweDJkYjQzMjEwLFxuICAweGIwMDMyN2M4LCAweDk4ZmIyMTNmLCAweGJmNTk3ZmM3LCAweGJlZWYwZWU0LFxuICAweGM2ZTAwYmYzLCAweDNkYTg4ZmMyLCAweGQ1YTc5MTQ3LCAweDkzMGFhNzI1LFxuICAweDA2Y2E2MzUxLCAweGUwMDM4MjZmLCAweDE0MjkyOTY3LCAweDBhMGU2ZTcwLFxuICAweDI3YjcwYTg1LCAweDQ2ZDIyZmZjLCAweDJlMWIyMTM4LCAweDVjMjZjOTI2LFxuICAweDRkMmM2ZGZjLCAweDVhYzQyYWVkLCAweDUzMzgwZDEzLCAweDlkOTViM2RmLFxuICAweDY1MGE3MzU0LCAweDhiYWY2M2RlLCAweDc2NmEwYWJiLCAweDNjNzdiMmE4LFxuICAweDgxYzJjOTJlLCAweDQ3ZWRhZWU2LCAweDkyNzIyYzg1LCAweDE0ODIzNTNiLFxuICAweGEyYmZlOGExLCAweDRjZjEwMzY0LCAweGE4MWE2NjRiLCAweGJjNDIzMDAxLFxuICAweGMyNGI4YjcwLCAweGQwZjg5NzkxLCAweGM3NmM1MWEzLCAweDA2NTRiZTMwLFxuICAweGQxOTJlODE5LCAweGQ2ZWY1MjE4LCAweGQ2OTkwNjI0LCAweDU1NjVhOTEwLFxuICAweGY0MGUzNTg1LCAweDU3NzEyMDJhLCAweDEwNmFhMDcwLCAweDMyYmJkMWI4LFxuICAweDE5YTRjMTE2LCAweGI4ZDJkMGM4LCAweDFlMzc2YzA4LCAweDUxNDFhYjUzLFxuICAweDI3NDg3NzRjLCAweGRmOGVlYjk5LCAweDM0YjBiY2I1LCAweGUxOWI0OGE4LFxuICAweDM5MWMwY2IzLCAweGM1Yzk1YTYzLCAweDRlZDhhYTRhLCAweGUzNDE4YWNiLFxuICAweDViOWNjYTRmLCAweDc3NjNlMzczLCAweDY4MmU2ZmYzLCAweGQ2YjJiOGEzLFxuICAweDc0OGY4MmVlLCAweDVkZWZiMmZjLCAweDc4YTU2MzZmLCAweDQzMTcyZjYwLFxuICAweDg0Yzg3ODE0LCAweGExZjBhYjcyLCAweDhjYzcwMjA4LCAweDFhNjQzOWVjLFxuICAweDkwYmVmZmZhLCAweDIzNjMxZTI4LCAweGE0NTA2Y2ViLCAweGRlODJiZGU5LFxuICAweGJlZjlhM2Y3LCAweGIyYzY3OTE1LCAweGM2NzE3OGYyLCAweGUzNzI1MzJiLFxuICAweGNhMjczZWNlLCAweGVhMjY2MTljLCAweGQxODZiOGM3LCAweDIxYzBjMjA3LFxuICAweGVhZGE3ZGQ2LCAweGNkZTBlYjFlLCAweGY1N2Q0ZjdmLCAweGVlNmVkMTc4LFxuICAweDA2ZjA2N2FhLCAweDcyMTc2ZmJhLCAweDBhNjM3ZGM1LCAweGEyYzg5OGE2LFxuICAweDExM2Y5ODA0LCAweGJlZjkwZGFlLCAweDFiNzEwYjM1LCAweDEzMWM0NzFiLFxuICAweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0LCAweDMyY2FhYjdiLCAweDQwYzcyNDkzLFxuICAweDNjOWViZTBhLCAweDE1YzliZWJjLCAweDQzMWQ2N2M0LCAweDljMTAwZDRjLFxuICAweDRjYzVkNGJlLCAweGNiM2U0MmI2LCAweDU5N2YyOTljLCAweGZjNjU3ZTJhLFxuICAweDVmY2I2ZmFiLCAweDNhZDZmYWVjLCAweDZjNDQxOThjLCAweDRhNDc1ODE3XG5dXG5cbnZhciBXID0gbmV3IEFycmF5KDE2MClcblxuZnVuY3Rpb24gU2hhNTEyICgpIHtcbiAgdGhpcy5pbml0KClcbiAgdGhpcy5fdyA9IFdcblxuICBIYXNoLmNhbGwodGhpcywgMTI4LCAxMTIpXG59XG5cbmluaGVyaXRzKFNoYTUxMiwgSGFzaClcblxuU2hhNTEyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9hID0gMHg2YTA5ZTY2NyB8IDBcbiAgdGhpcy5fYiA9IDB4YmI2N2FlODUgfCAwXG4gIHRoaXMuX2MgPSAweDNjNmVmMzcyIHwgMFxuICB0aGlzLl9kID0gMHhhNTRmZjUzYSB8IDBcbiAgdGhpcy5fZSA9IDB4NTEwZTUyN2YgfCAwXG4gIHRoaXMuX2YgPSAweDliMDU2ODhjIHwgMFxuICB0aGlzLl9nID0gMHgxZjgzZDlhYiB8IDBcbiAgdGhpcy5faCA9IDB4NWJlMGNkMTkgfCAwXG5cbiAgdGhpcy5fYWwgPSAweGYzYmNjOTA4IHwgMFxuICB0aGlzLl9ibCA9IDB4ODRjYWE3M2IgfCAwXG4gIHRoaXMuX2NsID0gMHhmZTk0ZjgyYiB8IDBcbiAgdGhpcy5fZGwgPSAweDVmMWQzNmYxIHwgMFxuICB0aGlzLl9lbCA9IDB4YWRlNjgyZDEgfCAwXG4gIHRoaXMuX2ZsID0gMHgyYjNlNmMxZiB8IDBcbiAgdGhpcy5fZ2wgPSAweGZiNDFiZDZiIHwgMFxuICB0aGlzLl9obCA9IDB4MTM3ZTIxNzkgfCAwXG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gQ2ggKHgsIHksIHopIHtcbiAgcmV0dXJuIHogXiAoeCAmICh5IF4geikpXG59XG5cbmZ1bmN0aW9uIE1haiAoeCwgeSwgeikge1xuICByZXR1cm4gKHggJiB5KSB8ICh6ICYgKHggfCB5KSlcbn1cblxuZnVuY3Rpb24gU2lnbWEwICh4LCB4bCkge1xuICByZXR1cm4gKHggPj4+IDI4IHwgeGwgPDwgNCkgXiAoeGwgPj4+IDIgfCB4IDw8IDMwKSBeICh4bCA+Pj4gNyB8IHggPDwgMjUpXG59XG5cbmZ1bmN0aW9uIFNpZ21hMSAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAxNCB8IHhsIDw8IDE4KSBeICh4ID4+PiAxOCB8IHhsIDw8IDE0KSBeICh4bCA+Pj4gOSB8IHggPDwgMjMpXG59XG5cbmZ1bmN0aW9uIEdhbW1hMCAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAxIHwgeGwgPDwgMzEpIF4gKHggPj4+IDggfCB4bCA8PCAyNCkgXiAoeCA+Pj4gNylcbn1cblxuZnVuY3Rpb24gR2FtbWEwbCAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAxIHwgeGwgPDwgMzEpIF4gKHggPj4+IDggfCB4bCA8PCAyNCkgXiAoeCA+Pj4gNyB8IHhsIDw8IDI1KVxufVxuXG5mdW5jdGlvbiBHYW1tYTEgKHgsIHhsKSB7XG4gIHJldHVybiAoeCA+Pj4gMTkgfCB4bCA8PCAxMykgXiAoeGwgPj4+IDI5IHwgeCA8PCAzKSBeICh4ID4+PiA2KVxufVxuXG5mdW5jdGlvbiBHYW1tYTFsICh4LCB4bCkge1xuICByZXR1cm4gKHggPj4+IDE5IHwgeGwgPDwgMTMpIF4gKHhsID4+PiAyOSB8IHggPDwgMykgXiAoeCA+Pj4gNiB8IHhsIDw8IDI2KVxufVxuXG5TaGE1MTIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoTSkge1xuICB2YXIgVyA9IHRoaXMuX3dcblxuICB2YXIgYSA9IHRoaXMuX2EgfCAwXG4gIHZhciBiID0gdGhpcy5fYiB8IDBcbiAgdmFyIGMgPSB0aGlzLl9jIHwgMFxuICB2YXIgZCA9IHRoaXMuX2QgfCAwXG4gIHZhciBlID0gdGhpcy5fZSB8IDBcbiAgdmFyIGYgPSB0aGlzLl9mIHwgMFxuICB2YXIgZyA9IHRoaXMuX2cgfCAwXG4gIHZhciBoID0gdGhpcy5faCB8IDBcblxuICB2YXIgYWwgPSB0aGlzLl9hbCB8IDBcbiAgdmFyIGJsID0gdGhpcy5fYmwgfCAwXG4gIHZhciBjbCA9IHRoaXMuX2NsIHwgMFxuICB2YXIgZGwgPSB0aGlzLl9kbCB8IDBcbiAgdmFyIGVsID0gdGhpcy5fZWwgfCAwXG4gIHZhciBmbCA9IHRoaXMuX2ZsIHwgMFxuICB2YXIgZ2wgPSB0aGlzLl9nbCB8IDBcbiAgdmFyIGhsID0gdGhpcy5faGwgfCAwXG5cbiAgdmFyIGkgPSAwXG4gIHZhciBqID0gMFxuICB2YXIgV2ksIFdpbFxuICBmdW5jdGlvbiBjYWxjVyAoKSB7XG4gICAgdmFyIHggPSBXW2ogLSAxNSAqIDJdXG4gICAgdmFyIHhsID0gV1tqIC0gMTUgKiAyICsgMV1cbiAgICB2YXIgZ2FtbWEwID0gR2FtbWEwKHgsIHhsKVxuICAgIHZhciBnYW1tYTBsID0gR2FtbWEwbCh4bCwgeClcblxuICAgIHggPSBXW2ogLSAyICogMl1cbiAgICB4bCA9IFdbaiAtIDIgKiAyICsgMV1cbiAgICB2YXIgZ2FtbWExID0gR2FtbWExKHgsIHhsKVxuICAgIHZhciBnYW1tYTFsID0gR2FtbWExbCh4bCwgeClcblxuICAgIC8vIFdbaV0gPSBnYW1tYTAgKyBXW2kgLSA3XSArIGdhbW1hMSArIFdbaSAtIDE2XVxuICAgIHZhciBXaTcgPSBXW2ogLSA3ICogMl1cbiAgICB2YXIgV2k3bCA9IFdbaiAtIDcgKiAyICsgMV1cblxuICAgIHZhciBXaTE2ID0gV1tqIC0gMTYgKiAyXVxuICAgIHZhciBXaTE2bCA9IFdbaiAtIDE2ICogMiArIDFdXG5cbiAgICBXaWwgPSBnYW1tYTBsICsgV2k3bFxuICAgIFdpID0gZ2FtbWEwICsgV2k3ICsgKChXaWwgPj4+IDApIDwgKGdhbW1hMGwgPj4+IDApID8gMSA6IDApXG4gICAgV2lsID0gV2lsICsgZ2FtbWExbFxuICAgIFdpID0gV2kgKyBnYW1tYTEgKyAoKFdpbCA+Pj4gMCkgPCAoZ2FtbWExbCA+Pj4gMCkgPyAxIDogMClcbiAgICBXaWwgPSBXaWwgKyBXaTE2bFxuICAgIFdpID0gV2kgKyBXaTE2ICsgKChXaWwgPj4+IDApIDwgKFdpMTZsID4+PiAwKSA/IDEgOiAwKVxuICB9XG5cbiAgZnVuY3Rpb24gbG9vcCAoKSB7XG4gICAgV1tqXSA9IFdpXG4gICAgV1tqICsgMV0gPSBXaWxcblxuICAgIHZhciBtYWogPSBNYWooYSwgYiwgYylcbiAgICB2YXIgbWFqbCA9IE1haihhbCwgYmwsIGNsKVxuXG4gICAgdmFyIHNpZ21hMGggPSBTaWdtYTAoYSwgYWwpXG4gICAgdmFyIHNpZ21hMGwgPSBTaWdtYTAoYWwsIGEpXG4gICAgdmFyIHNpZ21hMWggPSBTaWdtYTEoZSwgZWwpXG4gICAgdmFyIHNpZ21hMWwgPSBTaWdtYTEoZWwsIGUpXG5cbiAgICAvLyB0MSA9IGggKyBzaWdtYTEgKyBjaCArIEtbaV0gKyBXW2ldXG4gICAgdmFyIEtpID0gS1tqXVxuICAgIHZhciBLaWwgPSBLW2ogKyAxXVxuXG4gICAgdmFyIGNoID0gQ2goZSwgZiwgZylcbiAgICB2YXIgY2hsID0gQ2goZWwsIGZsLCBnbClcblxuICAgIHZhciB0MWwgPSBobCArIHNpZ21hMWxcbiAgICB2YXIgdDEgPSBoICsgc2lnbWExaCArICgodDFsID4+PiAwKSA8IChobCA+Pj4gMCkgPyAxIDogMClcbiAgICB0MWwgPSB0MWwgKyBjaGxcbiAgICB0MSA9IHQxICsgY2ggKyAoKHQxbCA+Pj4gMCkgPCAoY2hsID4+PiAwKSA/IDEgOiAwKVxuICAgIHQxbCA9IHQxbCArIEtpbFxuICAgIHQxID0gdDEgKyBLaSArICgodDFsID4+PiAwKSA8IChLaWwgPj4+IDApID8gMSA6IDApXG4gICAgdDFsID0gdDFsICsgV2lsXG4gICAgdDEgPSB0MSArIFdpICsgKCh0MWwgPj4+IDApIDwgKFdpbCA+Pj4gMCkgPyAxIDogMClcblxuICAgIC8vIHQyID0gc2lnbWEwICsgbWFqXG4gICAgdmFyIHQybCA9IHNpZ21hMGwgKyBtYWpsXG4gICAgdmFyIHQyID0gc2lnbWEwaCArIG1haiArICgodDJsID4+PiAwKSA8IChzaWdtYTBsID4+PiAwKSA/IDEgOiAwKVxuXG4gICAgaCA9IGdcbiAgICBobCA9IGdsXG4gICAgZyA9IGZcbiAgICBnbCA9IGZsXG4gICAgZiA9IGVcbiAgICBmbCA9IGVsXG4gICAgZWwgPSAoZGwgKyB0MWwpIHwgMFxuICAgIGUgPSAoZCArIHQxICsgKChlbCA+Pj4gMCkgPCAoZGwgPj4+IDApID8gMSA6IDApKSB8IDBcbiAgICBkID0gY1xuICAgIGRsID0gY2xcbiAgICBjID0gYlxuICAgIGNsID0gYmxcbiAgICBiID0gYVxuICAgIGJsID0gYWxcbiAgICBhbCA9ICh0MWwgKyB0MmwpIHwgMFxuICAgIGEgPSAodDEgKyB0MiArICgoYWwgPj4+IDApIDwgKHQxbCA+Pj4gMCkgPyAxIDogMCkpIHwgMFxuXG4gICAgaSsrXG4gICAgaiArPSAyXG4gIH1cblxuICB3aGlsZSAoaSA8IDE2KSB7XG4gICAgV2kgPSBNLnJlYWRJbnQzMkJFKGogKiA0KVxuICAgIFdpbCA9IE0ucmVhZEludDMyQkUoaiAqIDQgKyA0KVxuXG4gICAgbG9vcCgpXG4gIH1cblxuICB3aGlsZSAoaSA8IDgwKSB7XG4gICAgY2FsY1coKVxuICAgIGxvb3AoKVxuICB9XG5cbiAgdGhpcy5fYWwgPSAodGhpcy5fYWwgKyBhbCkgfCAwXG4gIHRoaXMuX2JsID0gKHRoaXMuX2JsICsgYmwpIHwgMFxuICB0aGlzLl9jbCA9ICh0aGlzLl9jbCArIGNsKSB8IDBcbiAgdGhpcy5fZGwgPSAodGhpcy5fZGwgKyBkbCkgfCAwXG4gIHRoaXMuX2VsID0gKHRoaXMuX2VsICsgZWwpIHwgMFxuICB0aGlzLl9mbCA9ICh0aGlzLl9mbCArIGZsKSB8IDBcbiAgdGhpcy5fZ2wgPSAodGhpcy5fZ2wgKyBnbCkgfCAwXG4gIHRoaXMuX2hsID0gKHRoaXMuX2hsICsgaGwpIHwgMFxuXG4gIHRoaXMuX2EgPSAodGhpcy5fYSArIGEgKyAoKHRoaXMuX2FsID4+PiAwKSA8IChhbCA+Pj4gMCkgPyAxIDogMCkpIHwgMFxuICB0aGlzLl9iID0gKHRoaXMuX2IgKyBiICsgKCh0aGlzLl9ibCA+Pj4gMCkgPCAoYmwgPj4+IDApID8gMSA6IDApKSB8IDBcbiAgdGhpcy5fYyA9ICh0aGlzLl9jICsgYyArICgodGhpcy5fY2wgPj4+IDApIDwgKGNsID4+PiAwKSA/IDEgOiAwKSkgfCAwXG4gIHRoaXMuX2QgPSAodGhpcy5fZCArIGQgKyAoKHRoaXMuX2RsID4+PiAwKSA8IChkbCA+Pj4gMCkgPyAxIDogMCkpIHwgMFxuICB0aGlzLl9lID0gKHRoaXMuX2UgKyBlICsgKCh0aGlzLl9lbCA+Pj4gMCkgPCAoZWwgPj4+IDApID8gMSA6IDApKSB8IDBcbiAgdGhpcy5fZiA9ICh0aGlzLl9mICsgZiArICgodGhpcy5fZmwgPj4+IDApIDwgKGZsID4+PiAwKSA/IDEgOiAwKSkgfCAwXG4gIHRoaXMuX2cgPSAodGhpcy5fZyArIGcgKyAoKHRoaXMuX2dsID4+PiAwKSA8IChnbCA+Pj4gMCkgPyAxIDogMCkpIHwgMFxuICB0aGlzLl9oID0gKHRoaXMuX2ggKyBoICsgKCh0aGlzLl9obCA+Pj4gMCkgPCAoaGwgPj4+IDApID8gMSA6IDApKSB8IDBcbn1cblxuU2hhNTEyLnByb3RvdHlwZS5faGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEggPSBuZXcgQnVmZmVyKDY0KVxuXG4gIGZ1bmN0aW9uIHdyaXRlSW50NjRCRSAoaCwgbCwgb2Zmc2V0KSB7XG4gICAgSC53cml0ZUludDMyQkUoaCwgb2Zmc2V0KVxuICAgIEgud3JpdGVJbnQzMkJFKGwsIG9mZnNldCArIDQpXG4gIH1cblxuICB3cml0ZUludDY0QkUodGhpcy5fYSwgdGhpcy5fYWwsIDApXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9iLCB0aGlzLl9ibCwgOClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2MsIHRoaXMuX2NsLCAxNilcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2QsIHRoaXMuX2RsLCAyNClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2UsIHRoaXMuX2VsLCAzMilcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2YsIHRoaXMuX2ZsLCA0MClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2csIHRoaXMuX2dsLCA0OClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2gsIHRoaXMuX2hsLCA1NilcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYTUxMlxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbm1vZHVsZS5leHBvcnRzID0gU3RyZWFtO1xuXG52YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5pbmhlcml0cyhTdHJlYW0sIEVFKTtcblN0cmVhbS5SZWFkYWJsZSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbS9yZWFkYWJsZS5qcycpO1xuU3RyZWFtLldyaXRhYmxlID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3dyaXRhYmxlLmpzJyk7XG5TdHJlYW0uRHVwbGV4ID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL2R1cGxleC5qcycpO1xuU3RyZWFtLlRyYW5zZm9ybSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbS90cmFuc2Zvcm0uanMnKTtcblN0cmVhbS5QYXNzVGhyb3VnaCA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbS9wYXNzdGhyb3VnaC5qcycpO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjQueFxuU3RyZWFtLlN0cmVhbSA9IFN0cmVhbTtcblxuXG5cbi8vIG9sZC1zdHlsZSBzdHJlYW1zLiAgTm90ZSB0aGF0IHRoZSBwaXBlIG1ldGhvZCAodGhlIG9ubHkgcmVsZXZhbnRcbi8vIHBhcnQgb2YgdGhpcyBjbGFzcykgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgUmVhZGFibGUgY2xhc3MuXG5cbmZ1bmN0aW9uIFN0cmVhbSgpIHtcbiAgRUUuY2FsbCh0aGlzKTtcbn1cblxuU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdCwgb3B0aW9ucykge1xuICB2YXIgc291cmNlID0gdGhpcztcblxuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBpZiAoZGVzdC53cml0YWJsZSkge1xuICAgICAgaWYgKGZhbHNlID09PSBkZXN0LndyaXRlKGNodW5rKSAmJiBzb3VyY2UucGF1c2UpIHtcbiAgICAgICAgc291cmNlLnBhdXNlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc291cmNlLm9uKCdkYXRhJywgb25kYXRhKTtcblxuICBmdW5jdGlvbiBvbmRyYWluKCkge1xuICAgIGlmIChzb3VyY2UucmVhZGFibGUgJiYgc291cmNlLnJlc3VtZSkge1xuICAgICAgc291cmNlLnJlc3VtZSgpO1xuICAgIH1cbiAgfVxuXG4gIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbik7XG5cbiAgLy8gSWYgdGhlICdlbmQnIG9wdGlvbiBpcyBub3Qgc3VwcGxpZWQsIGRlc3QuZW5kKCkgd2lsbCBiZSBjYWxsZWQgd2hlblxuICAvLyBzb3VyY2UgZ2V0cyB0aGUgJ2VuZCcgb3IgJ2Nsb3NlJyBldmVudHMuICBPbmx5IGRlc3QuZW5kKCkgb25jZS5cbiAgaWYgKCFkZXN0Ll9pc1N0ZGlvICYmICghb3B0aW9ucyB8fCBvcHRpb25zLmVuZCAhPT0gZmFsc2UpKSB7XG4gICAgc291cmNlLm9uKCdlbmQnLCBvbmVuZCk7XG4gICAgc291cmNlLm9uKCdjbG9zZScsIG9uY2xvc2UpO1xuICB9XG5cbiAgdmFyIGRpZE9uRW5kID0gZmFsc2U7XG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGlmIChkaWRPbkVuZCkgcmV0dXJuO1xuICAgIGRpZE9uRW5kID0gdHJ1ZTtcblxuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgaWYgKGRpZE9uRW5kKSByZXR1cm47XG4gICAgZGlkT25FbmQgPSB0cnVlO1xuXG4gICAgaWYgKHR5cGVvZiBkZXN0LmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIGRlc3QuZGVzdHJveSgpO1xuICB9XG5cbiAgLy8gZG9uJ3QgbGVhdmUgZGFuZ2xpbmcgcGlwZXMgd2hlbiB0aGVyZSBhcmUgZXJyb3JzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgY2xlYW51cCgpO1xuICAgIGlmIChFRS5saXN0ZW5lckNvdW50KHRoaXMsICdlcnJvcicpID09PSAwKSB7XG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkIHN0cmVhbSBlcnJvciBpbiBwaXBlLlxuICAgIH1cbiAgfVxuXG4gIHNvdXJjZS5vbignZXJyb3InLCBvbmVycm9yKTtcbiAgZGVzdC5vbignZXJyb3InLCBvbmVycm9yKTtcblxuICAvLyByZW1vdmUgYWxsIHRoZSBldmVudCBsaXN0ZW5lcnMgdGhhdCB3ZXJlIGFkZGVkLlxuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uZGF0YSk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcblxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcblxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBjbGVhbnVwKTtcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xlYW51cCk7XG5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIGNsZWFudXApO1xuICB9XG5cbiAgc291cmNlLm9uKCdlbmQnLCBjbGVhbnVwKTtcbiAgc291cmNlLm9uKCdjbG9zZScsIGNsZWFudXApO1xuXG4gIGRlc3Qub24oJ2Nsb3NlJywgY2xlYW51cCk7XG5cbiAgZGVzdC5lbWl0KCdwaXBlJywgc291cmNlKTtcblxuICAvLyBBbGxvdyBmb3IgdW5peC1saWtlIHVzYWdlOiBBLnBpcGUoQikucGlwZShDKVxuICByZXR1cm4gZGVzdDtcbn07XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcblxudmFyIGlzQnVmZmVyRW5jb2RpbmcgPSBCdWZmZXIuaXNFbmNvZGluZ1xuICB8fCBmdW5jdGlvbihlbmNvZGluZykge1xuICAgICAgIHN3aXRjaCAoZW5jb2RpbmcgJiYgZW5jb2RpbmcudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgY2FzZSAnaGV4JzogY2FzZSAndXRmOCc6IGNhc2UgJ3V0Zi04JzogY2FzZSAnYXNjaWknOiBjYXNlICdiaW5hcnknOiBjYXNlICdiYXNlNjQnOiBjYXNlICd1Y3MyJzogY2FzZSAndWNzLTInOiBjYXNlICd1dGYxNmxlJzogY2FzZSAndXRmLTE2bGUnOiBjYXNlICdyYXcnOiByZXR1cm4gdHJ1ZTtcbiAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBmYWxzZTtcbiAgICAgICB9XG4gICAgIH1cblxuXG5mdW5jdGlvbiBhc3NlcnRFbmNvZGluZyhlbmNvZGluZykge1xuICBpZiAoZW5jb2RpbmcgJiYgIWlzQnVmZmVyRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuICB9XG59XG5cbi8vIFN0cmluZ0RlY29kZXIgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBlZmZpY2llbnRseSBzcGxpdHRpbmcgYSBzZXJpZXMgb2Zcbi8vIGJ1ZmZlcnMgaW50byBhIHNlcmllcyBvZiBKUyBzdHJpbmdzIHdpdGhvdXQgYnJlYWtpbmcgYXBhcnQgbXVsdGktYnl0ZVxuLy8gY2hhcmFjdGVycy4gQ0VTVS04IGlzIGhhbmRsZWQgYXMgcGFydCBvZiB0aGUgVVRGLTggZW5jb2RpbmcuXG4vL1xuLy8gQFRPRE8gSGFuZGxpbmcgYWxsIGVuY29kaW5ncyBpbnNpZGUgYSBzaW5nbGUgb2JqZWN0IG1ha2VzIGl0IHZlcnkgZGlmZmljdWx0XG4vLyB0byByZWFzb24gYWJvdXQgdGhpcyBjb2RlLCBzbyBpdCBzaG91bGQgYmUgc3BsaXQgdXAgaW4gdGhlIGZ1dHVyZS5cbi8vIEBUT0RPIFRoZXJlIHNob3VsZCBiZSBhIHV0Zjgtc3RyaWN0IGVuY29kaW5nIHRoYXQgcmVqZWN0cyBpbnZhbGlkIFVURi04IGNvZGVcbi8vIHBvaW50cyBhcyB1c2VkIGJ5IENFU1UtOC5cbnZhciBTdHJpbmdEZWNvZGVyID0gZXhwb3J0cy5TdHJpbmdEZWNvZGVyID0gZnVuY3Rpb24oZW5jb2RpbmcpIHtcbiAgdGhpcy5lbmNvZGluZyA9IChlbmNvZGluZyB8fCAndXRmOCcpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXS8sICcnKTtcbiAgYXNzZXJ0RW5jb2RpbmcoZW5jb2RpbmcpO1xuICBzd2l0Y2ggKHRoaXMuZW5jb2RpbmcpIHtcbiAgICBjYXNlICd1dGY4JzpcbiAgICAgIC8vIENFU1UtOCByZXByZXNlbnRzIGVhY2ggb2YgU3Vycm9nYXRlIFBhaXIgYnkgMy1ieXRlc1xuICAgICAgdGhpcy5zdXJyb2dhdGVTaXplID0gMztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgLy8gVVRGLTE2IHJlcHJlc2VudHMgZWFjaCBvZiBTdXJyb2dhdGUgUGFpciBieSAyLWJ5dGVzXG4gICAgICB0aGlzLnN1cnJvZ2F0ZVNpemUgPSAyO1xuICAgICAgdGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhciA9IHV0ZjE2RGV0ZWN0SW5jb21wbGV0ZUNoYXI7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgLy8gQmFzZS02NCBzdG9yZXMgMyBieXRlcyBpbiA0IGNoYXJzLCBhbmQgcGFkcyB0aGUgcmVtYWluZGVyLlxuICAgICAgdGhpcy5zdXJyb2dhdGVTaXplID0gMztcbiAgICAgIHRoaXMuZGV0ZWN0SW5jb21wbGV0ZUNoYXIgPSBiYXNlNjREZXRlY3RJbmNvbXBsZXRlQ2hhcjtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aGlzLndyaXRlID0gcGFzc1Rocm91Z2hXcml0ZTtcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEVub3VnaCBzcGFjZSB0byBzdG9yZSBhbGwgYnl0ZXMgb2YgYSBzaW5nbGUgY2hhcmFjdGVyLiBVVEYtOCBuZWVkcyA0XG4gIC8vIGJ5dGVzLCBidXQgQ0VTVS04IG1heSByZXF1aXJlIHVwIHRvIDYgKDMgYnl0ZXMgcGVyIHN1cnJvZ2F0ZSkuXG4gIHRoaXMuY2hhckJ1ZmZlciA9IG5ldyBCdWZmZXIoNik7XG4gIC8vIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBmb3IgdGhlIGN1cnJlbnQgaW5jb21wbGV0ZSBtdWx0aS1ieXRlIGNoYXJhY3Rlci5cbiAgdGhpcy5jaGFyUmVjZWl2ZWQgPSAwO1xuICAvLyBOdW1iZXIgb2YgYnl0ZXMgZXhwZWN0ZWQgZm9yIHRoZSBjdXJyZW50IGluY29tcGxldGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuXG4gIHRoaXMuY2hhckxlbmd0aCA9IDA7XG59O1xuXG5cbi8vIHdyaXRlIGRlY29kZXMgdGhlIGdpdmVuIGJ1ZmZlciBhbmQgcmV0dXJucyBpdCBhcyBKUyBzdHJpbmcgdGhhdCBpc1xuLy8gZ3VhcmFudGVlZCB0byBub3QgY29udGFpbiBhbnkgcGFydGlhbCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuIEFueSBwYXJ0aWFsXG4vLyBjaGFyYWN0ZXIgZm91bmQgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGlzIGJ1ZmZlcmVkIHVwLCBhbmQgd2lsbCBiZVxuLy8gcmV0dXJuZWQgd2hlbiBjYWxsaW5nIHdyaXRlIGFnYWluIHdpdGggdGhlIHJlbWFpbmluZyBieXRlcy5cbi8vXG4vLyBOb3RlOiBDb252ZXJ0aW5nIGEgQnVmZmVyIGNvbnRhaW5pbmcgYW4gb3JwaGFuIHN1cnJvZ2F0ZSB0byBhIFN0cmluZ1xuLy8gY3VycmVudGx5IHdvcmtzLCBidXQgY29udmVydGluZyBhIFN0cmluZyB0byBhIEJ1ZmZlciAodmlhIGBuZXcgQnVmZmVyYCwgb3Jcbi8vIEJ1ZmZlciN3cml0ZSkgd2lsbCByZXBsYWNlIGluY29tcGxldGUgc3Vycm9nYXRlcyB3aXRoIHRoZSB1bmljb2RlXG4vLyByZXBsYWNlbWVudCBjaGFyYWN0ZXIuIFNlZSBodHRwczovL2NvZGVyZXZpZXcuY2hyb21pdW0ub3JnLzEyMTE3MzAwOS8gLlxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWZmZXIpIHtcbiAgdmFyIGNoYXJTdHIgPSAnJztcbiAgLy8gaWYgb3VyIGxhc3Qgd3JpdGUgZW5kZWQgd2l0aCBhbiBpbmNvbXBsZXRlIG11bHRpYnl0ZSBjaGFyYWN0ZXJcbiAgd2hpbGUgKHRoaXMuY2hhckxlbmd0aCkge1xuICAgIC8vIGRldGVybWluZSBob3cgbWFueSByZW1haW5pbmcgYnl0ZXMgdGhpcyBidWZmZXIgaGFzIHRvIG9mZmVyIGZvciB0aGlzIGNoYXJcbiAgICB2YXIgYXZhaWxhYmxlID0gKGJ1ZmZlci5sZW5ndGggPj0gdGhpcy5jaGFyTGVuZ3RoIC0gdGhpcy5jaGFyUmVjZWl2ZWQpID9cbiAgICAgICAgdGhpcy5jaGFyTGVuZ3RoIC0gdGhpcy5jaGFyUmVjZWl2ZWQgOlxuICAgICAgICBidWZmZXIubGVuZ3RoO1xuXG4gICAgLy8gYWRkIHRoZSBuZXcgYnl0ZXMgdG8gdGhlIGNoYXIgYnVmZmVyXG4gICAgYnVmZmVyLmNvcHkodGhpcy5jaGFyQnVmZmVyLCB0aGlzLmNoYXJSZWNlaXZlZCwgMCwgYXZhaWxhYmxlKTtcbiAgICB0aGlzLmNoYXJSZWNlaXZlZCArPSBhdmFpbGFibGU7XG5cbiAgICBpZiAodGhpcy5jaGFyUmVjZWl2ZWQgPCB0aGlzLmNoYXJMZW5ndGgpIHtcbiAgICAgIC8vIHN0aWxsIG5vdCBlbm91Z2ggY2hhcnMgaW4gdGhpcyBidWZmZXI/IHdhaXQgZm9yIG1vcmUgLi4uXG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGJ5dGVzIGJlbG9uZ2luZyB0byB0aGUgY3VycmVudCBjaGFyYWN0ZXIgZnJvbSB0aGUgYnVmZmVyXG4gICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKGF2YWlsYWJsZSwgYnVmZmVyLmxlbmd0aCk7XG5cbiAgICAvLyBnZXQgdGhlIGNoYXJhY3RlciB0aGF0IHdhcyBzcGxpdFxuICAgIGNoYXJTdHIgPSB0aGlzLmNoYXJCdWZmZXIuc2xpY2UoMCwgdGhpcy5jaGFyTGVuZ3RoKS50b1N0cmluZyh0aGlzLmVuY29kaW5nKTtcblxuICAgIC8vIENFU1UtODogbGVhZCBzdXJyb2dhdGUgKEQ4MDAtREJGRikgaXMgYWxzbyB0aGUgaW5jb21wbGV0ZSBjaGFyYWN0ZXJcbiAgICB2YXIgY2hhckNvZGUgPSBjaGFyU3RyLmNoYXJDb2RlQXQoY2hhclN0ci5sZW5ndGggLSAxKTtcbiAgICBpZiAoY2hhckNvZGUgPj0gMHhEODAwICYmIGNoYXJDb2RlIDw9IDB4REJGRikge1xuICAgICAgdGhpcy5jaGFyTGVuZ3RoICs9IHRoaXMuc3Vycm9nYXRlU2l6ZTtcbiAgICAgIGNoYXJTdHIgPSAnJztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB0aGlzLmNoYXJSZWNlaXZlZCA9IHRoaXMuY2hhckxlbmd0aCA9IDA7XG5cbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gbW9yZSBieXRlcyBpbiB0aGlzIGJ1ZmZlciwganVzdCBlbWl0IG91ciBjaGFyXG4gICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBjaGFyU3RyO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuXG4gIC8vIGRldGVybWluZSBhbmQgc2V0IGNoYXJMZW5ndGggLyBjaGFyUmVjZWl2ZWRcbiAgdGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhcihidWZmZXIpO1xuXG4gIHZhciBlbmQgPSBidWZmZXIubGVuZ3RoO1xuICBpZiAodGhpcy5jaGFyTGVuZ3RoKSB7XG4gICAgLy8gYnVmZmVyIHRoZSBpbmNvbXBsZXRlIGNoYXJhY3RlciBieXRlcyB3ZSBnb3RcbiAgICBidWZmZXIuY29weSh0aGlzLmNoYXJCdWZmZXIsIDAsIGJ1ZmZlci5sZW5ndGggLSB0aGlzLmNoYXJSZWNlaXZlZCwgZW5kKTtcbiAgICBlbmQgLT0gdGhpcy5jaGFyUmVjZWl2ZWQ7XG4gIH1cblxuICBjaGFyU3RyICs9IGJ1ZmZlci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCBlbmQpO1xuXG4gIHZhciBlbmQgPSBjaGFyU3RyLmxlbmd0aCAtIDE7XG4gIHZhciBjaGFyQ29kZSA9IGNoYXJTdHIuY2hhckNvZGVBdChlbmQpO1xuICAvLyBDRVNVLTg6IGxlYWQgc3Vycm9nYXRlIChEODAwLURCRkYpIGlzIGFsc28gdGhlIGluY29tcGxldGUgY2hhcmFjdGVyXG4gIGlmIChjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGKSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLnN1cnJvZ2F0ZVNpemU7XG4gICAgdGhpcy5jaGFyTGVuZ3RoICs9IHNpemU7XG4gICAgdGhpcy5jaGFyUmVjZWl2ZWQgKz0gc2l6ZTtcbiAgICB0aGlzLmNoYXJCdWZmZXIuY29weSh0aGlzLmNoYXJCdWZmZXIsIHNpemUsIDAsIHNpemUpO1xuICAgIGJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlciwgMCwgMCwgc2l6ZSk7XG4gICAgcmV0dXJuIGNoYXJTdHIuc3Vic3RyaW5nKDAsIGVuZCk7XG4gIH1cblxuICAvLyBvciBqdXN0IGVtaXQgdGhlIGNoYXJTdHJcbiAgcmV0dXJuIGNoYXJTdHI7XG59O1xuXG4vLyBkZXRlY3RJbmNvbXBsZXRlQ2hhciBkZXRlcm1pbmVzIGlmIHRoZXJlIGlzIGFuIGluY29tcGxldGUgVVRGLTggY2hhcmFjdGVyIGF0XG4vLyB0aGUgZW5kIG9mIHRoZSBnaXZlbiBidWZmZXIuIElmIHNvLCBpdCBzZXRzIHRoaXMuY2hhckxlbmd0aCB0byB0aGUgYnl0ZVxuLy8gbGVuZ3RoIHRoYXQgY2hhcmFjdGVyLCBhbmQgc2V0cyB0aGlzLmNoYXJSZWNlaXZlZCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzXG4vLyB0aGF0IGFyZSBhdmFpbGFibGUgZm9yIHRoaXMgY2hhcmFjdGVyLlxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZGV0ZWN0SW5jb21wbGV0ZUNoYXIgPSBmdW5jdGlvbihidWZmZXIpIHtcbiAgLy8gZGV0ZXJtaW5lIGhvdyBtYW55IGJ5dGVzIHdlIGhhdmUgdG8gY2hlY2sgYXQgdGhlIGVuZCBvZiB0aGlzIGJ1ZmZlclxuICB2YXIgaSA9IChidWZmZXIubGVuZ3RoID49IDMpID8gMyA6IGJ1ZmZlci5sZW5ndGg7XG5cbiAgLy8gRmlndXJlIG91dCBpZiBvbmUgb2YgdGhlIGxhc3QgaSBieXRlcyBvZiBvdXIgYnVmZmVyIGFubm91bmNlcyBhblxuICAvLyBpbmNvbXBsZXRlIGNoYXIuXG4gIGZvciAoOyBpID4gMDsgaS0tKSB7XG4gICAgdmFyIGMgPSBidWZmZXJbYnVmZmVyLmxlbmd0aCAtIGldO1xuXG4gICAgLy8gU2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTgjRGVzY3JpcHRpb25cblxuICAgIC8vIDExMFhYWFhYXG4gICAgaWYgKGkgPT0gMSAmJiBjID4+IDUgPT0gMHgwNikge1xuICAgICAgdGhpcy5jaGFyTGVuZ3RoID0gMjtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIDExMTBYWFhYXG4gICAgaWYgKGkgPD0gMiAmJiBjID4+IDQgPT0gMHgwRSkge1xuICAgICAgdGhpcy5jaGFyTGVuZ3RoID0gMztcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIDExMTEwWFhYXG4gICAgaWYgKGkgPD0gMyAmJiBjID4+IDMgPT0gMHgxRSkge1xuICAgICAgdGhpcy5jaGFyTGVuZ3RoID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB0aGlzLmNoYXJSZWNlaXZlZCA9IGk7XG59O1xuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbihidWZmZXIpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBpZiAoYnVmZmVyICYmIGJ1ZmZlci5sZW5ndGgpXG4gICAgcmVzID0gdGhpcy53cml0ZShidWZmZXIpO1xuXG4gIGlmICh0aGlzLmNoYXJSZWNlaXZlZCkge1xuICAgIHZhciBjciA9IHRoaXMuY2hhclJlY2VpdmVkO1xuICAgIHZhciBidWYgPSB0aGlzLmNoYXJCdWZmZXI7XG4gICAgdmFyIGVuYyA9IHRoaXMuZW5jb2Rpbmc7XG4gICAgcmVzICs9IGJ1Zi5zbGljZSgwLCBjcikudG9TdHJpbmcoZW5jKTtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuXG5mdW5jdGlvbiBwYXNzVGhyb3VnaFdyaXRlKGJ1ZmZlcikge1xuICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO1xufVxuXG5mdW5jdGlvbiB1dGYxNkRldGVjdEluY29tcGxldGVDaGFyKGJ1ZmZlcikge1xuICB0aGlzLmNoYXJSZWNlaXZlZCA9IGJ1ZmZlci5sZW5ndGggJSAyO1xuICB0aGlzLmNoYXJMZW5ndGggPSB0aGlzLmNoYXJSZWNlaXZlZCA/IDIgOiAwO1xufVxuXG5mdW5jdGlvbiBiYXNlNjREZXRlY3RJbmNvbXBsZXRlQ2hhcihidWZmZXIpIHtcbiAgdGhpcy5jaGFyUmVjZWl2ZWQgPSBidWZmZXIubGVuZ3RoICUgMztcbiAgdGhpcy5jaGFyTGVuZ3RoID0gdGhpcy5jaGFyUmVjZWl2ZWQgPyAzIDogMDtcbn1cbiIsIlxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlcHJlY2F0ZTtcblxuLyoqXG4gKiBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuICogUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbiAqXG4gKiBJZiBgbG9jYWxTdG9yYWdlLm5vRGVwcmVjYXRpb24gPSB0cnVlYCBpcyBzZXQsIHRoZW4gaXQgaXMgYSBuby1vcC5cbiAqXG4gKiBJZiBgbG9jYWxTdG9yYWdlLnRocm93RGVwcmVjYXRpb24gPSB0cnVlYCBpcyBzZXQsIHRoZW4gZGVwcmVjYXRlZCBmdW5jdGlvbnNcbiAqIHdpbGwgdGhyb3cgYW4gRXJyb3Igd2hlbiBpbnZva2VkLlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2UudHJhY2VEZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBkZXByZWNhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCBpbnZva2UgYGNvbnNvbGUudHJhY2UoKWAgaW5zdGVhZCBvZiBgY29uc29sZS5lcnJvcigpYC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIHRoZSBmdW5jdGlvbiB0byBkZXByZWNhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgLSB0aGUgc3RyaW5nIHRvIHByaW50IHRvIHRoZSBjb25zb2xlIHdoZW4gYGZuYCBpcyBpbnZva2VkXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IGEgbmV3IFwiZGVwcmVjYXRlZFwiIHZlcnNpb24gb2YgYGZuYFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBkZXByZWNhdGUgKGZuLCBtc2cpIHtcbiAgaWYgKGNvbmZpZygnbm9EZXByZWNhdGlvbicpKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgIGlmICghd2FybmVkKSB7XG4gICAgICBpZiAoY29uZmlnKCd0aHJvd0RlcHJlY2F0aW9uJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZygndHJhY2VEZXByZWNhdGlvbicpKSB7XG4gICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2Fybihtc2cpO1xuICAgICAgfVxuICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgYGxvY2FsU3RvcmFnZWAgZm9yIGJvb2xlYW4gdmFsdWVzIGZvciB0aGUgZ2l2ZW4gYG5hbWVgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvbmZpZyAobmFtZSkge1xuICAvLyBhY2Nlc3NpbmcgZ2xvYmFsLmxvY2FsU3RvcmFnZSBjYW4gdHJpZ2dlciBhIERPTUV4Y2VwdGlvbiBpbiBzYW5kYm94ZWQgaWZyYW1lc1xuICB0cnkge1xuICAgIGlmICghZ2xvYmFsLmxvY2FsU3RvcmFnZSkgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB2YWwgPSBnbG9iYWwubG9jYWxTdG9yYWdlW25hbWVdO1xuICBpZiAobnVsbCA9PSB2YWwpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIFN0cmluZyh2YWwpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNCdWZmZXIoYXJnKSB7XG4gIHJldHVybiBhcmcgJiYgdHlwZW9mIGFyZyA9PT0gJ29iamVjdCdcbiAgICAmJiB0eXBlb2YgYXJnLmNvcHkgPT09ICdmdW5jdGlvbidcbiAgICAmJiB0eXBlb2YgYXJnLmZpbGwgPT09ICdmdW5jdGlvbidcbiAgICAmJiB0eXBlb2YgYXJnLnJlYWRVSW50OCA9PT0gJ2Z1bmN0aW9uJztcbn0iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIGZvcm1hdFJlZ0V4cCA9IC8lW3NkaiVdL2c7XG5leHBvcnRzLmZvcm1hdCA9IGZ1bmN0aW9uKGYpIHtcbiAgaWYgKCFpc1N0cmluZyhmKSkge1xuICAgIHZhciBvYmplY3RzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9iamVjdHMucHVzaChpbnNwZWN0KGFyZ3VtZW50c1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0cy5qb2luKCcgJyk7XG4gIH1cblxuICB2YXIgaSA9IDE7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBzdHIgPSBTdHJpbmcoZikucmVwbGFjZShmb3JtYXRSZWdFeHAsIGZ1bmN0aW9uKHgpIHtcbiAgICBpZiAoeCA9PT0gJyUlJykgcmV0dXJuICclJztcbiAgICBpZiAoaSA+PSBsZW4pIHJldHVybiB4O1xuICAgIHN3aXRjaCAoeCkge1xuICAgICAgY2FzZSAnJXMnOiByZXR1cm4gU3RyaW5nKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclZCc6IHJldHVybiBOdW1iZXIoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVqJzpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJnc1tpKytdKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfSk7XG4gIGZvciAodmFyIHggPSBhcmdzW2ldOyBpIDwgbGVuOyB4ID0gYXJnc1srK2ldKSB7XG4gICAgaWYgKGlzTnVsbCh4KSB8fCAhaXNPYmplY3QoeCkpIHtcbiAgICAgIHN0ciArPSAnICcgKyB4O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgKz0gJyAnICsgaW5zcGVjdCh4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn07XG5cblxuLy8gTWFyayB0aGF0IGEgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZC5cbi8vIFJldHVybnMgYSBtb2RpZmllZCBmdW5jdGlvbiB3aGljaCB3YXJucyBvbmNlIGJ5IGRlZmF1bHQuXG4vLyBJZiAtLW5vLWRlcHJlY2F0aW9uIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuZXhwb3J0cy5kZXByZWNhdGUgPSBmdW5jdGlvbihmbiwgbXNnKSB7XG4gIC8vIEFsbG93IGZvciBkZXByZWNhdGluZyB0aGluZ3MgaW4gdGhlIHByb2Nlc3Mgb2Ygc3RhcnRpbmcgdXAuXG4gIGlmIChpc1VuZGVmaW5lZChnbG9iYWwucHJvY2VzcykpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy5kZXByZWNhdGUoZm4sIG1zZykuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKHByb2Nlc3Mubm9EZXByZWNhdGlvbiA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgaWYgKHByb2Nlc3MudGhyb3dEZXByZWNhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy50cmFjZURlcHJlY2F0aW9uKSB7XG4gICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGRlcHJlY2F0ZWQ7XG59O1xuXG5cbnZhciBkZWJ1Z3MgPSB7fTtcbnZhciBkZWJ1Z0Vudmlyb247XG5leHBvcnRzLmRlYnVnbG9nID0gZnVuY3Rpb24oc2V0KSB7XG4gIGlmIChpc1VuZGVmaW5lZChkZWJ1Z0Vudmlyb24pKVxuICAgIGRlYnVnRW52aXJvbiA9IHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJyc7XG4gIHNldCA9IHNldC50b1VwcGVyQ2FzZSgpO1xuICBpZiAoIWRlYnVnc1tzZXRdKSB7XG4gICAgaWYgKG5ldyBSZWdFeHAoJ1xcXFxiJyArIHNldCArICdcXFxcYicsICdpJykudGVzdChkZWJ1Z0Vudmlyb24pKSB7XG4gICAgICB2YXIgcGlkID0gcHJvY2Vzcy5waWQ7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbXNnID0gZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignJXMgJWQ6ICVzJywgc2V0LCBwaWQsIG1zZyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge307XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWJ1Z3Nbc2V0XTtcbn07XG5cblxuLyoqXG4gKiBFY2hvcyB0aGUgdmFsdWUgb2YgYSB2YWx1ZS4gVHJ5cyB0byBwcmludCB0aGUgdmFsdWUgb3V0XG4gKiBpbiB0aGUgYmVzdCB3YXkgcG9zc2libGUgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcHJpbnQgb3V0LlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uYWwgb3B0aW9ucyBvYmplY3QgdGhhdCBhbHRlcnMgdGhlIG91dHB1dC5cbiAqL1xuLyogbGVnYWN5OiBvYmosIHNob3dIaWRkZW4sIGRlcHRoLCBjb2xvcnMqL1xuZnVuY3Rpb24gaW5zcGVjdChvYmosIG9wdHMpIHtcbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIHZhciBjdHggPSB7XG4gICAgc2VlbjogW10sXG4gICAgc3R5bGl6ZTogc3R5bGl6ZU5vQ29sb3JcbiAgfTtcbiAgLy8gbGVnYWN5Li4uXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDMpIGN0eC5kZXB0aCA9IGFyZ3VtZW50c1syXTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gNCkgY3R4LmNvbG9ycyA9IGFyZ3VtZW50c1szXTtcbiAgaWYgKGlzQm9vbGVhbihvcHRzKSkge1xuICAgIC8vIGxlZ2FjeS4uLlxuICAgIGN0eC5zaG93SGlkZGVuID0gb3B0cztcbiAgfSBlbHNlIGlmIChvcHRzKSB7XG4gICAgLy8gZ290IGFuIFwib3B0aW9uc1wiIG9iamVjdFxuICAgIGV4cG9ydHMuX2V4dGVuZChjdHgsIG9wdHMpO1xuICB9XG4gIC8vIHNldCBkZWZhdWx0IG9wdGlvbnNcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5zaG93SGlkZGVuKSkgY3R4LnNob3dIaWRkZW4gPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5kZXB0aCkpIGN0eC5kZXB0aCA9IDI7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY29sb3JzKSkgY3R4LmNvbG9ycyA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmN1c3RvbUluc3BlY3QpKSBjdHguY3VzdG9tSW5zcGVjdCA9IHRydWU7XG4gIGlmIChjdHguY29sb3JzKSBjdHguc3R5bGl6ZSA9IHN0eWxpemVXaXRoQ29sb3I7XG4gIHJldHVybiBmb3JtYXRWYWx1ZShjdHgsIG9iaiwgY3R4LmRlcHRoKTtcbn1cbmV4cG9ydHMuaW5zcGVjdCA9IGluc3BlY3Q7XG5cblxuLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2VzY2FwZV9jb2RlI2dyYXBoaWNzXG5pbnNwZWN0LmNvbG9ycyA9IHtcbiAgJ2JvbGQnIDogWzEsIDIyXSxcbiAgJ2l0YWxpYycgOiBbMywgMjNdLFxuICAndW5kZXJsaW5lJyA6IFs0LCAyNF0sXG4gICdpbnZlcnNlJyA6IFs3LCAyN10sXG4gICd3aGl0ZScgOiBbMzcsIDM5XSxcbiAgJ2dyZXknIDogWzkwLCAzOV0sXG4gICdibGFjaycgOiBbMzAsIDM5XSxcbiAgJ2JsdWUnIDogWzM0LCAzOV0sXG4gICdjeWFuJyA6IFszNiwgMzldLFxuICAnZ3JlZW4nIDogWzMyLCAzOV0sXG4gICdtYWdlbnRhJyA6IFszNSwgMzldLFxuICAncmVkJyA6IFszMSwgMzldLFxuICAneWVsbG93JyA6IFszMywgMzldXG59O1xuXG4vLyBEb24ndCB1c2UgJ2JsdWUnIG5vdCB2aXNpYmxlIG9uIGNtZC5leGVcbmluc3BlY3Quc3R5bGVzID0ge1xuICAnc3BlY2lhbCc6ICdjeWFuJyxcbiAgJ251bWJlcic6ICd5ZWxsb3cnLFxuICAnYm9vbGVhbic6ICd5ZWxsb3cnLFxuICAndW5kZWZpbmVkJzogJ2dyZXknLFxuICAnbnVsbCc6ICdib2xkJyxcbiAgJ3N0cmluZyc6ICdncmVlbicsXG4gICdkYXRlJzogJ21hZ2VudGEnLFxuICAvLyBcIm5hbWVcIjogaW50ZW50aW9uYWxseSBub3Qgc3R5bGluZ1xuICAncmVnZXhwJzogJ3JlZCdcbn07XG5cblxuZnVuY3Rpb24gc3R5bGl6ZVdpdGhDb2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICB2YXIgc3R5bGUgPSBpbnNwZWN0LnN0eWxlc1tzdHlsZVR5cGVdO1xuXG4gIGlmIChzdHlsZSkge1xuICAgIHJldHVybiAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzBdICsgJ20nICsgc3RyICtcbiAgICAgICAgICAgJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVsxXSArICdtJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG59XG5cblxuZnVuY3Rpb24gc3R5bGl6ZU5vQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgcmV0dXJuIHN0cjtcbn1cblxuXG5mdW5jdGlvbiBhcnJheVRvSGFzaChhcnJheSkge1xuICB2YXIgaGFzaCA9IHt9O1xuXG4gIGFycmF5LmZvckVhY2goZnVuY3Rpb24odmFsLCBpZHgpIHtcbiAgICBoYXNoW3ZhbF0gPSB0cnVlO1xuICB9KTtcblxuICByZXR1cm4gaGFzaDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRWYWx1ZShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMpIHtcbiAgLy8gUHJvdmlkZSBhIGhvb2sgZm9yIHVzZXItc3BlY2lmaWVkIGluc3BlY3QgZnVuY3Rpb25zLlxuICAvLyBDaGVjayB0aGF0IHZhbHVlIGlzIGFuIG9iamVjdCB3aXRoIGFuIGluc3BlY3QgZnVuY3Rpb24gb24gaXRcbiAgaWYgKGN0eC5jdXN0b21JbnNwZWN0ICYmXG4gICAgICB2YWx1ZSAmJlxuICAgICAgaXNGdW5jdGlvbih2YWx1ZS5pbnNwZWN0KSAmJlxuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgdXRpbCBtb2R1bGUsIGl0J3MgaW5zcGVjdCBmdW5jdGlvbiBpcyBzcGVjaWFsXG4gICAgICB2YWx1ZS5pbnNwZWN0ICE9PSBleHBvcnRzLmluc3BlY3QgJiZcbiAgICAgIC8vIEFsc28gZmlsdGVyIG91dCBhbnkgcHJvdG90eXBlIG9iamVjdHMgdXNpbmcgdGhlIGNpcmN1bGFyIGNoZWNrLlxuICAgICAgISh2YWx1ZS5jb25zdHJ1Y3RvciAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgPT09IHZhbHVlKSkge1xuICAgIHZhciByZXQgPSB2YWx1ZS5pbnNwZWN0KHJlY3Vyc2VUaW1lcywgY3R4KTtcbiAgICBpZiAoIWlzU3RyaW5nKHJldCkpIHtcbiAgICAgIHJldCA9IGZvcm1hdFZhbHVlKGN0eCwgcmV0LCByZWN1cnNlVGltZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLy8gUHJpbWl0aXZlIHR5cGVzIGNhbm5vdCBoYXZlIHByb3BlcnRpZXNcbiAgdmFyIHByaW1pdGl2ZSA9IGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKTtcbiAgaWYgKHByaW1pdGl2ZSkge1xuICAgIHJldHVybiBwcmltaXRpdmU7XG4gIH1cblxuICAvLyBMb29rIHVwIHRoZSBrZXlzIG9mIHRoZSBvYmplY3QuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICB2YXIgdmlzaWJsZUtleXMgPSBhcnJheVRvSGFzaChrZXlzKTtcblxuICBpZiAoY3R4LnNob3dIaWRkZW4pIHtcbiAgICBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpO1xuICB9XG5cbiAgLy8gSUUgZG9lc24ndCBtYWtlIGVycm9yIGZpZWxkcyBub24tZW51bWVyYWJsZVxuICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvZHd3NTJzYnQodj12cy45NCkuYXNweFxuICBpZiAoaXNFcnJvcih2YWx1ZSlcbiAgICAgICYmIChrZXlzLmluZGV4T2YoJ21lc3NhZ2UnKSA+PSAwIHx8IGtleXMuaW5kZXhPZignZGVzY3JpcHRpb24nKSA+PSAwKSkge1xuICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICAvLyBTb21lIHR5cGUgb2Ygb2JqZWN0IHdpdGhvdXQgcHJvcGVydGllcyBjYW4gYmUgc2hvcnRjdXR0ZWQuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgdmFyIG5hbWUgPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW0Z1bmN0aW9uJyArIG5hbWUgKyAnXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfVxuICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdkYXRlJyk7XG4gICAgfVxuICAgIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgYmFzZSA9ICcnLCBhcnJheSA9IGZhbHNlLCBicmFjZXMgPSBbJ3snLCAnfSddO1xuXG4gIC8vIE1ha2UgQXJyYXkgc2F5IHRoYXQgdGhleSBhcmUgQXJyYXlcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgYXJyYXkgPSB0cnVlO1xuICAgIGJyYWNlcyA9IFsnWycsICddJ107XG4gIH1cblxuICAvLyBNYWtlIGZ1bmN0aW9ucyBzYXkgdGhhdCB0aGV5IGFyZSBmdW5jdGlvbnNcbiAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgdmFyIG4gPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICBiYXNlID0gJyBbRnVuY3Rpb24nICsgbiArICddJztcbiAgfVxuXG4gIC8vIE1ha2UgUmVnRXhwcyBzYXkgdGhhdCB0aGV5IGFyZSBSZWdFeHBzXG4gIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZGF0ZXMgd2l0aCBwcm9wZXJ0aWVzIGZpcnN0IHNheSB0aGUgZGF0ZVxuICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZXJyb3Igd2l0aCBtZXNzYWdlIGZpcnN0IHNheSB0aGUgZXJyb3JcbiAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiAoIWFycmF5IHx8IHZhbHVlLmxlbmd0aCA9PSAwKSkge1xuICAgIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgYnJhY2VzWzFdO1xuICB9XG5cbiAgaWYgKHJlY3Vyc2VUaW1lcyA8IDApIHtcbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tPYmplY3RdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cblxuICBjdHguc2Vlbi5wdXNoKHZhbHVlKTtcblxuICB2YXIgb3V0cHV0O1xuICBpZiAoYXJyYXkpIHtcbiAgICBvdXRwdXQgPSBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKTtcbiAgfSBlbHNlIHtcbiAgICBvdXRwdXQgPSBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGN0eC5zZWVuLnBvcCgpO1xuXG4gIHJldHVybiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ3VuZGVmaW5lZCcsICd1bmRlZmluZWQnKTtcbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHZhciBzaW1wbGUgPSAnXFwnJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKS5yZXBsYWNlKC9eXCJ8XCIkL2csICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKSArICdcXCcnO1xuICAgIHJldHVybiBjdHguc3R5bGl6ZShzaW1wbGUsICdzdHJpbmcnKTtcbiAgfVxuICBpZiAoaXNOdW1iZXIodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnbnVtYmVyJyk7XG4gIGlmIChpc0Jvb2xlYW4odmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnYm9vbGVhbicpO1xuICAvLyBGb3Igc29tZSByZWFzb24gdHlwZW9mIG51bGwgaXMgXCJvYmplY3RcIiwgc28gc3BlY2lhbCBjYXNlIGhlcmUuXG4gIGlmIChpc051bGwodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnbnVsbCcsICdudWxsJyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0RXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuICdbJyArIEVycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSArICddJztcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkodmFsdWUsIFN0cmluZyhpKSkpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAgU3RyaW5nKGkpLCB0cnVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5wdXNoKCcnKTtcbiAgICB9XG4gIH1cbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgIGlmICgha2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBrZXksIHRydWUpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpIHtcbiAgdmFyIG5hbWUsIHN0ciwgZGVzYztcbiAgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsIGtleSkgfHwgeyB2YWx1ZTogdmFsdWVba2V5XSB9O1xuICBpZiAoZGVzYy5nZXQpIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyL1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmICghaGFzT3duUHJvcGVydHkodmlzaWJsZUtleXMsIGtleSkpIHtcbiAgICBuYW1lID0gJ1snICsga2V5ICsgJ10nO1xuICB9XG4gIGlmICghc3RyKSB7XG4gICAgaWYgKGN0eC5zZWVuLmluZGV4T2YoZGVzYy52YWx1ZSkgPCAwKSB7XG4gICAgICBpZiAoaXNOdWxsKHJlY3Vyc2VUaW1lcykpIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgcmVjdXJzZVRpbWVzIC0gMSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyLmluZGV4T2YoJ1xcbicpID4gLTEpIHtcbiAgICAgICAgaWYgKGFycmF5KSB7XG4gICAgICAgICAgc3RyID0gc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpLnN1YnN0cigyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHIgPSAnXFxuJyArIHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tDaXJjdWxhcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNVbmRlZmluZWQobmFtZSkpIHtcbiAgICBpZiAoYXJyYXkgJiYga2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgbmFtZSA9IEpTT04uc3RyaW5naWZ5KCcnICsga2V5KTtcbiAgICBpZiAobmFtZS5tYXRjaCgvXlwiKFthLXpBLVpfXVthLXpBLVpfMC05XSopXCIkLykpIHtcbiAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cigxLCBuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICduYW1lJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXlwifFwiJCkvZywgXCInXCIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICdzdHJpbmcnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmFtZSArICc6ICcgKyBzdHI7XG59XG5cblxuZnVuY3Rpb24gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpIHtcbiAgdmFyIG51bUxpbmVzRXN0ID0gMDtcbiAgdmFyIGxlbmd0aCA9IG91dHB1dC5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgY3VyKSB7XG4gICAgbnVtTGluZXNFc3QrKztcbiAgICBpZiAoY3VyLmluZGV4T2YoJ1xcbicpID49IDApIG51bUxpbmVzRXN0Kys7XG4gICAgcmV0dXJuIHByZXYgKyBjdXIucmVwbGFjZSgvXFx1MDAxYlxcW1xcZFxcZD9tL2csICcnKS5sZW5ndGggKyAxO1xuICB9LCAwKTtcblxuICBpZiAobGVuZ3RoID4gNjApIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICtcbiAgICAgICAgICAgKGJhc2UgPT09ICcnID8gJycgOiBiYXNlICsgJ1xcbiAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIG91dHB1dC5qb2luKCcsXFxuICAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIGJyYWNlc1sxXTtcbiAgfVxuXG4gIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgJyAnICsgb3V0cHV0LmpvaW4oJywgJykgKyAnICcgKyBicmFjZXNbMV07XG59XG5cblxuLy8gTk9URTogVGhlc2UgdHlwZSBjaGVja2luZyBmdW5jdGlvbnMgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgYGluc3RhbmNlb2ZgXG4vLyBiZWNhdXNlIGl0IGlzIGZyYWdpbGUgYW5kIGNhbiBiZSBlYXNpbHkgZmFrZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZSgpYC5cbmZ1bmN0aW9uIGlzQXJyYXkoYXIpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXIpO1xufVxuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsO1xuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGxPclVuZGVmaW5lZCA9IGlzTnVsbE9yVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuXG5mdW5jdGlvbiBpc1N5bWJvbChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnO1xufVxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc1JlZ0V4cChyZSkge1xuICByZXR1cm4gaXNPYmplY3QocmUpICYmIG9iamVjdFRvU3RyaW5nKHJlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5leHBvcnRzLmlzUmVnRXhwID0gaXNSZWdFeHA7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG5mdW5jdGlvbiBpc0RhdGUoZCkge1xuICByZXR1cm4gaXNPYmplY3QoZCkgJiYgb2JqZWN0VG9TdHJpbmcoZCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGUpICYmXG4gICAgICAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGwgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3ltYm9sJyB8fCAgLy8gRVM2IHN5bWJvbFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCc7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmU7XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSByZXF1aXJlKCcuL3N1cHBvcnQvaXNCdWZmZXInKTtcblxuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuXG5cbmZ1bmN0aW9uIHBhZChuKSB7XG4gIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuLnRvU3RyaW5nKDEwKSA6IG4udG9TdHJpbmcoMTApO1xufVxuXG5cbnZhciBtb250aHMgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJyxcbiAgICAgICAgICAgICAgJ09jdCcsICdOb3YnLCAnRGVjJ107XG5cbi8vIDI2IEZlYiAxNjoxOTozNFxuZnVuY3Rpb24gdGltZXN0YW1wKCkge1xuICB2YXIgZCA9IG5ldyBEYXRlKCk7XG4gIHZhciB0aW1lID0gW3BhZChkLmdldEhvdXJzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRNaW51dGVzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRTZWNvbmRzKCkpXS5qb2luKCc6Jyk7XG4gIHJldHVybiBbZC5nZXREYXRlKCksIG1vbnRoc1tkLmdldE1vbnRoKCldLCB0aW1lXS5qb2luKCcgJyk7XG59XG5cblxuLy8gbG9nIGlzIGp1c3QgYSB0aGluIHdyYXBwZXIgdG8gY29uc29sZS5sb2cgdGhhdCBwcmVwZW5kcyBhIHRpbWVzdGFtcFxuZXhwb3J0cy5sb2cgPSBmdW5jdGlvbigpIHtcbiAgY29uc29sZS5sb2coJyVzIC0gJXMnLCB0aW1lc3RhbXAoKSwgZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKSk7XG59O1xuXG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyLlxuICpcbiAqIFRoZSBGdW5jdGlvbi5wcm90b3R5cGUuaW5oZXJpdHMgZnJvbSBsYW5nLmpzIHJld3JpdHRlbiBhcyBhIHN0YW5kYWxvbmVcbiAqIGZ1bmN0aW9uIChub3Qgb24gRnVuY3Rpb24ucHJvdG90eXBlKS4gTk9URTogSWYgdGhpcyBmaWxlIGlzIHRvIGJlIGxvYWRlZFxuICogZHVyaW5nIGJvb3RzdHJhcHBpbmcgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZXdyaXR0ZW4gdXNpbmcgc29tZSBuYXRpdmVcbiAqIGZ1bmN0aW9ucyBhcyBwcm90b3R5cGUgc2V0dXAgdXNpbmcgbm9ybWFsIEphdmFTY3JpcHQgZG9lcyBub3Qgd29yayBhc1xuICogZXhwZWN0ZWQgZHVyaW5nIGJvb3RzdHJhcHBpbmcgKHNlZSBtaXJyb3IuanMgaW4gcjExNDkwMykuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB3aGljaCBuZWVkcyB0byBpbmhlcml0IHRoZVxuICogICAgIHByb3RvdHlwZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBpbmhlcml0IHByb3RvdHlwZSBmcm9tLlxuICovXG5leHBvcnRzLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxuZXhwb3J0cy5fZXh0ZW5kID0gZnVuY3Rpb24ob3JpZ2luLCBhZGQpIHtcbiAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgYWRkIGlzbid0IGFuIG9iamVjdFxuICBpZiAoIWFkZCB8fCAhaXNPYmplY3QoYWRkKSkgcmV0dXJuIG9yaWdpbjtcblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGFkZCk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICBvcmlnaW5ba2V5c1tpXV0gPSBhZGRba2V5c1tpXV07XG4gIH1cbiAgcmV0dXJuIG9yaWdpbjtcbn07XG5cbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG4iLCJ2YXIgaW5kZXhPZiA9IHJlcXVpcmUoJ2luZGV4b2YnKTtcblxudmFyIE9iamVjdF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgIGlmIChPYmplY3Qua2V5cykgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSByZXMucHVzaChrZXkpXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufTtcblxudmFyIGZvckVhY2ggPSBmdW5jdGlvbiAoeHMsIGZuKSB7XG4gICAgaWYgKHhzLmZvckVhY2gpIHJldHVybiB4cy5mb3JFYWNoKGZuKVxuICAgIGVsc2UgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmbih4c1tpXSwgaSwgeHMpO1xuICAgIH1cbn07XG5cbnZhciBkZWZpbmVQcm9wID0gKGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ18nLCB7fSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihvYmosIG5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgbmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIG9ialtuYW1lXSA9IHZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbn0oKSk7XG5cbnZhciBnbG9iYWxzID0gWydBcnJheScsICdCb29sZWFuJywgJ0RhdGUnLCAnRXJyb3InLCAnRXZhbEVycm9yJywgJ0Z1bmN0aW9uJyxcbidJbmZpbml0eScsICdKU09OJywgJ01hdGgnLCAnTmFOJywgJ051bWJlcicsICdPYmplY3QnLCAnUmFuZ2VFcnJvcicsXG4nUmVmZXJlbmNlRXJyb3InLCAnUmVnRXhwJywgJ1N0cmluZycsICdTeW50YXhFcnJvcicsICdUeXBlRXJyb3InLCAnVVJJRXJyb3InLFxuJ2RlY29kZVVSSScsICdkZWNvZGVVUklDb21wb25lbnQnLCAnZW5jb2RlVVJJJywgJ2VuY29kZVVSSUNvbXBvbmVudCcsICdlc2NhcGUnLFxuJ2V2YWwnLCAnaXNGaW5pdGUnLCAnaXNOYU4nLCAncGFyc2VGbG9hdCcsICdwYXJzZUludCcsICd1bmRlZmluZWQnLCAndW5lc2NhcGUnXTtcblxuZnVuY3Rpb24gQ29udGV4dCgpIHt9XG5Db250ZXh0LnByb3RvdHlwZSA9IHt9O1xuXG52YXIgU2NyaXB0ID0gZXhwb3J0cy5TY3JpcHQgPSBmdW5jdGlvbiBOb2RlU2NyaXB0IChjb2RlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNjcmlwdCkpIHJldHVybiBuZXcgU2NyaXB0KGNvZGUpO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG59O1xuXG5TY3JpcHQucHJvdG90eXBlLnJ1bkluQ29udGV4dCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgaWYgKCEoY29udGV4dCBpbnN0YW5jZW9mIENvbnRleHQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJuZWVkcyBhICdjb250ZXh0JyBhcmd1bWVudC5cIik7XG4gICAgfVxuICAgIFxuICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICBpZiAoIWlmcmFtZS5zdHlsZSkgaWZyYW1lLnN0eWxlID0ge307XG4gICAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAgIFxuICAgIHZhciB3aW4gPSBpZnJhbWUuY29udGVudFdpbmRvdztcbiAgICB2YXIgd0V2YWwgPSB3aW4uZXZhbCwgd0V4ZWNTY3JpcHQgPSB3aW4uZXhlY1NjcmlwdDtcblxuICAgIGlmICghd0V2YWwgJiYgd0V4ZWNTY3JpcHQpIHtcbiAgICAgICAgLy8gd2luLmV2YWwoKSBtYWdpY2FsbHkgYXBwZWFycyB3aGVuIHRoaXMgaXMgY2FsbGVkIGluIElFOlxuICAgICAgICB3RXhlY1NjcmlwdC5jYWxsKHdpbiwgJ251bGwnKTtcbiAgICAgICAgd0V2YWwgPSB3aW4uZXZhbDtcbiAgICB9XG4gICAgXG4gICAgZm9yRWFjaChPYmplY3Rfa2V5cyhjb250ZXh0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB3aW5ba2V5XSA9IGNvbnRleHRba2V5XTtcbiAgICB9KTtcbiAgICBmb3JFYWNoKGdsb2JhbHMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKGNvbnRleHRba2V5XSkge1xuICAgICAgICAgICAgd2luW2tleV0gPSBjb250ZXh0W2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICB2YXIgd2luS2V5cyA9IE9iamVjdF9rZXlzKHdpbik7XG5cbiAgICB2YXIgcmVzID0gd0V2YWwuY2FsbCh3aW4sIHRoaXMuY29kZSk7XG4gICAgXG4gICAgZm9yRWFjaChPYmplY3Rfa2V5cyh3aW4pLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIC8vIEF2b2lkIGNvcHlpbmcgY2lyY3VsYXIgb2JqZWN0cyBsaWtlIGB0b3BgIGFuZCBgd2luZG93YCBieSBvbmx5XG4gICAgICAgIC8vIHVwZGF0aW5nIGV4aXN0aW5nIGNvbnRleHQgcHJvcGVydGllcyBvciBuZXcgcHJvcGVydGllcyBpbiB0aGUgYHdpbmBcbiAgICAgICAgLy8gdGhhdCB3YXMgb25seSBpbnRyb2R1Y2VkIGFmdGVyIHRoZSBldmFsLlxuICAgICAgICBpZiAoa2V5IGluIGNvbnRleHQgfHwgaW5kZXhPZih3aW5LZXlzLCBrZXkpID09PSAtMSkge1xuICAgICAgICAgICAgY29udGV4dFtrZXldID0gd2luW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvckVhY2goZ2xvYmFscywgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gY29udGV4dCkpIHtcbiAgICAgICAgICAgIGRlZmluZVByb3AoY29udGV4dCwga2V5LCB3aW5ba2V5XSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gICAgXG4gICAgcmV0dXJuIHJlcztcbn07XG5cblNjcmlwdC5wcm90b3R5cGUucnVuSW5UaGlzQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZXZhbCh0aGlzLmNvZGUpOyAvLyBtYXliZS4uLlxufTtcblxuU2NyaXB0LnByb3RvdHlwZS5ydW5Jbk5ld0NvbnRleHQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIHZhciBjdHggPSBTY3JpcHQuY3JlYXRlQ29udGV4dChjb250ZXh0KTtcbiAgICB2YXIgcmVzID0gdGhpcy5ydW5JbkNvbnRleHQoY3R4KTtcblxuICAgIGZvckVhY2goT2JqZWN0X2tleXMoY3R4KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBjb250ZXh0W2tleV0gPSBjdHhba2V5XTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXM7XG59O1xuXG5mb3JFYWNoKE9iamVjdF9rZXlzKFNjcmlwdC5wcm90b3R5cGUpLCBmdW5jdGlvbiAobmFtZSkge1xuICAgIGV4cG9ydHNbbmFtZV0gPSBTY3JpcHRbbmFtZV0gPSBmdW5jdGlvbiAoY29kZSkge1xuICAgICAgICB2YXIgcyA9IFNjcmlwdChjb2RlKTtcbiAgICAgICAgcmV0dXJuIHNbbmFtZV0uYXBwbHkocywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICB9O1xufSk7XG5cbmV4cG9ydHMuY3JlYXRlU2NyaXB0ID0gZnVuY3Rpb24gKGNvZGUpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5TY3JpcHQoY29kZSk7XG59O1xuXG5leHBvcnRzLmNyZWF0ZUNvbnRleHQgPSBTY3JpcHQuY3JlYXRlQ29udGV4dCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgdmFyIGNvcHkgPSBuZXcgQ29udGV4dCgpO1xuICAgIGlmKHR5cGVvZiBjb250ZXh0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3JFYWNoKE9iamVjdF9rZXlzKGNvbnRleHQpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBjb3B5W2tleV0gPSBjb250ZXh0W2tleV07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY29weTtcbn07XG4iLCJ2YXIgaCA9IHJlcXVpcmUoJ3ZpcnR1YWwtZG9tL2gnKVxudmFyIHZkb20gPSByZXF1aXJlKCd2aXJ0dWFsLWRvbScpXG5cbnZhciBtYWluID0gcmVxdWlyZSgnbWFpbi1sb29wJylcbnZhciBsb29wID0gbWFpbih7IG1zZzogXCJub3RoaW5nIHlldFwiIH0sIHJlbmRlciwgdmRvbSlcbmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjb250ZW50JykuYXBwZW5kQ2hpbGQobG9vcC50YXJnZXQpXG5cblxuZnVuY3Rpb24gcmVuZGVyIChzdGF0ZSkge1xuICByZXR1cm4gaCgnZGl2JywgW1xuICAgIGgoJ2gxJywgJ2RhdGEgZnJvbSBzd2FybWxvZzogJyArIHN0YXRlLm1zZyB8fCBcIm5vIG1lc3NhZ2VzXCIpXG4gLy8gICBoKCdidXR0b24nLCB7IG9uY2xpY2s6IG9uY2xpY2sgfSwgJ2dldCBkYXRhIScpXG4gIF0pXG4vLyAgIGZ1bmN0aW9uIG9uY2xpY2sgKCkge1xuLy8gICAgIGxvb3AudXBkYXRlKHsgdGltZXM6IHN0YXRlLnRpbWVzICsgMSB9KVxuLy8gICB9XG59XG5cbnZhciBzd2FybWxvZyA9IHJlcXVpcmUoJ3N3YXJtbG9nJylcbnZhciBtZW1kYiA9IHJlcXVpcmUoJ21lbWRiJylcblxudmFyIGxvZyA9IHN3YXJtbG9nKHtcbiAgcHVibGljS2V5OiByZXF1aXJlKCcuL2tleXMuanNvbicpLnB1YmxpYyxcbiAgc29kaXVtOiByZXF1aXJlKCdjaGxvcmlkZS9icm93c2VyJyksXG4gIGRiOiBtZW1kYigpLFxuICB2YWx1ZUVuY29kaW5nOiAnanNvbicsXG4gIGh1YnM6IFsgJ2h0dHBzOi8vc2lnbmFsaHViLm1hZmludG9zaC5jb20nIF1cbn0pXG5cbmxvZy5jcmVhdGVSZWFkU3RyZWFtKHsgbGl2ZTogdHJ1ZSB9KS5vbignZGF0YScsIGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnNvbGUubG9nKCdSRUNFSVZFRCcsIGRhdGEudmFsdWUpXG4gIGlmIChkYXRhLnZhbHVlLmhhc093blByb3BlcnR5KCdtc2cnKSkge1xuICAgIGxvb3AudXBkYXRlKHsgbXNnOiBkYXRhLnZhbHVlLm1zZyB9KVxuICB9XG59KSIsIm1vZHVsZS5leHBvcnRzPXtcImN1cnZlXCI6XCJlZDI1NTE5XCIsXCJwdWJsaWNcIjpcInNJc01XWmphQ21qbkhPMldDQXB1RVBYWjRoNmdxb3IxVm45aGxpZXdpSms9LmVkMjU1MTlcIixcInByaXZhdGVcIjpcIkFvbGd5R3VpT0swNUZQenN6MU1pME1pWWJVNzBNYWhobytFZDd3bk5FTkt3aXd4Wm1Ob0thT2NjN1pZSUNtNFE5ZG5pSHFDcWl2VldmMkdXSjdDSW1RPT0uZWQyNTUxOVwiLFwiaWRcIjpcIkBzSXNNV1pqYUNtam5ITzJXQ0FwdUVQWFo0aDZncW9yMVZuOWhsaWV3aUprPS5lZDI1NTE5XCJ9XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTMgUm9kIFZhZ2csIE1JVCBMaWNlbnNlICovXG5cbmZ1bmN0aW9uIEFic3RyYWN0Q2hhaW5lZEJhdGNoIChkYikge1xuICB0aGlzLl9kYiAgICAgICAgID0gZGJcbiAgdGhpcy5fb3BlcmF0aW9ucyA9IFtdXG4gIHRoaXMuX3dyaXR0ZW4gICAgPSBmYWxzZVxufVxuXG5BYnN0cmFjdENoYWluZWRCYXRjaC5wcm90b3R5cGUuX2NoZWNrV3JpdHRlbiA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX3dyaXR0ZW4pXG4gICAgdGhyb3cgbmV3IEVycm9yKCd3cml0ZSgpIGFscmVhZHkgY2FsbGVkIG9uIHRoaXMgYmF0Y2gnKVxufVxuXG5BYnN0cmFjdENoYWluZWRCYXRjaC5wcm90b3R5cGUucHV0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdGhpcy5fY2hlY2tXcml0dGVuKClcblxuICB2YXIgZXJyID0gdGhpcy5fZGIuX2NoZWNrS2V5KGtleSwgJ2tleScsIHRoaXMuX2RiLl9pc0J1ZmZlcilcbiAgaWYgKGVycilcbiAgICB0aHJvdyBlcnJcblxuICBpZiAoIXRoaXMuX2RiLl9pc0J1ZmZlcihrZXkpKSBrZXkgPSBTdHJpbmcoa2V5KVxuICBpZiAoIXRoaXMuX2RiLl9pc0J1ZmZlcih2YWx1ZSkpIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuXG4gIGlmICh0eXBlb2YgdGhpcy5fcHV0ID09ICdmdW5jdGlvbicgKVxuICAgIHRoaXMuX3B1dChrZXksIHZhbHVlKVxuICBlbHNlXG4gICAgdGhpcy5fb3BlcmF0aW9ucy5wdXNoKHsgdHlwZTogJ3B1dCcsIGtleToga2V5LCB2YWx1ZTogdmFsdWUgfSlcblxuICByZXR1cm4gdGhpc1xufVxuXG5BYnN0cmFjdENoYWluZWRCYXRjaC5wcm90b3R5cGUuZGVsID0gZnVuY3Rpb24gKGtleSkge1xuICB0aGlzLl9jaGVja1dyaXR0ZW4oKVxuXG4gIHZhciBlcnIgPSB0aGlzLl9kYi5fY2hlY2tLZXkoa2V5LCAna2V5JywgdGhpcy5fZGIuX2lzQnVmZmVyKVxuICBpZiAoZXJyKSB0aHJvdyBlcnJcblxuICBpZiAoIXRoaXMuX2RiLl9pc0J1ZmZlcihrZXkpKSBrZXkgPSBTdHJpbmcoa2V5KVxuXG4gIGlmICh0eXBlb2YgdGhpcy5fZGVsID09ICdmdW5jdGlvbicgKVxuICAgIHRoaXMuX2RlbChrZXkpXG4gIGVsc2VcbiAgICB0aGlzLl9vcGVyYXRpb25zLnB1c2goeyB0eXBlOiAnZGVsJywga2V5OiBrZXkgfSlcblxuICByZXR1cm4gdGhpc1xufVxuXG5BYnN0cmFjdENoYWluZWRCYXRjaC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2NoZWNrV3JpdHRlbigpXG5cbiAgdGhpcy5fb3BlcmF0aW9ucyA9IFtdXG5cbiAgaWYgKHR5cGVvZiB0aGlzLl9jbGVhciA9PSAnZnVuY3Rpb24nIClcbiAgICB0aGlzLl9jbGVhcigpXG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuQWJzdHJhY3RDaGFpbmVkQmF0Y2gucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHRoaXMuX2NoZWNrV3JpdHRlbigpXG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09ICdmdW5jdGlvbicpXG4gICAgY2FsbGJhY2sgPSBvcHRpb25zXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgIT0gJ2Z1bmN0aW9uJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyaXRlKCkgcmVxdWlyZXMgYSBjYWxsYmFjayBhcmd1bWVudCcpXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPSAnb2JqZWN0JylcbiAgICBvcHRpb25zID0ge31cblxuICB0aGlzLl93cml0dGVuID0gdHJ1ZVxuXG4gIGlmICh0eXBlb2YgdGhpcy5fd3JpdGUgPT0gJ2Z1bmN0aW9uJyApXG4gICAgcmV0dXJuIHRoaXMuX3dyaXRlKGNhbGxiYWNrKVxuXG4gIGlmICh0eXBlb2YgdGhpcy5fZGIuX2JhdGNoID09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHRoaXMuX2RiLl9iYXRjaCh0aGlzLl9vcGVyYXRpb25zLCBvcHRpb25zLCBjYWxsYmFjaylcblxuICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0Q2hhaW5lZEJhdGNoIiwiLyogQ29weXJpZ2h0IChjKSAyMDEzIFJvZCBWYWdnLCBNSVQgTGljZW5zZSAqL1xuXG5mdW5jdGlvbiBBYnN0cmFjdEl0ZXJhdG9yIChkYikge1xuICB0aGlzLmRiID0gZGJcbiAgdGhpcy5fZW5kZWQgPSBmYWxzZVxuICB0aGlzLl9uZXh0aW5nID0gZmFsc2Vcbn1cblxuQWJzdHJhY3RJdGVyYXRvci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB2YXIgc2VsZiA9IHRoaXNcblxuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9ICdmdW5jdGlvbicpXG4gICAgdGhyb3cgbmV3IEVycm9yKCduZXh0KCkgcmVxdWlyZXMgYSBjYWxsYmFjayBhcmd1bWVudCcpXG5cbiAgaWYgKHNlbGYuX2VuZGVkKVxuICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ2Nhbm5vdCBjYWxsIG5leHQoKSBhZnRlciBlbmQoKScpKVxuICBpZiAoc2VsZi5fbmV4dGluZylcbiAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdjYW5ub3QgY2FsbCBuZXh0KCkgYmVmb3JlIHByZXZpb3VzIG5leHQoKSBoYXMgY29tcGxldGVkJykpXG5cbiAgc2VsZi5fbmV4dGluZyA9IHRydWVcbiAgaWYgKHR5cGVvZiBzZWxmLl9uZXh0ID09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2VsZi5fbmV4dChmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLl9uZXh0aW5nID0gZmFsc2VcbiAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cylcbiAgICB9KVxuICB9XG5cbiAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgc2VsZi5fbmV4dGluZyA9IGZhbHNlXG4gICAgY2FsbGJhY2soKVxuICB9KVxufVxuXG5BYnN0cmFjdEl0ZXJhdG9yLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBFcnJvcignZW5kKCkgcmVxdWlyZXMgYSBjYWxsYmFjayBhcmd1bWVudCcpXG5cbiAgaWYgKHRoaXMuX2VuZGVkKVxuICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ2VuZCgpIGFscmVhZHkgY2FsbGVkIG9uIGl0ZXJhdG9yJykpXG5cbiAgdGhpcy5fZW5kZWQgPSB0cnVlXG5cbiAgaWYgKHR5cGVvZiB0aGlzLl9lbmQgPT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdGhpcy5fZW5kKGNhbGxiYWNrKVxuXG4gIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2spXG59XG5cbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RJdGVyYXRvclxuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEzIFJvZCBWYWdnLCBNSVQgTGljZW5zZSAqL1xuXG52YXIgeHRlbmQgICAgICAgICAgICAgICAgPSByZXF1aXJlKCd4dGVuZCcpXG4gICwgQWJzdHJhY3RJdGVyYXRvciAgICAgPSByZXF1aXJlKCcuL2Fic3RyYWN0LWl0ZXJhdG9yJylcbiAgLCBBYnN0cmFjdENoYWluZWRCYXRjaCA9IHJlcXVpcmUoJy4vYWJzdHJhY3QtY2hhaW5lZC1iYXRjaCcpXG5cbmZ1bmN0aW9uIEFic3RyYWN0TGV2ZWxET1dOIChsb2NhdGlvbikge1xuICBpZiAoIWFyZ3VtZW50cy5sZW5ndGggfHwgbG9jYXRpb24gPT09IHVuZGVmaW5lZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbnN0cnVjdG9yIHJlcXVpcmVzIGF0IGxlYXN0IGEgbG9jYXRpb24gYXJndW1lbnQnKVxuXG4gIGlmICh0eXBlb2YgbG9jYXRpb24gIT0gJ3N0cmluZycpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb25zdHJ1Y3RvciByZXF1aXJlcyBhIGxvY2F0aW9uIHN0cmluZyBhcmd1bWVudCcpXG5cbiAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uXG4gIHRoaXMuc3RhdHVzID0gJ25ldydcbn1cblxuQWJzdHJhY3RMZXZlbERPV04ucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIHNlbGYgICAgICA9IHRoaXNcbiAgICAsIG9sZFN0YXR1cyA9IHRoaXMuc3RhdHVzXG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09ICdmdW5jdGlvbicpXG4gICAgY2FsbGJhY2sgPSBvcHRpb25zXG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBFcnJvcignb3BlbigpIHJlcXVpcmVzIGEgY2FsbGJhY2sgYXJndW1lbnQnKVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPSAnb2JqZWN0JylcbiAgICBvcHRpb25zID0ge31cblxuICBvcHRpb25zLmNyZWF0ZUlmTWlzc2luZyA9IG9wdGlvbnMuY3JlYXRlSWZNaXNzaW5nICE9IGZhbHNlXG4gIG9wdGlvbnMuZXJyb3JJZkV4aXN0cyA9ICEhb3B0aW9ucy5lcnJvcklmRXhpc3RzXG5cbiAgaWYgKHR5cGVvZiB0aGlzLl9vcGVuID09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLnN0YXR1cyA9ICdvcGVuaW5nJ1xuICAgIHRoaXMuX29wZW4ob3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBzZWxmLnN0YXR1cyA9IG9sZFN0YXR1c1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgfVxuICAgICAgc2VsZi5zdGF0dXMgPSAnb3BlbidcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhdHVzID0gJ29wZW4nXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaylcbiAgfVxufVxuXG5BYnN0cmFjdExldmVsRE9XTi5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdmFyIHNlbGYgICAgICA9IHRoaXNcbiAgICAsIG9sZFN0YXR1cyA9IHRoaXMuc3RhdHVzXG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBFcnJvcignY2xvc2UoKSByZXF1aXJlcyBhIGNhbGxiYWNrIGFyZ3VtZW50JylcblxuICBpZiAodHlwZW9mIHRoaXMuX2Nsb3NlID09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLnN0YXR1cyA9ICdjbG9zaW5nJ1xuICAgIHRoaXMuX2Nsb3NlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgc2VsZi5zdGF0dXMgPSBvbGRTdGF0dXNcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIH1cbiAgICAgIHNlbGYuc3RhdHVzID0gJ2Nsb3NlZCdcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhdHVzID0gJ2Nsb3NlZCdcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKVxuICB9XG59XG5cbkFic3RyYWN0TGV2ZWxET1dOLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICB2YXIgZXJyXG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09ICdmdW5jdGlvbicpXG4gICAgY2FsbGJhY2sgPSBvcHRpb25zXG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBFcnJvcignZ2V0KCkgcmVxdWlyZXMgYSBjYWxsYmFjayBhcmd1bWVudCcpXG5cbiAgaWYgKGVyciA9IHRoaXMuX2NoZWNrS2V5KGtleSwgJ2tleScsIHRoaXMuX2lzQnVmZmVyKSlcbiAgICByZXR1cm4gY2FsbGJhY2soZXJyKVxuXG4gIGlmICghdGhpcy5faXNCdWZmZXIoa2V5KSlcbiAgICBrZXkgPSBTdHJpbmcoa2V5KVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPSAnb2JqZWN0JylcbiAgICBvcHRpb25zID0ge31cblxuICBvcHRpb25zLmFzQnVmZmVyID0gb3B0aW9ucy5hc0J1ZmZlciAhPSBmYWxzZVxuXG4gIGlmICh0eXBlb2YgdGhpcy5fZ2V0ID09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHRoaXMuX2dldChrZXksIG9wdGlvbnMsIGNhbGxiYWNrKVxuXG4gIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkgeyBjYWxsYmFjayhuZXcgRXJyb3IoJ05vdEZvdW5kJykpIH0pXG59XG5cbkFic3RyYWN0TGV2ZWxET1dOLnByb3RvdHlwZS5wdXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIGVyclxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PSAnZnVuY3Rpb24nKVxuICAgIGNhbGxiYWNrID0gb3B0aW9uc1xuXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgIT0gJ2Z1bmN0aW9uJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3B1dCgpIHJlcXVpcmVzIGEgY2FsbGJhY2sgYXJndW1lbnQnKVxuXG4gIGlmIChlcnIgPSB0aGlzLl9jaGVja0tleShrZXksICdrZXknLCB0aGlzLl9pc0J1ZmZlcikpXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVycilcblxuICBpZiAoIXRoaXMuX2lzQnVmZmVyKGtleSkpXG4gICAga2V5ID0gU3RyaW5nKGtleSlcblxuICAvLyBjb2VyY2UgdmFsdWUgdG8gc3RyaW5nIGluIG5vZGUsIGRvbid0IHRvdWNoIGl0IGluIGJyb3dzZXJcbiAgLy8gKGluZGV4ZWRkYiBjYW4gc3RvcmUgYW55IEpTIHR5cGUpXG4gIGlmICh2YWx1ZSAhPSBudWxsICYmICF0aGlzLl9pc0J1ZmZlcih2YWx1ZSkgJiYgIXByb2Nlc3MuYnJvd3NlcilcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcblxuICBpZiAodHlwZW9mIG9wdGlvbnMgIT0gJ29iamVjdCcpXG4gICAgb3B0aW9ucyA9IHt9XG5cbiAgaWYgKHR5cGVvZiB0aGlzLl9wdXQgPT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdGhpcy5fcHV0KGtleSwgdmFsdWUsIG9wdGlvbnMsIGNhbGxiYWNrKVxuXG4gIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2spXG59XG5cbkFic3RyYWN0TGV2ZWxET1dOLnByb3RvdHlwZS5kZWwgPSBmdW5jdGlvbiAoa2V5LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICB2YXIgZXJyXG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09ICdmdW5jdGlvbicpXG4gICAgY2FsbGJhY2sgPSBvcHRpb25zXG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBFcnJvcignZGVsKCkgcmVxdWlyZXMgYSBjYWxsYmFjayBhcmd1bWVudCcpXG5cbiAgaWYgKGVyciA9IHRoaXMuX2NoZWNrS2V5KGtleSwgJ2tleScsIHRoaXMuX2lzQnVmZmVyKSlcbiAgICByZXR1cm4gY2FsbGJhY2soZXJyKVxuXG4gIGlmICghdGhpcy5faXNCdWZmZXIoa2V5KSlcbiAgICBrZXkgPSBTdHJpbmcoa2V5KVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPSAnb2JqZWN0JylcbiAgICBvcHRpb25zID0ge31cblxuICBpZiAodHlwZW9mIHRoaXMuX2RlbCA9PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiB0aGlzLl9kZWwoa2V5LCBvcHRpb25zLCBjYWxsYmFjaylcblxuICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKVxufVxuXG5BYnN0cmFjdExldmVsRE9XTi5wcm90b3R5cGUuYmF0Y2ggPSBmdW5jdGlvbiAoYXJyYXksIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGlmICghYXJndW1lbnRzLmxlbmd0aClcbiAgICByZXR1cm4gdGhpcy5fY2hhaW5lZEJhdGNoKClcblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ2Z1bmN0aW9uJylcbiAgICBjYWxsYmFjayA9IG9wdGlvbnNcblxuICBpZiAodHlwZW9mIGFycmF5ID09ICdmdW5jdGlvbicpXG4gICAgY2FsbGJhY2sgPSBhcnJheVxuXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgIT0gJ2Z1bmN0aW9uJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhdGNoKGFycmF5KSByZXF1aXJlcyBhIGNhbGxiYWNrIGFyZ3VtZW50JylcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpKVxuICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ2JhdGNoKGFycmF5KSByZXF1aXJlcyBhbiBhcnJheSBhcmd1bWVudCcpKVxuXG4gIGlmICghb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucyAhPSAnb2JqZWN0JylcbiAgICBvcHRpb25zID0ge31cblxuICB2YXIgaSA9IDBcbiAgICAsIGwgPSBhcnJheS5sZW5ndGhcbiAgICAsIGVcbiAgICAsIGVyclxuXG4gIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgZSA9IGFycmF5W2ldXG4gICAgaWYgKHR5cGVvZiBlICE9ICdvYmplY3QnKVxuICAgICAgY29udGludWVcblxuICAgIGlmIChlcnIgPSB0aGlzLl9jaGVja0tleShlLnR5cGUsICd0eXBlJywgdGhpcy5faXNCdWZmZXIpKVxuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcblxuICAgIGlmIChlcnIgPSB0aGlzLl9jaGVja0tleShlLmtleSwgJ2tleScsIHRoaXMuX2lzQnVmZmVyKSlcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpXG4gIH1cblxuICBpZiAodHlwZW9mIHRoaXMuX2JhdGNoID09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHRoaXMuX2JhdGNoKGFycmF5LCBvcHRpb25zLCBjYWxsYmFjaylcblxuICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKVxufVxuXG4vL1RPRE86IHJlbW92ZSBmcm9tIGhlcmUsIG5vdCBhIG5lY2Vzc2FyeSBwcmltaXRpdmVcbkFic3RyYWN0TGV2ZWxET1dOLnByb3RvdHlwZS5hcHByb3hpbWF0ZVNpemUgPSBmdW5jdGlvbiAoc3RhcnQsIGVuZCwgY2FsbGJhY2spIHtcbiAgaWYgKCAgIHN0YXJ0ID09IG51bGxcbiAgICAgIHx8IGVuZCA9PSBudWxsXG4gICAgICB8fCB0eXBlb2Ygc3RhcnQgPT0gJ2Z1bmN0aW9uJ1xuICAgICAgfHwgdHlwZW9mIGVuZCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdhcHByb3hpbWF0ZVNpemUoKSByZXF1aXJlcyB2YWxpZCBgc3RhcnRgLCBgZW5kYCBhbmQgYGNhbGxiYWNrYCBhcmd1bWVudHMnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBFcnJvcignYXBwcm94aW1hdGVTaXplKCkgcmVxdWlyZXMgYSBjYWxsYmFjayBhcmd1bWVudCcpXG5cbiAgaWYgKCF0aGlzLl9pc0J1ZmZlcihzdGFydCkpXG4gICAgc3RhcnQgPSBTdHJpbmcoc3RhcnQpXG5cbiAgaWYgKCF0aGlzLl9pc0J1ZmZlcihlbmQpKVxuICAgIGVuZCA9IFN0cmluZyhlbmQpXG5cbiAgaWYgKHR5cGVvZiB0aGlzLl9hcHByb3hpbWF0ZVNpemUgPT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdGhpcy5fYXBwcm94aW1hdGVTaXplKHN0YXJ0LCBlbmQsIGNhbGxiYWNrKVxuXG4gIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgIGNhbGxiYWNrKG51bGwsIDApXG4gIH0pXG59XG5cbkFic3RyYWN0TGV2ZWxET1dOLnByb3RvdHlwZS5fc2V0dXBJdGVyYXRvck9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXNcblxuICBvcHRpb25zID0geHRlbmQob3B0aW9ucylcblxuICA7WyAnc3RhcnQnLCAnZW5kJywgJ2d0JywgJ2d0ZScsICdsdCcsICdsdGUnIF0uZm9yRWFjaChmdW5jdGlvbiAobykge1xuICAgIGlmIChvcHRpb25zW29dICYmIHNlbGYuX2lzQnVmZmVyKG9wdGlvbnNbb10pICYmIG9wdGlvbnNbb10ubGVuZ3RoID09PSAwKVxuICAgICAgZGVsZXRlIG9wdGlvbnNbb11cbiAgfSlcblxuICBvcHRpb25zLnJldmVyc2UgPSAhIW9wdGlvbnMucmV2ZXJzZVxuICBvcHRpb25zLmtleXMgPSBvcHRpb25zLmtleXMgIT0gZmFsc2VcbiAgb3B0aW9ucy52YWx1ZXMgPSBvcHRpb25zLnZhbHVlcyAhPSBmYWxzZVxuICBvcHRpb25zLmxpbWl0ID0gJ2xpbWl0JyBpbiBvcHRpb25zID8gb3B0aW9ucy5saW1pdCA6IC0xXG4gIG9wdGlvbnMua2V5QXNCdWZmZXIgPSBvcHRpb25zLmtleUFzQnVmZmVyICE9IGZhbHNlXG4gIG9wdGlvbnMudmFsdWVBc0J1ZmZlciA9IG9wdGlvbnMudmFsdWVBc0J1ZmZlciAhPSBmYWxzZVxuXG4gIHJldHVybiBvcHRpb25zXG59XG5cbkFic3RyYWN0TGV2ZWxET1dOLnByb3RvdHlwZS5pdGVyYXRvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPSAnb2JqZWN0JylcbiAgICBvcHRpb25zID0ge31cblxuICBvcHRpb25zID0gdGhpcy5fc2V0dXBJdGVyYXRvck9wdGlvbnMob3B0aW9ucylcblxuICBpZiAodHlwZW9mIHRoaXMuX2l0ZXJhdG9yID09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHRoaXMuX2l0ZXJhdG9yKG9wdGlvbnMpXG5cbiAgcmV0dXJuIG5ldyBBYnN0cmFjdEl0ZXJhdG9yKHRoaXMpXG59XG5cbkFic3RyYWN0TGV2ZWxET1dOLnByb3RvdHlwZS5fY2hhaW5lZEJhdGNoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IEFic3RyYWN0Q2hhaW5lZEJhdGNoKHRoaXMpXG59XG5cbkFic3RyYWN0TGV2ZWxET1dOLnByb3RvdHlwZS5faXNCdWZmZXIgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKVxufVxuXG5BYnN0cmFjdExldmVsRE9XTi5wcm90b3R5cGUuX2NoZWNrS2V5ID0gZnVuY3Rpb24gKG9iaiwgdHlwZSkge1xuXG4gIGlmIChvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIG5ldyBFcnJvcih0eXBlICsgJyBjYW5ub3QgYmUgYG51bGxgIG9yIGB1bmRlZmluZWRgJylcblxuICBpZiAodGhpcy5faXNCdWZmZXIob2JqKSkge1xuICAgIGlmIChvYmoubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcih0eXBlICsgJyBjYW5ub3QgYmUgYW4gZW1wdHkgQnVmZmVyJylcbiAgfSBlbHNlIGlmIChTdHJpbmcob2JqKSA9PT0gJycpXG4gICAgcmV0dXJuIG5ldyBFcnJvcih0eXBlICsgJyBjYW5ub3QgYmUgYW4gZW1wdHkgU3RyaW5nJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBYnN0cmFjdExldmVsRE9XTlxuIiwiZXhwb3J0cy5BYnN0cmFjdExldmVsRE9XTiAgICA9IHJlcXVpcmUoJy4vYWJzdHJhY3QtbGV2ZWxkb3duJylcbmV4cG9ydHMuQWJzdHJhY3RJdGVyYXRvciAgICAgPSByZXF1aXJlKCcuL2Fic3RyYWN0LWl0ZXJhdG9yJylcbmV4cG9ydHMuQWJzdHJhY3RDaGFpbmVkQmF0Y2ggPSByZXF1aXJlKCcuL2Fic3RyYWN0LWNoYWluZWQtYmF0Y2gnKVxuZXhwb3J0cy5pc0xldmVsRE9XTiAgICAgICAgICA9IHJlcXVpcmUoJy4vaXMtbGV2ZWxkb3duJylcbiIsInZhciBBYnN0cmFjdExldmVsRE9XTiA9IHJlcXVpcmUoJy4vYWJzdHJhY3QtbGV2ZWxkb3duJylcblxuZnVuY3Rpb24gaXNMZXZlbERPV04gKGRiKSB7XG4gIGlmICghZGIgfHwgdHlwZW9mIGRiICE9PSAnb2JqZWN0JylcbiAgICByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIE9iamVjdC5rZXlzKEFic3RyYWN0TGV2ZWxET1dOLnByb3RvdHlwZSkuZmlsdGVyKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgLy8gVE9ETyByZW1vdmUgYXBwcm94aW1hdGVTaXplIGNoZWNrIHdoZW4gbWV0aG9kIGlzIGdvbmVcbiAgICByZXR1cm4gbmFtZVswXSAhPSAnXycgJiYgbmFtZSAhPSAnYXBwcm94aW1hdGVTaXplJ1xuICB9KS5ldmVyeShmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB0eXBlb2YgZGJbbmFtZV0gPT0gJ2Z1bmN0aW9uJ1xuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGV2ZWxET1dOXG4iLCJ2YXIgb25jZSA9IHJlcXVpcmUoJ29uY2UnKTtcblxudmFyIGlzRXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihhZnRlckFsbENiKSB7XG5cbiAgYWZ0ZXJBbGxDYiA9IG9uY2UoYWZ0ZXJBbGxDYiB8fCBmdW5jdGlvbigpIHt9KTtcbiAgXG4gIHZhciBlcnJvck1lc3NhZ2UgPSdcIm5leHRcIiBmdW5jdGlvbiBjYWxsZWQgYWZ0ZXIgdGhlIGZpbmFsIGNhbGxiYWNrLicrXG4gICAgJyBNYWtlIHN1cmUgYWxsIHRoZSBjYWxscyB0byBcIm5leHRcIiBhcmUgb24gdGhlIHNhbWUgdGljayc7XG4gIHZhciBjYWxscyA9IDA7XG4gIHZhciBkb25lID0gZmFsc2U7XG4gIHZhciBmaW5hbEVycm9yID0gbnVsbDtcblxuICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgIGlmIChjYWxscyA9PT0gMCkge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICBhZnRlckFsbENiKCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24gbmV4dChjYikge1xuICAgIGlmIChkb25lKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICBjYWxscysrO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHRoZWNhbGxiYWNrKGVycikge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBpZiAoaXNFcnJvcihlcnIpICYmICFmaW5hbEVycm9yKSBmaW5hbEVycm9yID0gZXJyO1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgaWYgKC0tY2FsbHMgPT09IDApIHtcbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICBhZnRlckFsbENiKGZpbmFsRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufTtcbiIsInZhciBDb250YWluZXIgPSB0eXBlb2YgQnVmZmVyICE9PSBcInVuZGVmaW5lZFwiID8gQnVmZmVyIC8vaW4gbm9kZSwgdXNlIGJ1ZmZlcnNcclxuXHRcdDogdHlwZW9mIEludDhBcnJheSAhPT0gXCJ1bmRlZmluZWRcIiA/IEludDhBcnJheSAvL2luIG5ld2VyIGJyb3dzZXJzLCB1c2Ugd2ViZ2wgaW50OGFycmF5c1xyXG5cdFx0OiBmdW5jdGlvbihsKXsgdmFyIGEgPSBuZXcgQXJyYXkobCk7IGZvcih2YXIgaSA9IDA7IGkgPCBsOyBpKyspIGFbaV09MDsgfTsgLy9lbHNlLCBkbyBzb21ldGhpbmcgc2ltaWxhclxyXG5cclxuZnVuY3Rpb24gQml0RmllbGQoZGF0YSwgb3B0cyl7XHJcblx0aWYoISh0aGlzIGluc3RhbmNlb2YgQml0RmllbGQpKSB7XHJcblx0XHRyZXR1cm4gbmV3IEJpdEZpZWxkKGRhdGEsIG9wdHMpO1xyXG5cdH1cclxuXHJcblx0aWYoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCl7XHJcblx0XHRkYXRhID0gMDtcclxuXHR9XHJcblxyXG5cdHRoaXMuZ3JvdyA9IG9wdHMgJiYgKGlzRmluaXRlKG9wdHMuZ3JvdykgJiYgZ2V0Qnl0ZVNpemUob3B0cy5ncm93KSB8fCBvcHRzLmdyb3cpIHx8IDA7XHJcblxyXG5cdGlmKHR5cGVvZiBkYXRhID09PSBcIm51bWJlclwiIHx8IGRhdGEgPT09IHVuZGVmaW5lZCl7XHJcblx0XHRkYXRhID0gbmV3IENvbnRhaW5lcihnZXRCeXRlU2l6ZShkYXRhKSk7XHJcblx0XHRpZihkYXRhLmZpbGwgJiYgIWRhdGEuX2lzQnVmZmVyKSBkYXRhLmZpbGwoMCk7IC8vIGNsZWFyIG5vZGUgYnVmZmVycyBvZiBnYXJiYWdlXHJcblx0fVxyXG5cdHRoaXMuYnVmZmVyID0gZGF0YTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Qnl0ZVNpemUobnVtKXtcclxuXHR2YXIgb3V0ID0gbnVtID4+IDM7XHJcblx0aWYobnVtICUgOCAhPT0gMCkgb3V0Kys7XHJcblx0cmV0dXJuIG91dDtcclxufVxyXG5cclxuQml0RmllbGQucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKGkpe1xyXG5cdHZhciBqID0gaSA+PiAzO1xyXG5cdHJldHVybiAoaiA8IHRoaXMuYnVmZmVyLmxlbmd0aCkgJiZcclxuXHRcdCEhKHRoaXMuYnVmZmVyW2pdICYgKDEyOCA+PiAoaSAlIDgpKSk7XHJcbn07XHJcblxyXG5CaXRGaWVsZC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oaSwgYil7XHJcblx0dmFyIGogPSBpID4+IDM7XHJcblx0aWYgKGIgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSl7XHJcblx0XHRpZiAodGhpcy5idWZmZXIubGVuZ3RoIDwgaiArIDEpIHRoaXMuX2dyb3coTWF0aC5tYXgoaiArIDEsIE1hdGgubWluKDIgKiB0aGlzLmJ1ZmZlci5sZW5ndGgsIHRoaXMuZ3JvdykpKTtcclxuXHRcdC8vIFNldFxyXG5cdFx0dGhpcy5idWZmZXJbal0gfD0gMTI4ID4+IChpICUgOCk7XHJcblx0fSBlbHNlIGlmIChqIDwgdGhpcy5idWZmZXIubGVuZ3RoKSB7XHJcblx0XHQvLy8gQ2xlYXJcclxuXHRcdHRoaXMuYnVmZmVyW2pdICY9IH4oMTI4ID4+IChpICUgOCkpO1xyXG5cdH1cclxufTtcclxuXHJcbkJpdEZpZWxkLnByb3RvdHlwZS5fZ3JvdyA9IGZ1bmN0aW9uKGxlbmd0aCkge1xyXG5cdGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPCBsZW5ndGggJiYgbGVuZ3RoIDw9IHRoaXMuZ3Jvdykge1xyXG5cdFx0dmFyIG5ld0J1ZmZlciA9IG5ldyBDb250YWluZXIobGVuZ3RoKTtcclxuXHRcdGlmIChuZXdCdWZmZXIuZmlsbCkgbmV3QnVmZmVyLmZpbGwoMCk7XHJcblx0XHRpZiAodGhpcy5idWZmZXIuY29weSkgdGhpcy5idWZmZXIuY29weShuZXdCdWZmZXIsIDApO1xyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmJ1ZmZlci5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdG5ld0J1ZmZlcltpXSA9IHRoaXMuYnVmZmVyW2ldO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ld0J1ZmZlcjtcclxuXHR9XHJcbn07XHJcblxyXG5pZih0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiKSBtb2R1bGUuZXhwb3J0cyA9IEJpdEZpZWxkO1xyXG4iLCIvKiFcbiAqIENyb3NzLUJyb3dzZXIgU3BsaXQgMS4xLjFcbiAqIENvcHlyaWdodCAyMDA3LTIwMTIgU3RldmVuIExldml0aGFuIDxzdGV2ZW5sZXZpdGhhbi5jb20+XG4gKiBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKiBFQ01BU2NyaXB0IGNvbXBsaWFudCwgdW5pZm9ybSBjcm9zcy1icm93c2VyIHNwbGl0IG1ldGhvZFxuICovXG5cbi8qKlxuICogU3BsaXRzIGEgc3RyaW5nIGludG8gYW4gYXJyYXkgb2Ygc3RyaW5ncyB1c2luZyBhIHJlZ2V4IG9yIHN0cmluZyBzZXBhcmF0b3IuIE1hdGNoZXMgb2YgdGhlXG4gKiBzZXBhcmF0b3IgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0IGFycmF5LiBIb3dldmVyLCBpZiBgc2VwYXJhdG9yYCBpcyBhIHJlZ2V4IHRoYXQgY29udGFpbnNcbiAqIGNhcHR1cmluZyBncm91cHMsIGJhY2tyZWZlcmVuY2VzIGFyZSBzcGxpY2VkIGludG8gdGhlIHJlc3VsdCBlYWNoIHRpbWUgYHNlcGFyYXRvcmAgaXMgbWF0Y2hlZC5cbiAqIEZpeGVzIGJyb3dzZXIgYnVncyBjb21wYXJlZCB0byB0aGUgbmF0aXZlIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBhbmQgY2FuIGJlIHVzZWQgcmVsaWFibHlcbiAqIGNyb3NzLWJyb3dzZXIuXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFN0cmluZyB0byBzcGxpdC5cbiAqIEBwYXJhbSB7UmVnRXhwfFN0cmluZ30gc2VwYXJhdG9yIFJlZ2V4IG9yIHN0cmluZyB0byB1c2UgZm9yIHNlcGFyYXRpbmcgdGhlIHN0cmluZy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbGltaXRdIE1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIGluY2x1ZGUgaW4gdGhlIHJlc3VsdCBhcnJheS5cbiAqIEByZXR1cm5zIHtBcnJheX0gQXJyYXkgb2Ygc3Vic3RyaW5ncy5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQmFzaWMgdXNlXG4gKiBzcGxpdCgnYSBiIGMgZCcsICcgJyk7XG4gKiAvLyAtPiBbJ2EnLCAnYicsICdjJywgJ2QnXVxuICpcbiAqIC8vIFdpdGggbGltaXRcbiAqIHNwbGl0KCdhIGIgYyBkJywgJyAnLCAyKTtcbiAqIC8vIC0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBCYWNrcmVmZXJlbmNlcyBpbiByZXN1bHQgYXJyYXlcbiAqIHNwbGl0KCcuLndvcmQxIHdvcmQyLi4nLCAvKFthLXpdKykoXFxkKykvaSk7XG4gKiAvLyAtPiBbJy4uJywgJ3dvcmQnLCAnMScsICcgJywgJ3dvcmQnLCAnMicsICcuLiddXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uIHNwbGl0KHVuZGVmKSB7XG5cbiAgdmFyIG5hdGl2ZVNwbGl0ID0gU3RyaW5nLnByb3RvdHlwZS5zcGxpdCxcbiAgICBjb21wbGlhbnRFeGVjTnBjZyA9IC8oKT8/Ly5leGVjKFwiXCIpWzFdID09PSB1bmRlZixcbiAgICAvLyBOUENHOiBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cFxuICAgIHNlbGY7XG5cbiAgc2VsZiA9IGZ1bmN0aW9uKHN0ciwgc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgYG5hdGl2ZVNwbGl0YFxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2VwYXJhdG9yKSAhPT0gXCJbb2JqZWN0IFJlZ0V4cF1cIikge1xuICAgICAgcmV0dXJuIG5hdGl2ZVNwbGl0LmNhbGwoc3RyLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9XG4gICAgdmFyIG91dHB1dCA9IFtdLFxuICAgICAgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyBcImlcIiA6IFwiXCIpICsgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyBcIm1cIiA6IFwiXCIpICsgKHNlcGFyYXRvci5leHRlbmRlZCA/IFwieFwiIDogXCJcIikgKyAvLyBQcm9wb3NlZCBmb3IgRVM2XG4gICAgICAoc2VwYXJhdG9yLnN0aWNreSA/IFwieVwiIDogXCJcIiksXG4gICAgICAvLyBGaXJlZm94IDMrXG4gICAgICBsYXN0TGFzdEluZGV4ID0gMCxcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICBzZXBhcmF0b3IgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgXCJnXCIpLFxuICAgICAgc2VwYXJhdG9yMiwgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICBzdHIgKz0gXCJcIjsgLy8gVHlwZS1jb252ZXJ0XG4gICAgaWYgKCFjb21wbGlhbnRFeGVjTnBjZykge1xuICAgICAgLy8gRG9lc24ndCBuZWVkIGZsYWdzIGd5LCBidXQgdGhleSBkb24ndCBodXJ0XG4gICAgICBzZXBhcmF0b3IyID0gbmV3IFJlZ0V4cChcIl5cIiArIHNlcGFyYXRvci5zb3VyY2UgKyBcIiQoPyFcXFxccylcIiwgZmxhZ3MpO1xuICAgIH1cbiAgICAvKiBWYWx1ZXMgZm9yIGBsaW1pdGAsIHBlciB0aGUgc3BlYzpcbiAgICAgKiBJZiB1bmRlZmluZWQ6IDQyOTQ5NjcyOTUgLy8gTWF0aC5wb3coMiwgMzIpIC0gMVxuICAgICAqIElmIDAsIEluZmluaXR5LCBvciBOYU46IDBcbiAgICAgKiBJZiBwb3NpdGl2ZSBudW1iZXI6IGxpbWl0ID0gTWF0aC5mbG9vcihsaW1pdCk7IGlmIChsaW1pdCA+IDQyOTQ5NjcyOTUpIGxpbWl0IC09IDQyOTQ5NjcyOTY7XG4gICAgICogSWYgbmVnYXRpdmUgbnVtYmVyOiA0Mjk0OTY3Mjk2IC0gTWF0aC5mbG9vcihNYXRoLmFicyhsaW1pdCkpXG4gICAgICogSWYgb3RoZXI6IFR5cGUtY29udmVydCwgdGhlbiB1c2UgdGhlIGFib3ZlIHJ1bGVzXG4gICAgICovXG4gICAgbGltaXQgPSBsaW1pdCA9PT0gdW5kZWYgPyAtMSA+Pj4gMCA6IC8vIE1hdGgucG93KDIsIDMyKSAtIDFcbiAgICBsaW1pdCA+Pj4gMDsgLy8gVG9VaW50MzIobGltaXQpXG4gICAgd2hpbGUgKG1hdGNoID0gc2VwYXJhdG9yLmV4ZWMoc3RyKSkge1xuICAgICAgLy8gYHNlcGFyYXRvci5sYXN0SW5kZXhgIGlzIG5vdCByZWxpYWJsZSBjcm9zcy1icm93c2VyXG4gICAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgIG91dHB1dC5wdXNoKHN0ci5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYCBmb3JcbiAgICAgICAgLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXBzXG4gICAgICAgIGlmICghY29tcGxpYW50RXhlY05wY2cgJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgICAgIG1hdGNoWzBdLnJlcGxhY2Uoc2VwYXJhdG9yMiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWYpIHtcbiAgICAgICAgICAgICAgICBtYXRjaFtpXSA9IHVuZGVmO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoLmxlbmd0aCA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgaWYgKG91dHB1dC5sZW5ndGggPj0gbGltaXQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNlcGFyYXRvci5sYXN0SW5kZXggPT09IG1hdGNoLmluZGV4KSB7XG4gICAgICAgIHNlcGFyYXRvci5sYXN0SW5kZXgrKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyLmxlbmd0aCkge1xuICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvci50ZXN0KFwiXCIpKSB7XG4gICAgICAgIG91dHB1dC5wdXNoKFwiXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaChzdHIuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IGxpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIGxpbWl0KSA6IG91dHB1dDtcbiAgfTtcblxuICByZXR1cm4gc2VsZjtcbn0pKCk7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhLCBiKSB7XG5cdGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJyk7XG5cdH1cblxuXHRpZiAoYSA9PT0gYikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBhLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiBhLmVxdWFscyhiKTtcblx0fVxuXG5cdGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoYVtpXSAhPT0gYltpXSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSByZXR1cm4gY2FtZWxDYXNlKG9iaik7XG4gICAgcmV0dXJuIHdhbGsob2JqKTtcbn07XG5cbmZ1bmN0aW9uIHdhbGsgKG9iaikge1xuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSByZXR1cm4gb2JqO1xuICAgIGlmIChpc0RhdGUob2JqKSB8fCBpc1JlZ2V4KG9iaikpIHJldHVybiBvYmo7XG4gICAgaWYgKGlzQXJyYXkob2JqKSkgcmV0dXJuIG1hcChvYmosIHdhbGspO1xuICAgIHJldHVybiByZWR1Y2Uob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAgICAgdmFyIGNhbWVsID0gY2FtZWxDYXNlKGtleSk7XG4gICAgICAgIGFjY1tjYW1lbF0gPSB3YWxrKG9ialtrZXldKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIGNhbWVsQ2FzZShzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tfLi1dKFxcd3wkKS9nLCBmdW5jdGlvbiAoXyx4KSB7XG4gICAgICAgIHJldHVybiB4LnRvVXBwZXJDYXNlKCk7XG4gICAgfSk7XG59XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxudmFyIGlzRGF0ZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IERhdGVdJztcbn07XG5cbnZhciBpc1JlZ2V4ID0gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59O1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoaGFzLmNhbGwob2JqLCBrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gICAgaWYgKHhzLm1hcCkgcmV0dXJuIHhzLm1hcChmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIHJlZHVjZSAoeHMsIGYsIGFjYykge1xuICAgIGlmICh4cy5yZWR1Y2UpIHJldHVybiB4cy5yZWR1Y2UoZiwgYWNjKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFjYyA9IGYoYWNjLCB4c1tpXSwgaSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG59XG4iLCJcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnc29kaXVtLWJyb3dzZXJpZnkvYnJvd3NlcicpXG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gTk9URTogVGhlc2UgdHlwZSBjaGVja2luZyBmdW5jdGlvbnMgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgYGluc3RhbmNlb2ZgXG4vLyBiZWNhdXNlIGl0IGlzIGZyYWdpbGUgYW5kIGNhbiBiZSBlYXNpbHkgZmFrZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZSgpYC5cblxuZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpO1xuICB9XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsO1xuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGxPclVuZGVmaW5lZCA9IGlzTnVsbE9yVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuXG5mdW5jdGlvbiBpc1N5bWJvbChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnO1xufVxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc1JlZ0V4cChyZSkge1xuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICByZXR1cm4gKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gQnVmZmVyLmlzQnVmZmVyO1xuXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyhvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG4iLCIvKipcbiAqIGN1aWQuanNcbiAqIENvbGxpc2lvbi1yZXNpc3RhbnQgVUlEIGdlbmVyYXRvciBmb3IgYnJvd3NlcnMgYW5kIG5vZGUuXG4gKiBTZXF1ZW50aWFsIGZvciBmYXN0IGRiIGxvb2t1cHMgYW5kIHJlY2VuY3kgc29ydGluZy5cbiAqIFNhZmUgZm9yIGVsZW1lbnQgSURzIGFuZCBzZXJ2ZXItc2lkZSBsb29rdXBzLlxuICpcbiAqIEV4dHJhY3RlZCBmcm9tIENMQ1RSXG4gKlxuICogQ29weXJpZ2h0IChjKSBFcmljIEVsbGlvdHQgMjAxMlxuICogTUlUIExpY2Vuc2VcbiAqL1xuXG4vKmdsb2JhbCB3aW5kb3csIG5hdmlnYXRvciwgZG9jdW1lbnQsIHJlcXVpcmUsIHByb2Nlc3MsIG1vZHVsZSAqL1xuKGZ1bmN0aW9uIChhcHApIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB2YXIgbmFtZXNwYWNlID0gJ2N1aWQnLFxuICAgIGMgPSAwLFxuICAgIGJsb2NrU2l6ZSA9IDQsXG4gICAgYmFzZSA9IDM2LFxuICAgIGRpc2NyZXRlVmFsdWVzID0gTWF0aC5wb3coYmFzZSwgYmxvY2tTaXplKSxcblxuICAgIHBhZCA9IGZ1bmN0aW9uIHBhZChudW0sIHNpemUpIHtcbiAgICAgIHZhciBzID0gXCIwMDAwMDAwMDBcIiArIG51bTtcbiAgICAgIHJldHVybiBzLnN1YnN0cihzLmxlbmd0aC1zaXplKTtcbiAgICB9LFxuXG4gICAgcmFuZG9tQmxvY2sgPSBmdW5jdGlvbiByYW5kb21CbG9jaygpIHtcbiAgICAgIHJldHVybiBwYWQoKE1hdGgucmFuZG9tKCkgKlxuICAgICAgICAgICAgZGlzY3JldGVWYWx1ZXMgPDwgMClcbiAgICAgICAgICAgIC50b1N0cmluZyhiYXNlKSwgYmxvY2tTaXplKTtcbiAgICB9LFxuXG4gICAgc2FmZUNvdW50ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjID0gKGMgPCBkaXNjcmV0ZVZhbHVlcykgPyBjIDogMDtcbiAgICAgIGMrKzsgLy8gdGhpcyBpcyBub3Qgc3VibGltaW5hbFxuICAgICAgcmV0dXJuIGMgLSAxO1xuICAgIH0sXG5cbiAgICBhcGkgPSBmdW5jdGlvbiBjdWlkKCkge1xuICAgICAgLy8gU3RhcnRpbmcgd2l0aCBhIGxvd2VyY2FzZSBsZXR0ZXIgbWFrZXNcbiAgICAgIC8vIGl0IEhUTUwgZWxlbWVudCBJRCBmcmllbmRseS5cbiAgICAgIHZhciBsZXR0ZXIgPSAnYycsIC8vIGhhcmQtY29kZWQgYWxsb3dzIGZvciBzZXF1ZW50aWFsIGFjY2Vzc1xuXG4gICAgICAgIC8vIHRpbWVzdGFtcFxuICAgICAgICAvLyB3YXJuaW5nOiB0aGlzIGV4cG9zZXMgdGhlIGV4YWN0IGRhdGUgYW5kIHRpbWVcbiAgICAgICAgLy8gdGhhdCB0aGUgdWlkIHdhcyBjcmVhdGVkLlxuICAgICAgICB0aW1lc3RhbXAgPSAobmV3IERhdGUoKS5nZXRUaW1lKCkpLnRvU3RyaW5nKGJhc2UpLFxuXG4gICAgICAgIC8vIFByZXZlbnQgc2FtZS1tYWNoaW5lIGNvbGxpc2lvbnMuXG4gICAgICAgIGNvdW50ZXIsXG5cbiAgICAgICAgLy8gQSBmZXcgY2hhcnMgdG8gZ2VuZXJhdGUgZGlzdGluY3QgaWRzIGZvciBkaWZmZXJlbnRcbiAgICAgICAgLy8gY2xpZW50cyAoc28gZGlmZmVyZW50IGNvbXB1dGVycyBhcmUgZmFyIGxlc3NcbiAgICAgICAgLy8gbGlrZWx5IHRvIGdlbmVyYXRlIHRoZSBzYW1lIGlkKVxuICAgICAgICBmaW5nZXJwcmludCA9IGFwaS5maW5nZXJwcmludCgpLFxuXG4gICAgICAgIC8vIEdyYWIgc29tZSBtb3JlIGNoYXJzIGZyb20gTWF0aC5yYW5kb20oKVxuICAgICAgICByYW5kb20gPSByYW5kb21CbG9jaygpICsgcmFuZG9tQmxvY2soKTtcblxuICAgICAgICBjb3VudGVyID0gcGFkKHNhZmVDb3VudGVyKCkudG9TdHJpbmcoYmFzZSksIGJsb2NrU2l6ZSk7XG5cbiAgICAgIHJldHVybiAgKGxldHRlciArIHRpbWVzdGFtcCArIGNvdW50ZXIgKyBmaW5nZXJwcmludCArIHJhbmRvbSk7XG4gICAgfTtcblxuICBhcGkuc2x1ZyA9IGZ1bmN0aW9uIHNsdWcoKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKS50b1N0cmluZygzNiksXG4gICAgICBjb3VudGVyLFxuICAgICAgcHJpbnQgPSBhcGkuZmluZ2VycHJpbnQoKS5zbGljZSgwLDEpICtcbiAgICAgICAgYXBpLmZpbmdlcnByaW50KCkuc2xpY2UoLTEpLFxuICAgICAgcmFuZG9tID0gcmFuZG9tQmxvY2soKS5zbGljZSgtMik7XG5cbiAgICAgIGNvdW50ZXIgPSBzYWZlQ291bnRlcigpLnRvU3RyaW5nKDM2KS5zbGljZSgtNCk7XG5cbiAgICByZXR1cm4gZGF0ZS5zbGljZSgtMikgK1xuICAgICAgY291bnRlciArIHByaW50ICsgcmFuZG9tO1xuICB9O1xuXG4gIGFwaS5nbG9iYWxDb3VudCA9IGZ1bmN0aW9uIGdsb2JhbENvdW50KCkge1xuICAgIC8vIFdlIHdhbnQgdG8gY2FjaGUgdGhlIHJlc3VsdHMgb2YgdGhpc1xuICAgIHZhciBjYWNoZSA9IChmdW5jdGlvbiBjYWxjKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICBjb3VudCA9IDA7XG5cbiAgICAgICAgZm9yIChpIGluIHdpbmRvdykge1xuICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgICB9KCkpO1xuXG4gICAgYXBpLmdsb2JhbENvdW50ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FjaGU7IH07XG4gICAgcmV0dXJuIGNhY2hlO1xuICB9O1xuXG4gIGFwaS5maW5nZXJwcmludCA9IGZ1bmN0aW9uIGJyb3dzZXJQcmludCgpIHtcbiAgICByZXR1cm4gcGFkKChuYXZpZ2F0b3IubWltZVR5cGVzLmxlbmd0aCArXG4gICAgICBuYXZpZ2F0b3IudXNlckFnZW50Lmxlbmd0aCkudG9TdHJpbmcoMzYpICtcbiAgICAgIGFwaS5nbG9iYWxDb3VudCgpLnRvU3RyaW5nKDM2KSwgNCk7XG4gIH07XG5cbiAgLy8gZG9uJ3QgY2hhbmdlIGFueXRoaW5nIGZyb20gaGVyZSBkb3duLlxuICBpZiAoYXBwLnJlZ2lzdGVyKSB7XG4gICAgYXBwLnJlZ2lzdGVyKG5hbWVzcGFjZSwgYXBpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gYXBpO1xuICB9IGVsc2Uge1xuICAgIGFwcFtuYW1lc3BhY2VdID0gYXBpO1xuICB9XG5cbn0odGhpcy5hcHBsaXR1ZGUgfHwgdGhpcykpO1xuIiwiXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqXG4gKiBFeHBvc2UgYGRlYnVnKClgIGFzIHRoZSBtb2R1bGUuXG4gKi9cblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kZWJ1ZycpO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9ICd1bmRlZmluZWQnICE9IHR5cGVvZiBjaHJvbWVcbiAgICAgICAgICAgICAgICYmICd1bmRlZmluZWQnICE9IHR5cGVvZiBjaHJvbWUuc3RvcmFnZVxuICAgICAgICAgICAgICAgICAgPyBjaHJvbWUuc3RvcmFnZS5sb2NhbFxuICAgICAgICAgICAgICAgICAgOiBsb2NhbHN0b3JhZ2UoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG4gICdsaWdodHNlYWdyZWVuJyxcbiAgJ2ZvcmVzdGdyZWVuJyxcbiAgJ2dvbGRlbnJvZCcsXG4gICdkb2RnZXJibHVlJyxcbiAgJ2RhcmtvcmNoaWQnLFxuICAnY3JpbXNvbidcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuICAvLyBpcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuICByZXR1cm4gKCdXZWJraXRBcHBlYXJhbmNlJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUpIHx8XG4gICAgLy8gaXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuICAgICh3aW5kb3cuY29uc29sZSAmJiAoY29uc29sZS5maXJlYnVnIHx8IChjb25zb2xlLmV4Y2VwdGlvbiAmJiBjb25zb2xlLnRhYmxlKSkpIHx8XG4gICAgLy8gaXMgZmlyZWZveCA+PSB2MzE/XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG4gICAgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmIHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApID49IDMxKTtcbn1cblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbih2KSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcbn07XG5cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKCkge1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgdmFyIHVzZUNvbG9ycyA9IHRoaXMudXNlQ29sb3JzO1xuXG4gIGFyZ3NbMF0gPSAodXNlQ29sb3JzID8gJyVjJyA6ICcnKVxuICAgICsgdGhpcy5uYW1lc3BhY2VcbiAgICArICh1c2VDb2xvcnMgPyAnICVjJyA6ICcgJylcbiAgICArIGFyZ3NbMF1cbiAgICArICh1c2VDb2xvcnMgPyAnJWMgJyA6ICcgJylcbiAgICArICcrJyArIGV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuICBpZiAoIXVzZUNvbG9ycykgcmV0dXJuIGFyZ3M7XG5cbiAgdmFyIGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuICBhcmdzID0gW2FyZ3NbMF0sIGMsICdjb2xvcjogaW5oZXJpdCddLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7XG5cbiAgLy8gdGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcbiAgLy8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuICAvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxhc3RDID0gMDtcbiAgYXJnc1swXS5yZXBsYWNlKC8lW2EteiVdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgaWYgKCclJScgPT09IG1hdGNoKSByZXR1cm47XG4gICAgaW5kZXgrKztcbiAgICBpZiAoJyVjJyA9PT0gbWF0Y2gpIHtcbiAgICAgIC8vIHdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuICAgICAgLy8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcbiAgICAgIGxhc3RDID0gaW5kZXg7XG4gICAgfVxuICB9KTtcblxuICBhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUubG9nKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5sb2dgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgLy8gdGhpcyBoYWNrZXJ5IGlzIHJlcXVpcmVkIGZvciBJRTgvOSwgd2hlcmVcbiAgLy8gdGhlIGBjb25zb2xlLmxvZ2AgZnVuY3Rpb24gZG9lc24ndCBoYXZlICdhcHBseSdcbiAgcmV0dXJuICdvYmplY3QnID09PSB0eXBlb2YgY29uc29sZVxuICAgICYmIGNvbnNvbGUubG9nXG4gICAgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZS5sb2csIGNvbnNvbGUsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuICB0cnkge1xuICAgIGlmIChudWxsID09IG5hbWVzcGFjZXMpIHtcbiAgICAgIGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBvcnRzLnN0b3JhZ2UuZGVidWcgPSBuYW1lc3BhY2VzO1xuICAgIH1cbiAgfSBjYXRjaChlKSB7fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG4gIHZhciByO1xuICB0cnkge1xuICAgIHIgPSBleHBvcnRzLnN0b3JhZ2UuZGVidWc7XG4gIH0gY2F0Y2goZSkge31cbiAgcmV0dXJuIHI7XG59XG5cbi8qKlxuICogRW5hYmxlIG5hbWVzcGFjZXMgbGlzdGVkIGluIGBsb2NhbFN0b3JhZ2UuZGVidWdgIGluaXRpYWxseS5cbiAqL1xuXG5leHBvcnRzLmVuYWJsZShsb2FkKCkpO1xuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpe1xuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlO1xuICB9IGNhdGNoIChlKSB7fVxufVxuIiwiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKlxuICogRXhwb3NlIGBkZWJ1ZygpYCBhcyB0aGUgbW9kdWxlLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGRlYnVnO1xuZXhwb3J0cy5jb2VyY2UgPSBjb2VyY2U7XG5leHBvcnRzLmRpc2FibGUgPSBkaXNhYmxlO1xuZXhwb3J0cy5lbmFibGUgPSBlbmFibGU7XG5leHBvcnRzLmVuYWJsZWQgPSBlbmFibGVkO1xuZXhwb3J0cy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cbi8qKlxuICogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG4gKi9cblxuZXhwb3J0cy5uYW1lcyA9IFtdO1xuZXhwb3J0cy5za2lwcyA9IFtdO1xuXG4vKipcbiAqIE1hcCBvZiBzcGVjaWFsIFwiJW5cIiBoYW5kbGluZyBmdW5jdGlvbnMsIGZvciB0aGUgZGVidWcgXCJmb3JtYXRcIiBhcmd1bWVudC5cbiAqXG4gKiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlcmNhc2VkIGxldHRlciwgaS5lLiBcIm5cIi5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdHRlcnMgPSB7fTtcblxuLyoqXG4gKiBQcmV2aW91c2x5IGFzc2lnbmVkIGNvbG9yLlxuICovXG5cbnZhciBwcmV2Q29sb3IgPSAwO1xuXG4vKipcbiAqIFByZXZpb3VzIGxvZyB0aW1lc3RhbXAuXG4gKi9cblxudmFyIHByZXZUaW1lO1xuXG4vKipcbiAqIFNlbGVjdCBhIGNvbG9yLlxuICpcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNlbGVjdENvbG9yKCkge1xuICByZXR1cm4gZXhwb3J0cy5jb2xvcnNbcHJldkNvbG9yKysgJSBleHBvcnRzLmNvbG9ycy5sZW5ndGhdO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGRlYnVnZ2VyIHdpdGggdGhlIGdpdmVuIGBuYW1lc3BhY2VgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBkZWJ1ZyhuYW1lc3BhY2UpIHtcblxuICAvLyBkZWZpbmUgdGhlIGBkaXNhYmxlZGAgdmVyc2lvblxuICBmdW5jdGlvbiBkaXNhYmxlZCgpIHtcbiAgfVxuICBkaXNhYmxlZC5lbmFibGVkID0gZmFsc2U7XG5cbiAgLy8gZGVmaW5lIHRoZSBgZW5hYmxlZGAgdmVyc2lvblxuICBmdW5jdGlvbiBlbmFibGVkKCkge1xuXG4gICAgdmFyIHNlbGYgPSBlbmFibGVkO1xuXG4gICAgLy8gc2V0IGBkaWZmYCB0aW1lc3RhbXBcbiAgICB2YXIgY3VyciA9ICtuZXcgRGF0ZSgpO1xuICAgIHZhciBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG4gICAgc2VsZi5kaWZmID0gbXM7XG4gICAgc2VsZi5wcmV2ID0gcHJldlRpbWU7XG4gICAgc2VsZi5jdXJyID0gY3VycjtcbiAgICBwcmV2VGltZSA9IGN1cnI7XG5cbiAgICAvLyBhZGQgdGhlIGBjb2xvcmAgaWYgbm90IHNldFxuICAgIGlmIChudWxsID09IHNlbGYudXNlQ29sb3JzKSBzZWxmLnVzZUNvbG9ycyA9IGV4cG9ydHMudXNlQ29sb3JzKCk7XG4gICAgaWYgKG51bGwgPT0gc2VsZi5jb2xvciAmJiBzZWxmLnVzZUNvbG9ycykgc2VsZi5jb2xvciA9IHNlbGVjdENvbG9yKCk7XG5cbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICBhcmdzWzBdID0gZXhwb3J0cy5jb2VyY2UoYXJnc1swXSk7XG5cbiAgICBpZiAoJ3N0cmluZycgIT09IHR5cGVvZiBhcmdzWzBdKSB7XG4gICAgICAvLyBhbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlb1xuICAgICAgYXJncyA9IFsnJW8nXS5jb25jYXQoYXJncyk7XG4gICAgfVxuXG4gICAgLy8gYXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoLyUoW2EteiVdKS9nLCBmdW5jdGlvbihtYXRjaCwgZm9ybWF0KSB7XG4gICAgICAvLyBpZiB3ZSBlbmNvdW50ZXIgYW4gZXNjYXBlZCAlIHRoZW4gZG9uJ3QgaW5jcmVhc2UgdGhlIGFycmF5IGluZGV4XG4gICAgICBpZiAobWF0Y2ggPT09ICclJScpIHJldHVybiBtYXRjaDtcbiAgICAgIGluZGV4Kys7XG4gICAgICB2YXIgZm9ybWF0dGVyID0gZXhwb3J0cy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG4gICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGZvcm1hdHRlcikge1xuICAgICAgICB2YXIgdmFsID0gYXJnc1tpbmRleF07XG4gICAgICAgIG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTtcblxuICAgICAgICAvLyBub3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG4gICAgICAgIGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgaW5kZXgtLTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcblxuICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZXhwb3J0cy5mb3JtYXRBcmdzKSB7XG4gICAgICBhcmdzID0gZXhwb3J0cy5mb3JtYXRBcmdzLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIH1cbiAgICB2YXIgbG9nRm4gPSBlbmFibGVkLmxvZyB8fCBleHBvcnRzLmxvZyB8fCBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO1xuICAgIGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICB9XG4gIGVuYWJsZWQuZW5hYmxlZCA9IHRydWU7XG5cbiAgdmFyIGZuID0gZXhwb3J0cy5lbmFibGVkKG5hbWVzcGFjZSkgPyBlbmFibGVkIDogZGlzYWJsZWQ7XG5cbiAgZm4ubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXG4gIHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG4gKiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG4gIGV4cG9ydHMuc2F2ZShuYW1lc3BhY2VzKTtcblxuICB2YXIgc3BsaXQgPSAobmFtZXNwYWNlcyB8fCAnJykuc3BsaXQoL1tcXHMsXSsvKTtcbiAgdmFyIGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKCFzcGxpdFtpXSkgY29udGludWU7IC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG4gICAgbmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG4gICAgaWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuICAgICAgZXhwb3J0cy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zdWJzdHIoMSkgKyAnJCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwb3J0cy5uYW1lcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcyArICckJykpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgZXhwb3J0cy5lbmFibGUoJycpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbW9kZSBuYW1lIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG4gIHZhciBpLCBsZW47XG4gIGZvciAoaSA9IDAsIGxlbiA9IGV4cG9ydHMuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoZXhwb3J0cy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGZvciAoaSA9IDAsIGxlbiA9IGV4cG9ydHMubmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoZXhwb3J0cy5uYW1lc1tpXS50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENvZXJjZSBgdmFsYC5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSB2YWxcbiAqIEByZXR1cm4ge01peGVkfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuICBpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiB2YWwuc3RhY2sgfHwgdmFsLm1lc3NhZ2U7XG4gIHJldHVybiB2YWw7XG59XG4iLCJ2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuICAsIEFic3RyYWN0SXRlcmF0b3IgPSByZXF1aXJlKCdhYnN0cmFjdC1sZXZlbGRvd24nKS5BYnN0cmFjdEl0ZXJhdG9yXG5cblxuZnVuY3Rpb24gRGVmZXJyZWRJdGVyYXRvciAob3B0aW9ucykge1xuICBBYnN0cmFjdEl0ZXJhdG9yLmNhbGwodGhpcywgb3B0aW9ucylcblxuICB0aGlzLl9vcHRpb25zID0gb3B0aW9uc1xuICB0aGlzLl9pdGVyYXRvciA9IG51bGxcbiAgdGhpcy5fb3BlcmF0aW9ucyA9IFtdXG59XG5cbnV0aWwuaW5oZXJpdHMoRGVmZXJyZWRJdGVyYXRvciwgQWJzdHJhY3RJdGVyYXRvcilcblxuRGVmZXJyZWRJdGVyYXRvci5wcm90b3R5cGUuc2V0RGIgPSBmdW5jdGlvbiAoZGIpIHtcbiAgdmFyIGl0ID0gdGhpcy5faXRlcmF0b3IgPSBkYi5pdGVyYXRvcih0aGlzLl9vcHRpb25zKVxuICB0aGlzLl9vcGVyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9wKSB7XG4gICAgaXRbb3AubWV0aG9kXS5hcHBseShpdCwgb3AuYXJncylcbiAgfSlcbn1cblxuRGVmZXJyZWRJdGVyYXRvci5wcm90b3R5cGUuX29wZXJhdGlvbiA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZ3MpIHtcbiAgaWYgKHRoaXMuX2l0ZXJhdG9yKVxuICAgIHJldHVybiB0aGlzLl9pdGVyYXRvclttZXRob2RdLmFwcGx5KHRoaXMuX2l0ZXJhdG9yLCBhcmdzKVxuICB0aGlzLl9vcGVyYXRpb25zLnB1c2goeyBtZXRob2Q6IG1ldGhvZCwgYXJnczogYXJncyB9KVxufVxuXG4nbmV4dCBlbmQnLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICBEZWZlcnJlZEl0ZXJhdG9yLnByb3RvdHlwZVsnXycgKyBtXSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9vcGVyYXRpb24obSwgYXJndW1lbnRzKVxuICB9XG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IERlZmVycmVkSXRlcmF0b3I7XG4iLCJ2YXIgdXRpbCAgICAgICAgICAgICAgPSByZXF1aXJlKCd1dGlsJylcbiAgLCBBYnN0cmFjdExldmVsRE9XTiA9IHJlcXVpcmUoJ2Fic3RyYWN0LWxldmVsZG93bicpLkFic3RyYWN0TGV2ZWxET1dOXG4gICwgRGVmZXJyZWRJdGVyYXRvciAgPSByZXF1aXJlKCcuL2RlZmVycmVkLWl0ZXJhdG9yJylcblxuZnVuY3Rpb24gRGVmZXJyZWRMZXZlbERPV04gKGxvY2F0aW9uKSB7XG4gIEFic3RyYWN0TGV2ZWxET1dOLmNhbGwodGhpcywgdHlwZW9mIGxvY2F0aW9uID09ICdzdHJpbmcnID8gbG9jYXRpb24gOiAnJykgLy8gb3B0aW9uYWwgbG9jYXRpb24sIHdobyBjYXJlcz9cbiAgdGhpcy5fZGIgICAgICAgICA9IHVuZGVmaW5lZFxuICB0aGlzLl9vcGVyYXRpb25zID0gW11cbiAgdGhpcy5faXRlcmF0b3JzICA9IFtdXG59XG5cbnV0aWwuaW5oZXJpdHMoRGVmZXJyZWRMZXZlbERPV04sIEFic3RyYWN0TGV2ZWxET1dOKVxuXG4vLyBjYWxsZWQgYnkgTGV2ZWxVUCB3aGVuIHdlIGhhdmUgYSByZWFsIERCIHRvIHRha2UgaXRzIHBsYWNlXG5EZWZlcnJlZExldmVsRE9XTi5wcm90b3R5cGUuc2V0RGIgPSBmdW5jdGlvbiAoZGIpIHtcbiAgdGhpcy5fZGIgPSBkYlxuICB0aGlzLl9vcGVyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9wKSB7XG4gICAgZGJbb3AubWV0aG9kXS5hcHBseShkYiwgb3AuYXJncylcbiAgfSlcbiAgdGhpcy5faXRlcmF0b3JzLmZvckVhY2goZnVuY3Rpb24gKGl0KSB7XG4gICAgaXQuc2V0RGIoZGIpXG4gIH0pXG59XG5cbkRlZmVycmVkTGV2ZWxET1dOLnByb3RvdHlwZS5fb3BlbiA9IGZ1bmN0aW9uIChvcHRpb25zLCBjYWxsYmFjaykge1xuICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaylcbn1cblxuLy8gcXVldWUgYSBuZXcgZGVmZXJyZWQgb3BlcmF0aW9uXG5EZWZlcnJlZExldmVsRE9XTi5wcm90b3R5cGUuX29wZXJhdGlvbiA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZ3MpIHtcbiAgaWYgKHRoaXMuX2RiKVxuICAgIHJldHVybiB0aGlzLl9kYlttZXRob2RdLmFwcGx5KHRoaXMuX2RiLCBhcmdzKVxuICB0aGlzLl9vcGVyYXRpb25zLnB1c2goeyBtZXRob2Q6IG1ldGhvZCwgYXJnczogYXJncyB9KVxufVxuXG4vLyBkZWZlcnJhYmxlc1xuJ3B1dCBnZXQgZGVsIGJhdGNoIGFwcHJveGltYXRlU2l6ZScuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gIERlZmVycmVkTGV2ZWxET1dOLnByb3RvdHlwZVsnXycgKyBtXSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9vcGVyYXRpb24obSwgYXJndW1lbnRzKVxuICB9XG59KVxuXG5EZWZlcnJlZExldmVsRE9XTi5wcm90b3R5cGUuX2lzQnVmZmVyID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKG9iailcbn1cblxuRGVmZXJyZWRMZXZlbERPV04ucHJvdG90eXBlLl9pdGVyYXRvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmICh0aGlzLl9kYilcbiAgICByZXR1cm4gdGhpcy5fZGIuaXRlcmF0b3IuYXBwbHkodGhpcy5fZGIsIGFyZ3VtZW50cylcbiAgdmFyIGl0ID0gbmV3IERlZmVycmVkSXRlcmF0b3Iob3B0aW9ucylcbiAgdGhpcy5faXRlcmF0b3JzLnB1c2goaXQpXG4gIHJldHVybiBpdFxufVxuXG5tb2R1bGUuZXhwb3J0cyAgICAgICAgICAgICAgICAgID0gRGVmZXJyZWRMZXZlbERPV05cbm1vZHVsZS5leHBvcnRzLkRlZmVycmVkSXRlcmF0b3IgPSBEZWZlcnJlZEl0ZXJhdG9yXG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXJndW1lbnRzW2ldICE9PSB1bmRlZmluZWQpIHJldHVybiBhcmd1bWVudHNbaV07XG4gICAgfVxufTtcbiIsInZhciBzdHJlYW0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKVxudmFyIGVvcyA9IHJlcXVpcmUoJ2VuZC1vZi1zdHJlYW0nKVxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJylcblxudmFyIFNJR05BTF9GTFVTSCA9IG5ldyBCdWZmZXIoWzBdKVxuXG52YXIgb251bmNvcmsgPSBmdW5jdGlvbihzZWxmLCBmbikge1xuICBpZiAoc2VsZi5fY29ya2VkKSBzZWxmLm9uY2UoJ3VuY29yaycsIGZuKVxuICBlbHNlIGZuKClcbn1cblxudmFyIGRlc3Ryb3llciA9IGZ1bmN0aW9uKHNlbGYsIGVuZCkge1xuICByZXR1cm4gZnVuY3Rpb24oZXJyKSB7XG4gICAgaWYgKGVycikgc2VsZi5kZXN0cm95KGVyci5tZXNzYWdlID09PSAncHJlbWF0dXJlIGNsb3NlJyA/IG51bGwgOiBlcnIpXG4gICAgZWxzZSBpZiAoZW5kICYmICFzZWxmLl9lbmRlZCkgc2VsZi5lbmQoKVxuICB9XG59XG5cbnZhciBlbmQgPSBmdW5jdGlvbih3cywgZm4pIHtcbiAgaWYgKCF3cykgcmV0dXJuIGZuKClcbiAgaWYgKHdzLl93cml0YWJsZVN0YXRlICYmIHdzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkKSByZXR1cm4gZm4oKVxuICBpZiAod3MuX3dyaXRhYmxlU3RhdGUpIHJldHVybiB3cy5lbmQoZm4pXG4gIHdzLmVuZCgpXG4gIGZuKClcbn1cblxudmFyIHRvU3RyZWFtczIgPSBmdW5jdGlvbihycykge1xuICByZXR1cm4gbmV3IChzdHJlYW0uUmVhZGFibGUpKHtvYmplY3RNb2RlOnRydWUsIGhpZ2hXYXRlck1hcms6MTZ9KS53cmFwKHJzKVxufVxuXG52YXIgRHVwbGV4aWZ5ID0gZnVuY3Rpb24od3JpdGFibGUsIHJlYWRhYmxlLCBvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXhpZnkpKSByZXR1cm4gbmV3IER1cGxleGlmeSh3cml0YWJsZSwgcmVhZGFibGUsIG9wdHMpXG4gIHN0cmVhbS5EdXBsZXguY2FsbCh0aGlzLCBvcHRzKVxuXG4gIHRoaXMuX3dyaXRhYmxlID0gbnVsbFxuICB0aGlzLl9yZWFkYWJsZSA9IG51bGxcbiAgdGhpcy5fcmVhZGFibGUyID0gbnVsbFxuXG4gIHRoaXMuX2ZvcndhcmREZXN0cm95ID0gIW9wdHMgfHwgb3B0cy5kZXN0cm95ICE9PSBmYWxzZVxuICB0aGlzLl9mb3J3YXJkRW5kID0gIW9wdHMgfHwgb3B0cy5lbmQgIT09IGZhbHNlXG4gIHRoaXMuX2NvcmtlZCA9IDEgLy8gc3RhcnQgY29ya2VkXG4gIHRoaXMuX29uZHJhaW4gPSBudWxsXG4gIHRoaXMuX2RyYWluZWQgPSBmYWxzZVxuICB0aGlzLl9mb3J3YXJkaW5nID0gZmFsc2VcbiAgdGhpcy5fdW53cml0ZSA9IG51bGxcbiAgdGhpcy5fdW5yZWFkID0gbnVsbFxuICB0aGlzLl9lbmRlZCA9IGZhbHNlXG5cbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZVxuXG4gIGlmICh3cml0YWJsZSkgdGhpcy5zZXRXcml0YWJsZSh3cml0YWJsZSlcbiAgaWYgKHJlYWRhYmxlKSB0aGlzLnNldFJlYWRhYmxlKHJlYWRhYmxlKVxufVxuXG51dGlsLmluaGVyaXRzKER1cGxleGlmeSwgc3RyZWFtLkR1cGxleClcblxuRHVwbGV4aWZ5Lm9iaiA9IGZ1bmN0aW9uKHdyaXRhYmxlLCByZWFkYWJsZSwgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuICBvcHRzLm9iamVjdE1vZGUgPSB0cnVlXG4gIG9wdHMuaGlnaFdhdGVyTWFyayA9IDE2XG4gIHJldHVybiBuZXcgRHVwbGV4aWZ5KHdyaXRhYmxlLCByZWFkYWJsZSwgb3B0cylcbn1cblxuRHVwbGV4aWZ5LnByb3RvdHlwZS5jb3JrID0gZnVuY3Rpb24oKSB7XG4gIGlmICgrK3RoaXMuX2NvcmtlZCA9PT0gMSkgdGhpcy5lbWl0KCdjb3JrJylcbn1cblxuRHVwbGV4aWZ5LnByb3RvdHlwZS51bmNvcmsgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX2NvcmtlZCAmJiAtLXRoaXMuX2NvcmtlZCA9PT0gMCkgdGhpcy5lbWl0KCd1bmNvcmsnKVxufVxuXG5EdXBsZXhpZnkucHJvdG90eXBlLnNldFdyaXRhYmxlID0gZnVuY3Rpb24od3JpdGFibGUpIHtcbiAgaWYgKHRoaXMuX3Vud3JpdGUpIHRoaXMuX3Vud3JpdGUoKVxuXG4gIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgIGlmICh3cml0YWJsZSAmJiB3cml0YWJsZS5kZXN0cm95KSB3cml0YWJsZS5kZXN0cm95KClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICh3cml0YWJsZSA9PT0gbnVsbCB8fCB3cml0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICB0aGlzLmVuZCgpXG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgc2VsZiA9IHRoaXNcbiAgdmFyIHVuZW5kID0gZW9zKHdyaXRhYmxlLCB7d3JpdGFibGU6dHJ1ZSwgcmVhZGFibGU6ZmFsc2V9LCBkZXN0cm95ZXIodGhpcywgdGhpcy5fZm9yd2FyZEVuZCkpXG5cbiAgdmFyIG9uZHJhaW4gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgb25kcmFpbiA9IHNlbGYuX29uZHJhaW5cbiAgICBzZWxmLl9vbmRyYWluID0gbnVsbFxuICAgIGlmIChvbmRyYWluKSBvbmRyYWluKClcbiAgfVxuXG4gIHZhciBjbGVhciA9IGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuX3dyaXRhYmxlLnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pXG4gICAgdW5lbmQoKVxuICB9XG5cbiAgaWYgKHRoaXMuX3Vud3JpdGUpIHByb2Nlc3MubmV4dFRpY2sob25kcmFpbikgLy8gZm9yY2UgYSBkcmFpbiBvbiBzdHJlYW0gcmVzZXQgdG8gYXZvaWQgbGl2ZWxvY2tzXG5cbiAgdGhpcy5fd3JpdGFibGUgPSB3cml0YWJsZVxuICB0aGlzLl93cml0YWJsZS5vbignZHJhaW4nLCBvbmRyYWluKVxuICB0aGlzLl91bndyaXRlID0gY2xlYXJcblxuICB0aGlzLnVuY29yaygpIC8vIGFsd2F5cyB1bmNvcmsgc2V0V3JpdGFibGVcbn1cblxuRHVwbGV4aWZ5LnByb3RvdHlwZS5zZXRSZWFkYWJsZSA9IGZ1bmN0aW9uKHJlYWRhYmxlKSB7XG4gIGlmICh0aGlzLl91bnJlYWQpIHRoaXMuX3VucmVhZCgpXG5cbiAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgaWYgKHJlYWRhYmxlICYmIHJlYWRhYmxlLmRlc3Ryb3kpIHJlYWRhYmxlLmRlc3Ryb3koKVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHJlYWRhYmxlID09PSBudWxsIHx8IHJlYWRhYmxlID09PSBmYWxzZSkge1xuICAgIHRoaXMucHVzaChudWxsKVxuICAgIHRoaXMucmVzdW1lKClcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBzZWxmID0gdGhpc1xuICB2YXIgdW5lbmQgPSBlb3MocmVhZGFibGUsIHt3cml0YWJsZTpmYWxzZSwgcmVhZGFibGU6dHJ1ZX0sIGRlc3Ryb3llcih0aGlzKSlcblxuICB2YXIgb25yZWFkYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuX2ZvcndhcmQoKVxuICB9XG5cbiAgdmFyIG9uZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5wdXNoKG51bGwpXG4gIH1cblxuICB2YXIgY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgICBzZWxmLl9yZWFkYWJsZTIucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgb25yZWFkYWJsZSlcbiAgICBzZWxmLl9yZWFkYWJsZTIucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKVxuICAgIHVuZW5kKClcbiAgfVxuXG4gIHRoaXMuX2RyYWluZWQgPSB0cnVlXG4gIHRoaXMuX3JlYWRhYmxlID0gcmVhZGFibGVcbiAgdGhpcy5fcmVhZGFibGUyID0gcmVhZGFibGUuX3JlYWRhYmxlU3RhdGUgPyByZWFkYWJsZSA6IHRvU3RyZWFtczIocmVhZGFibGUpXG4gIHRoaXMuX3JlYWRhYmxlMi5vbigncmVhZGFibGUnLCBvbnJlYWRhYmxlKVxuICB0aGlzLl9yZWFkYWJsZTIub24oJ2VuZCcsIG9uZW5kKVxuICB0aGlzLl91bnJlYWQgPSBjbGVhclxuXG4gIHRoaXMuX2ZvcndhcmQoKVxufVxuXG5EdXBsZXhpZnkucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2RyYWluZWQgPSB0cnVlXG4gIHRoaXMuX2ZvcndhcmQoKVxufVxuXG5EdXBsZXhpZnkucHJvdG90eXBlLl9mb3J3YXJkID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9mb3J3YXJkaW5nIHx8ICF0aGlzLl9yZWFkYWJsZTIgfHwgIXRoaXMuX2RyYWluZWQpIHJldHVyblxuICB0aGlzLl9mb3J3YXJkaW5nID0gdHJ1ZVxuXG4gIHZhciBkYXRhXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlMi5fcmVhZGFibGVTdGF0ZVxuXG4gIHdoaWxlICgoZGF0YSA9IHRoaXMuX3JlYWRhYmxlMi5yZWFkKHN0YXRlLmJ1ZmZlci5sZW5ndGggPyBzdGF0ZS5idWZmZXJbMF0ubGVuZ3RoIDogc3RhdGUubGVuZ3RoKSkgIT09IG51bGwpIHtcbiAgICB0aGlzLl9kcmFpbmVkID0gdGhpcy5wdXNoKGRhdGEpXG4gIH1cblxuICB0aGlzLl9mb3J3YXJkaW5nID0gZmFsc2Vcbn1cblxuRHVwbGV4aWZ5LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oZXJyKSB7XG4gIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG4gIHRoaXMuZGVzdHJveWVkID0gdHJ1ZVxuXG4gIHZhciBzZWxmID0gdGhpc1xuICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuX2Rlc3Ryb3koZXJyKVxuICB9KVxufVxuXG5EdXBsZXhpZnkucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24oZXJyKSB7XG4gIGlmIChlcnIpIHtcbiAgICB2YXIgb25kcmFpbiA9IHRoaXMuX29uZHJhaW5cbiAgICB0aGlzLl9vbmRyYWluID0gbnVsbFxuICAgIGlmIChvbmRyYWluKSBvbmRyYWluKGVycilcbiAgICBlbHNlIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH1cblxuICBpZiAodGhpcy5fZm9yd2FyZERlc3Ryb3kpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGUgJiYgdGhpcy5fcmVhZGFibGUuZGVzdHJveSkgdGhpcy5fcmVhZGFibGUuZGVzdHJveSgpXG4gICAgaWYgKHRoaXMuX3dyaXRhYmxlICYmIHRoaXMuX3dyaXRhYmxlLmRlc3Ryb3kpIHRoaXMuX3dyaXRhYmxlLmRlc3Ryb3koKVxuICB9XG5cbiAgdGhpcy5lbWl0KCdjbG9zZScpXG59XG5cbkR1cGxleGlmeS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24oZGF0YSwgZW5jLCBjYikge1xuICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVybiBjYigpXG4gIGlmICh0aGlzLl9jb3JrZWQpIHJldHVybiBvbnVuY29yayh0aGlzLCB0aGlzLl93cml0ZS5iaW5kKHRoaXMsIGRhdGEsIGVuYywgY2IpKVxuICBpZiAoZGF0YSA9PT0gU0lHTkFMX0ZMVVNIKSByZXR1cm4gdGhpcy5fZmluaXNoKGNiKVxuICBpZiAoIXRoaXMuX3dyaXRhYmxlKSByZXR1cm4gY2IoKVxuXG4gIGlmICh0aGlzLl93cml0YWJsZS53cml0ZShkYXRhKSA9PT0gZmFsc2UpIHRoaXMuX29uZHJhaW4gPSBjYlxuICBlbHNlIGNiKClcbn1cblxuXG5EdXBsZXhpZnkucHJvdG90eXBlLl9maW5pc2ggPSBmdW5jdGlvbihjYikge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgdGhpcy5lbWl0KCdwcmVlbmQnKVxuICBvbnVuY29yayh0aGlzLCBmdW5jdGlvbigpIHtcbiAgICBlbmQoc2VsZi5fZm9yd2FyZEVuZCAmJiBzZWxmLl93cml0YWJsZSwgZnVuY3Rpb24oKSB7XG4gICAgICAvLyBoYXh4IHRvIG5vdCBlbWl0IHByZWZpbmlzaCB0d2ljZVxuICAgICAgaWYgKHNlbGYuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQgPT09IGZhbHNlKSBzZWxmLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZVxuICAgICAgc2VsZi5lbWl0KCdwcmVmaW5pc2gnKVxuICAgICAgb251bmNvcmsoc2VsZiwgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuRHVwbGV4aWZ5LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbihkYXRhLCBlbmMsIGNiKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHRoaXMuZW5kKG51bGwsIG51bGwsIGRhdGEpXG4gIGlmICh0eXBlb2YgZW5jID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdGhpcy5lbmQoZGF0YSwgbnVsbCwgZW5jKVxuICB0aGlzLl9lbmRlZCA9IHRydWVcbiAgaWYgKGRhdGEpIHRoaXMud3JpdGUoZGF0YSlcbiAgaWYgKCF0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZykgdGhpcy53cml0ZShTSUdOQUxfRkxVU0gpXG4gIHJldHVybiBzdHJlYW0uV3JpdGFibGUucHJvdG90eXBlLmVuZC5jYWxsKHRoaXMsIGNiKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleGlmeSIsInZhciBvbmNlID0gcmVxdWlyZSgnb25jZScpO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uKCkge307XG5cbnZhciBpc1JlcXVlc3QgPSBmdW5jdGlvbihzdHJlYW0pIHtcblx0cmV0dXJuIHN0cmVhbS5zZXRIZWFkZXIgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydCA9PT0gJ2Z1bmN0aW9uJztcbn07XG5cbnZhciBlb3MgPSBmdW5jdGlvbihzdHJlYW0sIG9wdHMsIGNhbGxiYWNrKSB7XG5cdGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGVvcyhzdHJlYW0sIG51bGwsIG9wdHMpO1xuXHRpZiAoIW9wdHMpIG9wdHMgPSB7fTtcblxuXHRjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG5cblx0dmFyIHdzID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuXHR2YXIgcnMgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG5cdHZhciByZWFkYWJsZSA9IG9wdHMucmVhZGFibGUgfHwgKG9wdHMucmVhZGFibGUgIT09IGZhbHNlICYmIHN0cmVhbS5yZWFkYWJsZSk7XG5cdHZhciB3cml0YWJsZSA9IG9wdHMud3JpdGFibGUgfHwgKG9wdHMud3JpdGFibGUgIT09IGZhbHNlICYmIHN0cmVhbS53cml0YWJsZSk7XG5cblx0dmFyIG9ubGVnYWN5ZmluaXNoID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCFzdHJlYW0ud3JpdGFibGUpIG9uZmluaXNoKCk7XG5cdH07XG5cblx0dmFyIG9uZmluaXNoID0gZnVuY3Rpb24oKSB7XG5cdFx0d3JpdGFibGUgPSBmYWxzZTtcblx0XHRpZiAoIXJlYWRhYmxlKSBjYWxsYmFjaygpO1xuXHR9O1xuXG5cdHZhciBvbmVuZCA9IGZ1bmN0aW9uKCkge1xuXHRcdHJlYWRhYmxlID0gZmFsc2U7XG5cdFx0aWYgKCF3cml0YWJsZSkgY2FsbGJhY2soKTtcblx0fTtcblxuXHR2YXIgb25jbG9zZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmIChyZWFkYWJsZSAmJiAhKHJzICYmIHJzLmVuZGVkKSkgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcigncHJlbWF0dXJlIGNsb3NlJykpO1xuXHRcdGlmICh3cml0YWJsZSAmJiAhKHdzICYmIHdzLmVuZGVkKSkgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcigncHJlbWF0dXJlIGNsb3NlJykpO1xuXHR9O1xuXG5cdHZhciBvbnJlcXVlc3QgPSBmdW5jdGlvbigpIHtcblx0XHRzdHJlYW0ucmVxLm9uKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG5cdH07XG5cblx0aWYgKGlzUmVxdWVzdChzdHJlYW0pKSB7XG5cdFx0c3RyZWFtLm9uKCdjb21wbGV0ZScsIG9uZmluaXNoKTtcblx0XHRzdHJlYW0ub24oJ2Fib3J0Jywgb25jbG9zZSk7XG5cdFx0aWYgKHN0cmVhbS5yZXEpIG9ucmVxdWVzdCgpO1xuXHRcdGVsc2Ugc3RyZWFtLm9uKCdyZXF1ZXN0Jywgb25yZXF1ZXN0KTtcblx0fSBlbHNlIGlmICh3cml0YWJsZSAmJiAhd3MpIHsgLy8gbGVnYWN5IHN0cmVhbXNcblx0XHRzdHJlYW0ub24oJ2VuZCcsIG9ubGVnYWN5ZmluaXNoKTtcblx0XHRzdHJlYW0ub24oJ2Nsb3NlJywgb25sZWdhY3lmaW5pc2gpO1xuXHR9XG5cblx0c3RyZWFtLm9uKCdlbmQnLCBvbmVuZCk7XG5cdHN0cmVhbS5vbignZmluaXNoJywgb25maW5pc2gpO1xuXHRpZiAob3B0cy5lcnJvciAhPT0gZmFsc2UpIHN0cmVhbS5vbignZXJyb3InLCBjYWxsYmFjayk7XG5cdHN0cmVhbS5vbignY2xvc2UnLCBvbmNsb3NlKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0c3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjb21wbGV0ZScsIG9uZmluaXNoKTtcblx0XHRzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgb25jbG9zZSk7XG5cdFx0c3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdyZXF1ZXN0Jywgb25yZXF1ZXN0KTtcblx0XHRpZiAoc3RyZWFtLnJlcSkgc3RyZWFtLnJlcS5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuXHRcdHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25sZWdhY3lmaW5pc2gpO1xuXHRcdHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaCk7XG5cdFx0c3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG5cdFx0c3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG5cdFx0c3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGNhbGxiYWNrKTtcblx0XHRzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG5cdH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVvczsiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhZGFibGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgcHJvY2Vzc05leHRUaWNrID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlO1xuXG52YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBFRWxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBlbWl0dGVyLmxpc3RlbmVycyh0eXBlKS5sZW5ndGg7XG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbTtcbihmdW5jdGlvbiAoKXt0cnl7XG4gIFN0cmVhbSA9IHJlcXVpcmUoJ3N0JyArICdyZWFtJyk7XG59Y2F0Y2goXyl7fWZpbmFsbHl7XG4gIGlmICghU3RyZWFtKVxuICAgIFN0cmVhbSA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbn19KCkpXG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBkZWJ1Z1V0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgZGVidWc7XG5pZiAoZGVidWdVdGlsICYmIGRlYnVnVXRpbC5kZWJ1Z2xvZykge1xuICBkZWJ1ZyA9IGRlYnVnVXRpbC5kZWJ1Z2xvZygnc3RyZWFtJyk7XG59IGVsc2Uge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uICgpIHt9O1xufVxuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBTdHJpbmdEZWNvZGVyO1xuXG51dGlsLmluaGVyaXRzKFJlYWRhYmxlLCBTdHJlYW0pO1xuXG52YXIgRHVwbGV4O1xuZnVuY3Rpb24gUmVhZGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcuIFVzZWQgdG8gbWFrZSByZWFkKG4pIGlnbm9yZSBuIGFuZCB0b1xuICAvLyBtYWtlIGFsbCB0aGUgYnVmZmVyIG1lcmdpbmcgYW5kIGxlbmd0aCBjaGVja3MgZ28gYXdheVxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoc3RyZWFtIGluc3RhbmNlb2YgRHVwbGV4KVxuICAgIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIGRlZmF1bHRId20gPSB0aGlzLm9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDtcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gKGh3bSB8fCBod20gPT09IDApID8gaHdtIDogZGVmYXVsdEh3bTtcblxuICAvLyBjYXN0IHRvIGludHMuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IH5+dGhpcy5oaWdoV2F0ZXJNYXJrO1xuXG4gIHRoaXMuYnVmZmVyID0gW107XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgdGhpcy5waXBlcyA9IG51bGw7XG4gIHRoaXMucGlwZXNDb3VudCA9IDA7XG4gIHRoaXMuZmxvd2luZyA9IG51bGw7XG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIHRoaXMucmVhZGluZyA9IGZhbHNlO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIG9ud3JpdGUgY2IgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LFxuICAvLyBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlIGFueVxuICAvLyBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBjYWxsLlxuICB0aGlzLnN5bmMgPSB0cnVlO1xuXG4gIC8vIHdoZW5ldmVyIHdlIHJldHVybiBudWxsLCB0aGVuIHdlIHNldCBhIGZsYWcgdG8gc2F5XG4gIC8vIHRoYXQgd2UncmUgYXdhaXRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGVtaXNzaW9uLlxuICB0aGlzLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLnJlYWRhYmxlTGlzdGVuaW5nID0gZmFsc2U7XG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBvcHRpb25zLmRlZmF1bHRFbmNvZGluZyB8fCAndXRmOCc7XG5cbiAgLy8gd2hlbiBwaXBpbmcsIHdlIG9ubHkgY2FyZSBhYm91dCAncmVhZGFibGUnIGV2ZW50cyB0aGF0IGhhcHBlblxuICAvLyBhZnRlciByZWFkKClpbmcgYWxsIHRoZSBieXRlcyBhbmQgbm90IGdldHRpbmcgYW55IHB1c2hiYWNrLlxuICB0aGlzLnJhbk91dCA9IGZhbHNlO1xuXG4gIC8vIHRoZSBudW1iZXIgb2Ygd3JpdGVycyB0aGF0IGFyZSBhd2FpdGluZyBhIGRyYWluIGV2ZW50IGluIC5waXBlKClzXG4gIHRoaXMuYXdhaXREcmFpbiA9IDA7XG5cbiAgLy8gaWYgdHJ1ZSwgYSBtYXliZVJlYWRNb3JlIGhhcyBiZWVuIHNjaGVkdWxlZFxuICB0aGlzLnJlYWRpbmdNb3JlID0gZmFsc2U7XG5cbiAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gIGlmIChvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgaWYgKCFTdHJpbmdEZWNvZGVyKVxuICAgICAgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyk7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gIH1cbn1cblxudmFyIER1cGxleDtcbmZ1bmN0aW9uIFJlYWRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZGFibGUpKVxuICAgIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucyk7XG5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeVxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5yZWFkID09PSAnZnVuY3Rpb24nKVxuICAgIHRoaXMuX3JlYWQgPSBvcHRpb25zLnJlYWQ7XG5cbiAgU3RyZWFtLmNhbGwodGhpcyk7XG59XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICBpZiAoZW5jb2RpbmcgIT09IHN0YXRlLmVuY29kaW5nKSB7XG4gICAgICBjaHVuayA9IG5ldyBCdWZmZXIoY2h1bmssIGVuY29kaW5nKTtcbiAgICAgIGVuY29kaW5nID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgZmFsc2UpO1xufTtcblxuLy8gVW5zaGlmdCBzaG91bGQgKmFsd2F5cyogYmUgc29tZXRoaW5nIGRpcmVjdGx5IG91dCBvZiByZWFkKClcblJlYWRhYmxlLnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24oY2h1bmspIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCAnJywgdHJ1ZSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9PT0gZmFsc2U7XG59O1xuXG5mdW5jdGlvbiByZWFkYWJsZUFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgYWRkVG9Gcm9udCkge1xuICB2YXIgZXIgPSBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKTtcbiAgaWYgKGVyKSB7XG4gICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9IGVsc2UgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSk7XG4gIH0gZWxzZSBpZiAoc3RhdGUub2JqZWN0TW9kZSB8fCBjaHVuayAmJiBjaHVuay5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHN0YXRlLmVuZGVkICYmICFhZGRUb0Zyb250KSB7XG4gICAgICB2YXIgZSA9IG5ldyBFcnJvcignc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnKTtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGUpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUuZW5kRW1pdHRlZCAmJiBhZGRUb0Zyb250KSB7XG4gICAgICB2YXIgZSA9IG5ldyBFcnJvcignc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnKTtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhYWRkVG9Gcm9udCAmJiAhZW5jb2RpbmcpXG4gICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAgIGlmICghYWRkVG9Gcm9udClcbiAgICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuXG4gICAgICAvLyBpZiB3ZSB3YW50IHRoZSBkYXRhIG5vdywganVzdCBlbWl0IGl0LlxuICAgICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmICFzdGF0ZS5zeW5jKSB7XG4gICAgICAgIHN0cmVhbS5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICBzdHJlYW0ucmVhZCgwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgYnVmZmVyIGluZm8uXG4gICAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICAgICAgaWYgKGFkZFRvRnJvbnQpXG4gICAgICAgICAgc3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuXG4gICAgICAgIGlmIChzdGF0ZS5uZWVkUmVhZGFibGUpXG4gICAgICAgICAgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG4gICAgICB9XG5cbiAgICAgIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCFhZGRUb0Zyb250KSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIG5lZWRNb3JlRGF0YShzdGF0ZSk7XG59XG5cblxuLy8gaWYgaXQncyBwYXN0IHRoZSBoaWdoIHdhdGVyIG1hcmssIHdlIGNhbiBwdXNoIGluIHNvbWUgbW9yZS5cbi8vIEFsc28sIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXQsIHdlIGNhbiBzdGFuZCBzb21lXG4vLyBtb3JlIGJ5dGVzLiAgVGhpcyBpcyB0byB3b3JrIGFyb3VuZCBjYXNlcyB3aGVyZSBod209MCxcbi8vIHN1Y2ggYXMgdGhlIHJlcGwuICBBbHNvLCBpZiB0aGUgcHVzaCgpIHRyaWdnZXJlZCBhXG4vLyByZWFkYWJsZSBldmVudCwgYW5kIHRoZSB1c2VyIGNhbGxlZCByZWFkKGxhcmdlTnVtYmVyKSBzdWNoIHRoYXRcbi8vIG5lZWRSZWFkYWJsZSB3YXMgc2V0LCB0aGVuIHdlIG91Z2h0IHRvIHB1c2ggbW9yZSwgc28gdGhhdCBhbm90aGVyXG4vLyAncmVhZGFibGUnIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkLlxuZnVuY3Rpb24gbmVlZE1vcmVEYXRhKHN0YXRlKSB7XG4gIHJldHVybiAhc3RhdGUuZW5kZWQgJiZcbiAgICAgICAgIChzdGF0ZS5uZWVkUmVhZGFibGUgfHxcbiAgICAgICAgICBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8XG4gICAgICAgICAgc3RhdGUubGVuZ3RoID09PSAwKTtcbn1cblxuLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5SZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbihlbmMpIHtcbiAgaWYgKCFTdHJpbmdEZWNvZGVyKVxuICAgIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nID0gZW5jO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiA4TUJcbnZhciBNQVhfSFdNID0gMHg4MDAwMDA7XG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID49IE1BWF9IV00pIHtcbiAgICBuID0gTUFYX0hXTTtcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyXG4gICAgbi0tO1xuICAgIG4gfD0gbiA+Pj4gMTtcbiAgICBuIHw9IG4gPj4+IDI7XG4gICAgbiB8PSBuID4+PiA0O1xuICAgIG4gfD0gbiA+Pj4gODtcbiAgICBuIHw9IG4gPj4+IDE2O1xuICAgIG4rKztcbiAgfVxuICByZXR1cm4gbjtcbn1cblxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKVxuICAgIHJldHVybiAwO1xuXG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKVxuICAgIHJldHVybiBuID09PSAwID8gMCA6IDE7XG5cbiAgaWYgKG4gPT09IG51bGwgfHwgaXNOYU4obikpIHtcbiAgICAvLyBvbmx5IGZsb3cgb25lIGJ1ZmZlciBhdCBhIHRpbWVcbiAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5idWZmZXIubGVuZ3RoKVxuICAgICAgcmV0dXJuIHN0YXRlLmJ1ZmZlclswXS5sZW5ndGg7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbiAgfVxuXG4gIGlmIChuIDw9IDApXG4gICAgcmV0dXJuIDA7XG5cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIHRhcmdldCBidWZmZXIgbGV2ZWwsXG4gIC8vIHRoZW4gcmFpc2UgdGhlIHdhdGVyIG1hcmsuICBCdW1wIHVwIHRvIHRoZSBuZXh0IGhpZ2hlc3RcbiAgLy8gcG93ZXIgb2YgMiwgdG8gcHJldmVudCBpbmNyZWFzaW5nIGl0IGV4Y2Vzc2l2ZWx5IGluIHRpbnlcbiAgLy8gYW1vdW50cy5cbiAgaWYgKG4gPiBzdGF0ZS5oaWdoV2F0ZXJNYXJrKVxuICAgIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKTtcblxuICAvLyBkb24ndCBoYXZlIHRoYXQgbXVjaC4gIHJldHVybiBudWxsLCB1bmxlc3Mgd2UndmUgZW5kZWQuXG4gIGlmIChuID4gc3RhdGUubGVuZ3RoKSB7XG4gICAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuO1xufVxuXG4vLyB5b3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihuKSB7XG4gIGRlYnVnKCdyZWFkJywgbik7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBuT3JpZyA9IG47XG5cbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuID4gMClcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcblxuICAvLyBpZiB3ZSdyZSBkb2luZyByZWFkKDApIHRvIHRyaWdnZXIgYSByZWFkYWJsZSBldmVudCwgYnV0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhIGJ1bmNoIG9mIGRhdGEgaW4gdGhlIGJ1ZmZlciwgdGhlbiBqdXN0IHRyaWdnZXJcbiAgLy8gdGhlICdyZWFkYWJsZScgZXZlbnQgYW5kIG1vdmUgb24uXG4gIGlmIChuID09PSAwICYmXG4gICAgICBzdGF0ZS5uZWVkUmVhZGFibGUgJiZcbiAgICAgIChzdGF0ZS5sZW5ndGggPj0gc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5lbmRlZCkpIHtcbiAgICBkZWJ1ZygncmVhZDogZW1pdFJlYWRhYmxlJywgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZClcbiAgICAgIGVuZFJlYWRhYmxlKHRoaXMpO1xuICAgIGVsc2VcbiAgICAgIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKTtcblxuICAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMClcbiAgICAgIGVuZFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQWxsIHRoZSBhY3R1YWwgY2h1bmsgZ2VuZXJhdGlvbiBsb2dpYyBuZWVkcyB0byBiZVxuICAvLyAqYmVsb3cqIHRoZSBjYWxsIHRvIF9yZWFkLiAgVGhlIHJlYXNvbiBpcyB0aGF0IGluIGNlcnRhaW5cbiAgLy8gc3ludGhldGljIHN0cmVhbSBjYXNlcywgc3VjaCBhcyBwYXNzdGhyb3VnaCBzdHJlYW1zLCBfcmVhZFxuICAvLyBtYXkgYmUgYSBjb21wbGV0ZWx5IHN5bmNocm9ub3VzIG9wZXJhdGlvbiB3aGljaCBtYXkgY2hhbmdlXG4gIC8vIHRoZSBzdGF0ZSBvZiB0aGUgcmVhZCBidWZmZXIsIHByb3ZpZGluZyBlbm91Z2ggZGF0YSB3aGVuXG4gIC8vIGJlZm9yZSB0aGVyZSB3YXMgKm5vdCogZW5vdWdoLlxuICAvL1xuICAvLyBTbywgdGhlIHN0ZXBzIGFyZTpcbiAgLy8gMS4gRmlndXJlIG91dCB3aGF0IHRoZSBzdGF0ZSBvZiB0aGluZ3Mgd2lsbCBiZSBhZnRlciB3ZSBkb1xuICAvLyBhIHJlYWQgZnJvbSB0aGUgYnVmZmVyLlxuICAvL1xuICAvLyAyLiBJZiB0aGF0IHJlc3VsdGluZyBzdGF0ZSB3aWxsIHRyaWdnZXIgYSBfcmVhZCwgdGhlbiBjYWxsIF9yZWFkLlxuICAvLyBOb3RlIHRoYXQgdGhpcyBtYXkgYmUgYXN5bmNocm9ub3VzLCBvciBzeW5jaHJvbm91cy4gIFllcywgaXQgaXNcbiAgLy8gZGVlcGx5IHVnbHkgdG8gd3JpdGUgQVBJcyB0aGlzIHdheSwgYnV0IHRoYXQgc3RpbGwgZG9lc24ndCBtZWFuXG4gIC8vIHRoYXQgdGhlIFJlYWRhYmxlIGNsYXNzIHNob3VsZCBiZWhhdmUgaW1wcm9wZXJseSwgYXMgc3RyZWFtcyBhcmVcbiAgLy8gZGVzaWduZWQgdG8gYmUgc3luYy9hc3luYyBhZ25vc3RpYy5cbiAgLy8gVGFrZSBub3RlIGlmIHRoZSBfcmVhZCBjYWxsIGlzIHN5bmMgb3IgYXN5bmMgKGllLCBpZiB0aGUgcmVhZCBjYWxsXG4gIC8vIGhhcyByZXR1cm5lZCB5ZXQpLCBzbyB0aGF0IHdlIGtub3cgd2hldGhlciBvciBub3QgaXQncyBzYWZlIHRvIGVtaXRcbiAgLy8gJ3JlYWRhYmxlJyBldGMuXG4gIC8vXG4gIC8vIDMuIEFjdHVhbGx5IHB1bGwgdGhlIHJlcXVlc3RlZCBjaHVua3Mgb3V0IG9mIHRoZSBidWZmZXIgYW5kIHJldHVybi5cblxuICAvLyBpZiB3ZSBuZWVkIGEgcmVhZGFibGUgZXZlbnQsIHRoZW4gd2UgbmVlZCB0byBkbyBzb21lIHJlYWRpbmcuXG4gIHZhciBkb1JlYWQgPSBzdGF0ZS5uZWVkUmVhZGFibGU7XG4gIGRlYnVnKCduZWVkIHJlYWRhYmxlJywgZG9SZWFkKTtcblxuICAvLyBpZiB3ZSBjdXJyZW50bHkgaGF2ZSBsZXNzIHRoYW4gdGhlIGhpZ2hXYXRlck1hcmssIHRoZW4gYWxzbyByZWFkIHNvbWVcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCB8fCBzdGF0ZS5sZW5ndGggLSBuIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRvUmVhZCA9IHRydWU7XG4gICAgZGVidWcoJ2xlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrJywgZG9SZWFkKTtcbiAgfVxuXG4gIC8vIGhvd2V2ZXIsIGlmIHdlJ3ZlIGVuZGVkLCB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQsIGFuZCBpZiB3ZSdyZSBhbHJlYWR5XG4gIC8vIHJlYWRpbmcsIHRoZW4gaXQncyB1bm5lY2Vzc2FyeS5cbiAgaWYgKHN0YXRlLmVuZGVkIHx8IHN0YXRlLnJlYWRpbmcpIHtcbiAgICBkb1JlYWQgPSBmYWxzZTtcbiAgICBkZWJ1ZygncmVhZGluZyBvciBlbmRlZCcsIGRvUmVhZCk7XG4gIH1cblxuICBpZiAoZG9SZWFkKSB7XG4gICAgZGVidWcoJ2RvIHJlYWQnKTtcbiAgICBzdGF0ZS5yZWFkaW5nID0gdHJ1ZTtcbiAgICBzdGF0ZS5zeW5jID0gdHJ1ZTtcbiAgICAvLyBpZiB0aGUgbGVuZ3RoIGlzIGN1cnJlbnRseSB6ZXJvLCB0aGVuIHdlICpuZWVkKiBhIHJlYWRhYmxlIGV2ZW50LlxuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApXG4gICAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIC8vIGNhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcbiAgICB0aGlzLl9yZWFkKHN0YXRlLmhpZ2hXYXRlck1hcmspO1xuICAgIHN0YXRlLnN5bmMgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIElmIF9yZWFkIHB1c2hlZCBkYXRhIHN5bmNocm9ub3VzbHksIHRoZW4gYHJlYWRpbmdgIHdpbGwgYmUgZmFsc2UsXG4gIC8vIGFuZCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBtdWNoIGRhdGEgd2UgY2FuIHJldHVybiB0byB0aGUgdXNlci5cbiAgaWYgKGRvUmVhZCAmJiAhc3RhdGUucmVhZGluZylcbiAgICBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuXG4gIHZhciByZXQ7XG4gIGlmIChuID4gMClcbiAgICByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7XG4gIGVsc2VcbiAgICByZXQgPSBudWxsO1xuXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIG4gPSAwO1xuICB9XG5cbiAgc3RhdGUubGVuZ3RoIC09IG47XG5cbiAgLy8gSWYgd2UgaGF2ZSBub3RoaW5nIGluIHRoZSBidWZmZXIsIHRoZW4gd2Ugd2FudCB0byBrbm93XG4gIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuZW5kZWQpXG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyBJZiB3ZSB0cmllZCB0byByZWFkKCkgcGFzdCB0aGUgRU9GLCB0aGVuIGVtaXQgZW5kIG9uIHRoZSBuZXh0IHRpY2suXG4gIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApXG4gICAgZW5kUmVhZGFibGUodGhpcyk7XG5cbiAgaWYgKHJldCAhPT0gbnVsbClcbiAgICB0aGlzLmVtaXQoJ2RhdGEnLCByZXQpO1xuXG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKSB7XG4gIHZhciBlciA9IG51bGw7XG4gIGlmICghKEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpICYmXG4gICAgICB0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmXG4gICAgICBjaHVuayAhPT0gbnVsbCAmJlxuICAgICAgY2h1bmsgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICByZXR1cm4gZXI7XG59XG5cblxuZnVuY3Rpb24gb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5lbmRlZCkgcmV0dXJuO1xuICBpZiAoc3RhdGUuZGVjb2Rlcikge1xuICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkge1xuICAgICAgc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWU7XG5cbiAgLy8gZW1pdCAncmVhZGFibGUnIG5vdyB0byBtYWtlIHN1cmUgaXQgZ2V0cyBwaWNrZWQgdXAuXG4gIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xufVxuXG4vLyBEb24ndCBlbWl0IHJlYWRhYmxlIHJpZ2h0IGF3YXkgaW4gc3luYyBtb2RlLCBiZWNhdXNlIHRoaXMgY2FuIHRyaWdnZXJcbi8vIGFub3RoZXIgcmVhZCgpIGNhbGwgPT4gc3RhY2sgb3ZlcmZsb3cuICBUaGlzIHdheSwgaXQgbWlnaHQgdHJpZ2dlclxuLy8gYSBuZXh0VGljayByZWN1cnNpb24gd2FybmluZywgYnV0IHRoYXQncyBub3Qgc28gYmFkLlxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkge1xuICAgIGRlYnVnKCdlbWl0UmVhZGFibGUnLCBzdGF0ZS5mbG93aW5nKTtcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSB0cnVlO1xuICAgIGlmIChzdGF0ZS5zeW5jKVxuICAgICAgcHJvY2Vzc05leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSk7XG4gICAgZWxzZVxuICAgICAgZW1pdFJlYWRhYmxlXyhzdHJlYW0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZV8oc3RyZWFtKSB7XG4gIGRlYnVnKCdlbWl0IHJlYWRhYmxlJyk7XG4gIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpO1xuICBmbG93KHN0cmVhbSk7XG59XG5cblxuLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nTW9yZSkge1xuICAgIHN0YXRlLnJlYWRpbmdNb3JlID0gdHJ1ZTtcbiAgICBwcm9jZXNzTmV4dFRpY2sobWF5YmVSZWFkTW9yZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgd2hpbGUgKCFzdGF0ZS5yZWFkaW5nICYmICFzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5lbmRlZCAmJlxuICAgICAgICAgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRlYnVnKCdtYXliZVJlYWRNb3JlIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICAgIGlmIChsZW4gPT09IHN0YXRlLmxlbmd0aClcbiAgICAgIC8vIGRpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVhaztcbiAgICBlbHNlXG4gICAgICBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gIH1cbiAgc3RhdGUucmVhZGluZ01vcmUgPSBmYWxzZTtcbn1cblxuLy8gYWJzdHJhY3QgbWV0aG9kLiAgdG8gYmUgb3ZlcnJpZGRlbiBpbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gY2FsbCBjYihlciwgZGF0YSkgd2hlcmUgZGF0YSBpcyA8PSBuIGluIGxlbmd0aC5cbi8vIGZvciB2aXJ0dWFsIChub24tc3RyaW5nLCBub24tYnVmZmVyKSBzdHJlYW1zLCBcImxlbmd0aFwiIGlzIHNvbWV3aGF0XG4vLyBhcmJpdHJhcnksIGFuZCBwZXJoYXBzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuXG5SZWFkYWJsZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbihuKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpKTtcbn07XG5cblJlYWRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdCwgcGlwZU9wdHMpIHtcbiAgdmFyIHNyYyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgc3dpdGNoIChzdGF0ZS5waXBlc0NvdW50KSB7XG4gICAgY2FzZSAwOlxuICAgICAgc3RhdGUucGlwZXMgPSBkZXN0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc3RhdGUucGlwZXMgPSBbc3RhdGUucGlwZXMsIGRlc3RdO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0YXRlLnBpcGVzLnB1c2goZGVzdCk7XG4gICAgICBicmVhaztcbiAgfVxuICBzdGF0ZS5waXBlc0NvdW50ICs9IDE7XG4gIGRlYnVnKCdwaXBlIGNvdW50PSVkIG9wdHM9JWonLCBzdGF0ZS5waXBlc0NvdW50LCBwaXBlT3B0cyk7XG5cbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJlxuICAgICAgICAgICAgICBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJlxuICAgICAgICAgICAgICBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcblxuICB2YXIgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogY2xlYW51cDtcbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpXG4gICAgcHJvY2Vzc05leHRUaWNrKGVuZEZuKTtcbiAgZWxzZVxuICAgIHNyYy5vbmNlKCdlbmQnLCBlbmRGbik7XG5cbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSkge1xuICAgIGRlYnVnKCdvbnVucGlwZScpO1xuICAgIGlmIChyZWFkYWJsZSA9PT0gc3JjKSB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgZGVidWcoJ29uZW5kJyk7XG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG4gIC8vIHdoZW4gdGhlIGRlc3QgZHJhaW5zLCBpdCByZWR1Y2VzIHRoZSBhd2FpdERyYWluIGNvdW50ZXJcbiAgLy8gb24gdGhlIHNvdXJjZS4gIFRoaXMgd291bGQgYmUgbW9yZSBlbGVnYW50IHdpdGggYSAub25jZSgpXG4gIC8vIGhhbmRsZXIgaW4gZmxvdygpLCBidXQgYWRkaW5nIGFuZCByZW1vdmluZyByZXBlYXRlZGx5IGlzXG4gIC8vIHRvbyBzbG93LlxuICB2YXIgb25kcmFpbiA9IHBpcGVPbkRyYWluKHNyYyk7XG4gIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbik7XG5cbiAgdmFyIGNsZWFuZWRVcCA9IGZhbHNlO1xuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIGRlYnVnKCdjbGVhbnVwJyk7XG4gICAgLy8gY2xlYW51cCBldmVudCBoYW5kbGVycyBvbmNlIHRoZSBwaXBlIGlzIGJyb2tlblxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgb25kcmFpbik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBjbGVhbnVwKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpO1xuXG4gICAgY2xlYW5lZFVwID0gdHJ1ZTtcblxuICAgIC8vIGlmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gJiZcbiAgICAgICAgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSlcbiAgICAgIG9uZHJhaW4oKTtcbiAgfVxuXG4gIHNyYy5vbignZGF0YScsIG9uZGF0YSk7XG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGRlYnVnKCdvbmRhdGEnKTtcbiAgICB2YXIgcmV0ID0gZGVzdC53cml0ZShjaHVuayk7XG4gICAgaWYgKGZhbHNlID09PSByZXQpIHtcbiAgICAgIC8vIElmIHRoZSB1c2VyIHVucGlwZWQgZHVyaW5nIGBkZXN0LndyaXRlKClgLCBpdCBpcyBwb3NzaWJsZVxuICAgICAgLy8gdG8gZ2V0IHN0dWNrIGluIGEgcGVybWFuZW50bHkgcGF1c2VkIHN0YXRlIGlmIHRoYXQgd3JpdGVcbiAgICAgIC8vIGFsc28gcmV0dXJuZWQgZmFsc2UuXG4gICAgICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSAmJlxuICAgICAgICAgIHN0YXRlLnBpcGVzWzBdID09PSBkZXN0ICYmXG4gICAgICAgICAgc3JjLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA9PT0gMSAmJlxuICAgICAgICAgICFjbGVhbmVkVXApIHtcbiAgICAgICAgZGVidWcoJ2ZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZScsIHNyYy5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKTtcbiAgICAgICAgc3JjLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4rKztcbiAgICAgIH1cbiAgICAgIHNyYy5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBkZXN0IGhhcyBhbiBlcnJvciwgdGhlbiBzdG9wIHBpcGluZyBpbnRvIGl0LlxuICAvLyBob3dldmVyLCBkb24ndCBzdXBwcmVzcyB0aGUgdGhyb3dpbmcgYmVoYXZpb3IgZm9yIHRoaXMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGVyKTtcbiAgICB1bnBpcGUoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGlmIChFRWxpc3RlbmVyQ291bnQoZGVzdCwgJ2Vycm9yJykgPT09IDApXG4gICAgICBkZXN0LmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9XG4gIC8vIFRoaXMgaXMgYSBicnV0YWxseSB1Z2x5IGhhY2sgdG8gbWFrZSBzdXJlIHRoYXQgb3VyIGVycm9yIGhhbmRsZXJcbiAgLy8gaXMgYXR0YWNoZWQgYmVmb3JlIGFueSB1c2VybGFuZCBvbmVzLiAgTkVWRVIgRE8gVEhJUy5cbiAgaWYgKCFkZXN0Ll9ldmVudHMgfHwgIWRlc3QuX2V2ZW50cy5lcnJvcilcbiAgICBkZXN0Lm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICBlbHNlIGlmIChpc0FycmF5KGRlc3QuX2V2ZW50cy5lcnJvcikpXG4gICAgZGVzdC5fZXZlbnRzLmVycm9yLnVuc2hpZnQob25lcnJvcik7XG4gIGVsc2VcbiAgICBkZXN0Ll9ldmVudHMuZXJyb3IgPSBbb25lcnJvciwgZGVzdC5fZXZlbnRzLmVycm9yXTtcblxuXG4gIC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnY2xvc2UnLCBvbmNsb3NlKTtcbiAgZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgZGVidWcoJ29uZmluaXNoJyk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcblxuICBmdW5jdGlvbiB1bnBpcGUoKSB7XG4gICAgZGVidWcoJ3VucGlwZScpO1xuICAgIHNyYy51bnBpcGUoZGVzdCk7XG4gIH1cblxuICAvLyB0ZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0b1xuICBkZXN0LmVtaXQoJ3BpcGUnLCBzcmMpO1xuXG4gIC8vIHN0YXJ0IHRoZSBmbG93IGlmIGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3BpcGUgcmVzdW1lJyk7XG4gICAgc3JjLnJlc3VtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG5mdW5jdGlvbiBwaXBlT25EcmFpbihzcmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTtcbiAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbilcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW4tLTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbiA9PT0gMCAmJiBFRWxpc3RlbmVyQ291bnQoc3JjLCAnZGF0YScpKSB7XG4gICAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICAgIGZsb3coc3JjKTtcbiAgICB9XG4gIH07XG59XG5cblxuUmVhZGFibGUucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uKGRlc3QpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICAvLyBpZiB3ZSdyZSBub3QgcGlwaW5nIGFueXdoZXJlLCB0aGVuIGRvIG5vdGhpbmcuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAwKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIGp1c3Qgb25lIGRlc3RpbmF0aW9uLiAgbW9zdCBjb21tb24gY2FzZS5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHtcbiAgICAvLyBwYXNzZWQgaW4gb25lLCBidXQgaXQncyBub3QgdGhlIHJpZ2h0IG9uZS5cbiAgICBpZiAoZGVzdCAmJiBkZXN0ICE9PSBzdGF0ZS5waXBlcylcbiAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKCFkZXN0KVxuICAgICAgZGVzdCA9IHN0YXRlLnBpcGVzO1xuXG4gICAgLy8gZ290IGEgbWF0Y2guXG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICBpZiAoZGVzdClcbiAgICAgIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzbG93IGNhc2UuIG11bHRpcGxlIHBpcGUgZGVzdGluYXRpb25zLlxuXG4gIGlmICghZGVzdCkge1xuICAgIC8vIHJlbW92ZSBhbGwuXG4gICAgdmFyIGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnBpcGVzQ291bnQ7XG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG4gIHZhciBpID0gaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCk7XG4gIGlmIChpID09PSAtMSlcbiAgICByZXR1cm4gdGhpcztcblxuICBzdGF0ZS5waXBlcy5zcGxpY2UoaSwgMSk7XG4gIHN0YXRlLnBpcGVzQ291bnQgLT0gMTtcbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpXG4gICAgc3RhdGUucGlwZXMgPSBzdGF0ZS5waXBlc1swXTtcblxuICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gc2V0IHVwIGRhdGEgZXZlbnRzIGlmIHRoZXkgYXJlIGFza2VkIGZvclxuLy8gRW5zdXJlIHJlYWRhYmxlIGxpc3RlbmVycyBldmVudHVhbGx5IGdldCBzb21ldGhpbmdcblJlYWRhYmxlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKGV2LCBmbikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2LCBmbik7XG5cbiAgLy8gSWYgbGlzdGVuaW5nIHRvIGRhdGEsIGFuZCBpdCBoYXMgbm90IGV4cGxpY2l0bHkgYmVlbiBwYXVzZWQsXG4gIC8vIHRoZW4gY2FsbCByZXN1bWUgdG8gc3RhcnQgdGhlIGZsb3cgb2YgZGF0YSBvbiB0aGUgbmV4dCB0aWNrLlxuICBpZiAoZXYgPT09ICdkYXRhJyAmJiBmYWxzZSAhPT0gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSB7XG4gICAgdGhpcy5yZXN1bWUoKTtcbiAgfVxuXG4gIGlmIChldiA9PT0gJ3JlYWRhYmxlJyAmJiB0aGlzLnJlYWRhYmxlKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAoIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHRydWU7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICAgICAgcHJvY2Vzc05leHRUaWNrKG5SZWFkaW5nTmV4dFRpY2ssIHRoaXMpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgZW1pdFJlYWRhYmxlKHRoaXMsIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcblJlYWRhYmxlLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IFJlYWRhYmxlLnByb3RvdHlwZS5vbjtcblxuZnVuY3Rpb24gblJlYWRpbmdOZXh0VGljayhzZWxmKSB7XG4gIGRlYnVnKCdyZWFkYWJsZSBuZXh0dGljayByZWFkIDAnKTtcbiAgc2VsZi5yZWFkKDApO1xufVxuXG4vLyBwYXVzZSgpIGFuZCByZXN1bWUoKSBhcmUgcmVtbmFudHMgb2YgdGhlIGxlZ2FjeSByZWFkYWJsZSBzdHJlYW0gQVBJXG4vLyBJZiB0aGUgdXNlciB1c2VzIHRoZW0sIHRoZW4gc3dpdGNoIGludG8gb2xkIG1vZGUuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdyZXN1bWUnKTtcbiAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICByZXN1bWUodGhpcywgc3RhdGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZXN1bWVTY2hlZHVsZWQpIHtcbiAgICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHByb2Nlc3NOZXh0VGljayhyZXN1bWVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICBzdHJlYW0uZW1pdCgncmVzdW1lJyk7XG4gIGZsb3coc3RyZWFtKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpXG4gICAgc3RyZWFtLnJlYWQoMCk7XG59XG5cblJlYWRhYmxlLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcbiAgaWYgKGZhbHNlICE9PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGF1c2UnKTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG4gIGlmIChzdGF0ZS5mbG93aW5nKSB7XG4gICAgZG8ge1xuICAgICAgdmFyIGNodW5rID0gc3RyZWFtLnJlYWQoKTtcbiAgICB9IHdoaWxlIChudWxsICE9PSBjaHVuayAmJiBzdGF0ZS5mbG93aW5nKTtcbiAgfVxufVxuXG4vLyB3cmFwIGFuIG9sZC1zdHlsZSBzdHJlYW0gYXMgdGhlIGFzeW5jIGRhdGEgc291cmNlLlxuLy8gVGhpcyBpcyAqbm90KiBwYXJ0IG9mIHRoZSByZWFkYWJsZSBzdHJlYW0gaW50ZXJmYWNlLlxuLy8gSXQgaXMgYW4gdWdseSB1bmZvcnR1bmF0ZSBtZXNzIG9mIGhpc3RvcnkuXG5SZWFkYWJsZS5wcm90b3R5cGUud3JhcCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgcGF1c2VkID0gZmFsc2U7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnKCd3cmFwcGVkIGVuZCcpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpXG4gICAgICAgIHNlbGYucHVzaChjaHVuayk7XG4gICAgfVxuXG4gICAgc2VsZi5wdXNoKG51bGwpO1xuICB9KTtcblxuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbihjaHVuaykge1xuICAgIGRlYnVnKCd3cmFwcGVkIGRhdGEnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlcilcbiAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAvLyBkb24ndCBza2lwIG92ZXIgZmFsc3kgdmFsdWVzIGluIG9iamVjdE1vZGVcbiAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSAmJiAoY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IHVuZGVmaW5lZCkpXG4gICAgICByZXR1cm47XG4gICAgZWxzZSBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgKCFjaHVuayB8fCAhY2h1bmsubGVuZ3RoKSlcbiAgICAgIHJldHVybjtcblxuICAgIHZhciByZXQgPSBzZWxmLnB1c2goY2h1bmspO1xuICAgIGlmICghcmV0KSB7XG4gICAgICBwYXVzZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBwcm94eSBhbGwgdGhlIG90aGVyIG1ldGhvZHMuXG4gIC8vIGltcG9ydGFudCB3aGVuIHdyYXBwaW5nIGZpbHRlcnMgYW5kIGR1cGxleGVzLlxuICBmb3IgKHZhciBpIGluIHN0cmVhbSkge1xuICAgIGlmICh0aGlzW2ldID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHN0cmVhbVtpXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1tpXSA9IGZ1bmN0aW9uKG1ldGhvZCkgeyByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW1bbWV0aG9kXS5hcHBseShzdHJlYW0sIGFyZ3VtZW50cyk7XG4gICAgICB9OyB9KGkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByb3h5IGNlcnRhaW4gaW1wb3J0YW50IGV2ZW50cy5cbiAgdmFyIGV2ZW50cyA9IFsnZXJyb3InLCAnY2xvc2UnLCAnZGVzdHJveScsICdwYXVzZScsICdyZXN1bWUnXTtcbiAgZm9yRWFjaChldmVudHMsIGZ1bmN0aW9uKGV2KSB7XG4gICAgc3RyZWFtLm9uKGV2LCBzZWxmLmVtaXQuYmluZChzZWxmLCBldikpO1xuICB9KTtcblxuICAvLyB3aGVuIHdlIHRyeSB0byBjb25zdW1lIHNvbWUgbW9yZSBieXRlcywgc2ltcGx5IHVucGF1c2UgdGhlXG4gIC8vIHVuZGVybHlpbmcgc3RyZWFtLlxuICBzZWxmLl9yZWFkID0gZnVuY3Rpb24obikge1xuICAgIGRlYnVnKCd3cmFwcGVkIF9yZWFkJywgbik7XG4gICAgaWYgKHBhdXNlZCkge1xuICAgICAgcGF1c2VkID0gZmFsc2U7XG4gICAgICBzdHJlYW0ucmVzdW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBzZWxmO1xufTtcblxuXG4vLyBleHBvc2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG5SZWFkYWJsZS5fZnJvbUxpc3QgPSBmcm9tTGlzdDtcblxuLy8gUGx1Y2sgb2ZmIG4gYnl0ZXMgZnJvbSBhbiBhcnJheSBvZiBidWZmZXJzLlxuLy8gTGVuZ3RoIGlzIHRoZSBjb21iaW5lZCBsZW5ndGhzIG9mIGFsbCB0aGUgYnVmZmVycyBpbiB0aGUgbGlzdC5cbmZ1bmN0aW9uIGZyb21MaXN0KG4sIHN0YXRlKSB7XG4gIHZhciBsaXN0ID0gc3RhdGUuYnVmZmVyO1xuICB2YXIgbGVuZ3RoID0gc3RhdGUubGVuZ3RoO1xuICB2YXIgc3RyaW5nTW9kZSA9ICEhc3RhdGUuZGVjb2RlcjtcbiAgdmFyIG9iamVjdE1vZGUgPSAhIXN0YXRlLm9iamVjdE1vZGU7XG4gIHZhciByZXQ7XG5cbiAgLy8gbm90aGluZyBpbiB0aGUgbGlzdCwgZGVmaW5pdGVseSBlbXB0eS5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiBudWxsO1xuXG4gIGlmIChsZW5ndGggPT09IDApXG4gICAgcmV0ID0gbnVsbDtcbiAgZWxzZSBpZiAob2JqZWN0TW9kZSlcbiAgICByZXQgPSBsaXN0LnNoaWZ0KCk7XG4gIGVsc2UgaWYgKCFuIHx8IG4gPj0gbGVuZ3RoKSB7XG4gICAgLy8gcmVhZCBpdCBhbGwsIHRydW5jYXRlIHRoZSBhcnJheS5cbiAgICBpZiAoc3RyaW5nTW9kZSlcbiAgICAgIHJldCA9IGxpc3Quam9pbignJyk7XG4gICAgZWxzZSBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICByZXQgPSBsaXN0WzBdO1xuICAgIGVsc2VcbiAgICAgIHJldCA9IEJ1ZmZlci5jb25jYXQobGlzdCwgbGVuZ3RoKTtcbiAgICBsaXN0Lmxlbmd0aCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVhZCBqdXN0IHNvbWUgb2YgaXQuXG4gICAgaWYgKG4gPCBsaXN0WzBdLmxlbmd0aCkge1xuICAgICAgLy8ganVzdCB0YWtlIGEgcGFydCBvZiB0aGUgZmlyc3QgbGlzdCBpdGVtLlxuICAgICAgLy8gc2xpY2UgaXMgdGhlIHNhbWUgZm9yIGJ1ZmZlcnMgYW5kIHN0cmluZ3MuXG4gICAgICB2YXIgYnVmID0gbGlzdFswXTtcbiAgICAgIHJldCA9IGJ1Zi5zbGljZSgwLCBuKTtcbiAgICAgIGxpc3RbMF0gPSBidWYuc2xpY2Uobik7XG4gICAgfSBlbHNlIGlmIChuID09PSBsaXN0WzBdLmxlbmd0aCkge1xuICAgICAgLy8gZmlyc3QgbGlzdCBpcyBhIHBlcmZlY3QgbWF0Y2hcbiAgICAgIHJldCA9IGxpc3Quc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29tcGxleCBjYXNlLlxuICAgICAgLy8gd2UgaGF2ZSBlbm91Z2ggdG8gY292ZXIgaXQsIGJ1dCBpdCBzcGFucyBwYXN0IHRoZSBmaXJzdCBidWZmZXIuXG4gICAgICBpZiAoc3RyaW5nTW9kZSlcbiAgICAgICAgcmV0ID0gJyc7XG4gICAgICBlbHNlXG4gICAgICAgIHJldCA9IG5ldyBCdWZmZXIobik7XG5cbiAgICAgIHZhciBjID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsICYmIGMgPCBuOyBpKyspIHtcbiAgICAgICAgdmFyIGJ1ZiA9IGxpc3RbMF07XG4gICAgICAgIHZhciBjcHkgPSBNYXRoLm1pbihuIC0gYywgYnVmLmxlbmd0aCk7XG5cbiAgICAgICAgaWYgKHN0cmluZ01vZGUpXG4gICAgICAgICAgcmV0ICs9IGJ1Zi5zbGljZSgwLCBjcHkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgYnVmLmNvcHkocmV0LCBjLCAwLCBjcHkpO1xuXG4gICAgICAgIGlmIChjcHkgPCBidWYubGVuZ3RoKVxuICAgICAgICAgIGxpc3RbMF0gPSBidWYuc2xpY2UoY3B5KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcblxuICAgICAgICBjICs9IGNweTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuXG4gIC8vIElmIHdlIGdldCBoZXJlIGJlZm9yZSBjb25zdW1pbmcgYWxsIHRoZSBieXRlcywgdGhlbiB0aGF0IGlzIGFcbiAgLy8gYnVnIGluIG5vZGUuICBTaG91bGQgbmV2ZXIgaGFwcGVuLlxuICBpZiAoc3RhdGUubGVuZ3RoID4gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VuZFJlYWRhYmxlIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7XG5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHByb2Nlc3NOZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZU5UKHN0YXRlLCBzdHJlYW0pIHtcbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0ucmVhZGFibGUgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yRWFjaCAoeHMsIGYpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmKHhzW2ldLCBpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmRleE9mICh4cywgeCkge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmICh4c1tpXSA9PT0geCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuIiwidmFyIG9uY2UgPSByZXF1aXJlKCdvbmNlJyk7XG5cbnZhciBub29wID0gZnVuY3Rpb24oKSB7fTtcblxudmFyIGlzUmVxdWVzdCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuXHRyZXR1cm4gc3RyZWFtLnNldEhlYWRlciAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ID09PSAnZnVuY3Rpb24nO1xufTtcblxudmFyIGlzQ2hpbGRQcm9jZXNzID0gZnVuY3Rpb24oc3RyZWFtKSB7XG5cdHJldHVybiBzdHJlYW0uc3RkaW8gJiYgQXJyYXkuaXNBcnJheShzdHJlYW0uc3RkaW8pICYmIHN0cmVhbS5zdGRpby5sZW5ndGggPT09IDNcbn07XG5cbnZhciBlb3MgPSBmdW5jdGlvbihzdHJlYW0sIG9wdHMsIGNhbGxiYWNrKSB7XG5cdGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGVvcyhzdHJlYW0sIG51bGwsIG9wdHMpO1xuXHRpZiAoIW9wdHMpIG9wdHMgPSB7fTtcblxuXHRjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG5cblx0dmFyIHdzID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuXHR2YXIgcnMgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG5cdHZhciByZWFkYWJsZSA9IG9wdHMucmVhZGFibGUgfHwgKG9wdHMucmVhZGFibGUgIT09IGZhbHNlICYmIHN0cmVhbS5yZWFkYWJsZSk7XG5cdHZhciB3cml0YWJsZSA9IG9wdHMud3JpdGFibGUgfHwgKG9wdHMud3JpdGFibGUgIT09IGZhbHNlICYmIHN0cmVhbS53cml0YWJsZSk7XG5cblx0dmFyIG9ubGVnYWN5ZmluaXNoID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCFzdHJlYW0ud3JpdGFibGUpIG9uZmluaXNoKCk7XG5cdH07XG5cblx0dmFyIG9uZmluaXNoID0gZnVuY3Rpb24oKSB7XG5cdFx0d3JpdGFibGUgPSBmYWxzZTtcblx0XHRpZiAoIXJlYWRhYmxlKSBjYWxsYmFjaygpO1xuXHR9O1xuXG5cdHZhciBvbmVuZCA9IGZ1bmN0aW9uKCkge1xuXHRcdHJlYWRhYmxlID0gZmFsc2U7XG5cdFx0aWYgKCF3cml0YWJsZSkgY2FsbGJhY2soKTtcblx0fTtcblxuXHR2YXIgb25leGl0ID0gZnVuY3Rpb24oZXhpdENvZGUpIHtcblx0XHRjYWxsYmFjayhleGl0Q29kZSA/IG5ldyBFcnJvcignZXhpdGVkIHdpdGggZXJyb3IgY29kZTogJyArIGV4aXRDb2RlKSA6IG51bGwpO1xuXHR9O1xuXG5cdHZhciBvbmNsb3NlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHJlYWRhYmxlICYmICEocnMgJiYgcnMuZW5kZWQpKSByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdwcmVtYXR1cmUgY2xvc2UnKSk7XG5cdFx0aWYgKHdyaXRhYmxlICYmICEod3MgJiYgd3MuZW5kZWQpKSByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdwcmVtYXR1cmUgY2xvc2UnKSk7XG5cdH07XG5cblx0dmFyIG9ucmVxdWVzdCA9IGZ1bmN0aW9uKCkge1xuXHRcdHN0cmVhbS5yZXEub24oJ2ZpbmlzaCcsIG9uZmluaXNoKTtcblx0fTtcblxuXHRpZiAoaXNSZXF1ZXN0KHN0cmVhbSkpIHtcblx0XHRzdHJlYW0ub24oJ2NvbXBsZXRlJywgb25maW5pc2gpO1xuXHRcdHN0cmVhbS5vbignYWJvcnQnLCBvbmNsb3NlKTtcblx0XHRpZiAoc3RyZWFtLnJlcSkgb25yZXF1ZXN0KCk7XG5cdFx0ZWxzZSBzdHJlYW0ub24oJ3JlcXVlc3QnLCBvbnJlcXVlc3QpO1xuXHR9IGVsc2UgaWYgKHdyaXRhYmxlICYmICF3cykgeyAvLyBsZWdhY3kgc3RyZWFtc1xuXHRcdHN0cmVhbS5vbignZW5kJywgb25sZWdhY3lmaW5pc2gpO1xuXHRcdHN0cmVhbS5vbignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaCk7XG5cdH1cblxuXHRpZiAoaXNDaGlsZFByb2Nlc3Moc3RyZWFtKSkgc3RyZWFtLm9uKCdleGl0Jywgb25leGl0KTtcblxuXHRzdHJlYW0ub24oJ2VuZCcsIG9uZW5kKTtcblx0c3RyZWFtLm9uKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG5cdGlmIChvcHRzLmVycm9yICE9PSBmYWxzZSkgc3RyZWFtLm9uKCdlcnJvcicsIGNhbGxiYWNrKTtcblx0c3RyZWFtLm9uKCdjbG9zZScsIG9uY2xvc2UpO1xuXG5cdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2NvbXBsZXRlJywgb25maW5pc2gpO1xuXHRcdHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBvbmNsb3NlKTtcblx0XHRzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ3JlcXVlc3QnLCBvbnJlcXVlc3QpO1xuXHRcdGlmIChzdHJlYW0ucmVxKSBzdHJlYW0ucmVxLnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG5cdFx0c3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmxlZ2FjeWZpbmlzaCk7XG5cdFx0c3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9ubGVnYWN5ZmluaXNoKTtcblx0XHRzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcblx0XHRzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2V4aXQnLCBvbmV4aXQpO1xuXHRcdHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuXHRcdHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBjYWxsYmFjayk7XG5cdFx0c3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuXHR9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBlb3M7IiwidmFyIHByciA9IHJlcXVpcmUoJ3BycicpXG5cbmZ1bmN0aW9uIGluaXQgKHR5cGUsIG1lc3NhZ2UsIGNhdXNlKSB7XG4gIHBycih0aGlzLCB7XG4gICAgICB0eXBlICAgIDogdHlwZVxuICAgICwgbmFtZSAgICA6IHR5cGVcbiAgICAgIC8vIGNhbiBiZSBwYXNzZWQganVzdCBhICdjYXVzZSdcbiAgICAsIGNhdXNlICAgOiB0eXBlb2YgbWVzc2FnZSAhPSAnc3RyaW5nJyA/IG1lc3NhZ2UgOiBjYXVzZVxuICAgICwgbWVzc2FnZSA6ICEhbWVzc2FnZSAmJiB0eXBlb2YgbWVzc2FnZSAhPSAnc3RyaW5nJyA/IG1lc3NhZ2UubWVzc2FnZSA6IG1lc3NhZ2VcblxuICB9LCAnZXdyJylcbn1cblxuLy8gZ2VuZXJpYyBwcm90b3R5cGUsIG5vdCBpbnRlbmRlZCB0byBiZSBhY3R1YWxseSB1c2VkIC0gaGVscGZ1bCBmb3IgYGluc3RhbmNlb2ZgXG5mdW5jdGlvbiBDdXN0b21FcnJvciAobWVzc2FnZSwgY2F1c2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKVxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgYXJndW1lbnRzLmNhbGxlZSlcbiAgaW5pdC5jYWxsKHRoaXMsICdDdXN0b21FcnJvcicsIG1lc3NhZ2UsIGNhdXNlKVxufVxuXG5DdXN0b21FcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvciAoZXJybm8sIHR5cGUsIHByb3RvKSB7XG4gIHZhciBlcnIgPSBmdW5jdGlvbiAobWVzc2FnZSwgY2F1c2UpIHtcbiAgICBpbml0LmNhbGwodGhpcywgdHlwZSwgbWVzc2FnZSwgY2F1c2UpXG4gICAgLy9UT0RPOiB0aGUgc3BlY2lmaWNpdHkgaGVyZSBpcyBzdHVwaWQsIGVycm5vIHNob3VsZCBiZSBhdmFpbGFibGUgZXZlcnl3aGVyZVxuICAgIGlmICh0eXBlID09ICdGaWxlc3lzdGVtRXJyb3InKSB7XG4gICAgICB0aGlzLmNvZGUgICAgPSB0aGlzLmNhdXNlLmNvZGVcbiAgICAgIHRoaXMucGF0aCAgICA9IHRoaXMuY2F1c2UucGF0aFxuICAgICAgdGhpcy5lcnJubyAgID0gdGhpcy5jYXVzZS5lcnJub1xuICAgICAgdGhpcy5tZXNzYWdlID1cbiAgICAgICAgKGVycm5vLmVycm5vW3RoaXMuY2F1c2UuZXJybm9dXG4gICAgICAgICAgPyBlcnJuby5lcnJub1t0aGlzLmNhdXNlLmVycm5vXS5kZXNjcmlwdGlvblxuICAgICAgICAgIDogdGhpcy5jYXVzZS5tZXNzYWdlKVxuICAgICAgICArICh0aGlzLmNhdXNlLnBhdGggPyAnIFsnICsgdGhpcy5jYXVzZS5wYXRoICsgJ10nIDogJycpXG4gICAgfVxuICAgIEVycm9yLmNhbGwodGhpcylcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBhcmd1bWVudHMuY2FsbGVlKVxuICB9XG4gIGVyci5wcm90b3R5cGUgPSAhIXByb3RvID8gbmV3IHByb3RvKCkgOiBuZXcgQ3VzdG9tRXJyb3IoKVxuICByZXR1cm4gZXJyXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGVycm5vKSB7XG4gIHZhciBjZSA9IGZ1bmN0aW9uICh0eXBlLCBwcm90bykge1xuICAgIHJldHVybiBjcmVhdGVFcnJvcihlcnJubywgdHlwZSwgcHJvdG8pXG4gIH1cbiAgcmV0dXJuIHtcbiAgICAgIEN1c3RvbUVycm9yICAgICA6IEN1c3RvbUVycm9yXG4gICAgLCBGaWxlc3lzdGVtRXJyb3IgOiBjZSgnRmlsZXN5c3RlbUVycm9yJylcbiAgICAsIGNyZWF0ZUVycm9yICAgICA6IGNlXG4gIH1cbn1cbiIsInZhciBhbGwgPSBtb2R1bGUuZXhwb3J0cy5hbGwgPSBbXG4gIHtcbiAgICBlcnJubzogLTIsXG4gICAgY29kZTogJ0VOT0VOVCcsXG4gICAgZGVzY3JpcHRpb246ICdubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5J1xuICB9LFxuICB7XG4gICAgZXJybm86IC0xLFxuICAgIGNvZGU6ICdVTktOT1dOJyxcbiAgICBkZXNjcmlwdGlvbjogJ3Vua25vd24gZXJyb3InXG4gIH0sXG4gIHtcbiAgICBlcnJubzogMCxcbiAgICBjb2RlOiAnT0snLFxuICAgIGRlc2NyaXB0aW9uOiAnc3VjY2VzcydcbiAgfSxcbiAge1xuICAgIGVycm5vOiAxLFxuICAgIGNvZGU6ICdFT0YnLFxuICAgIGRlc2NyaXB0aW9uOiAnZW5kIG9mIGZpbGUnXG4gIH0sXG4gIHtcbiAgICBlcnJubzogMixcbiAgICBjb2RlOiAnRUFERFJJTkZPJyxcbiAgICBkZXNjcmlwdGlvbjogJ2dldGFkZHJpbmZvIGVycm9yJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDMsXG4gICAgY29kZTogJ0VBQ0NFUycsXG4gICAgZGVzY3JpcHRpb246ICdwZXJtaXNzaW9uIGRlbmllZCdcbiAgfSxcbiAge1xuICAgIGVycm5vOiA0LFxuICAgIGNvZGU6ICdFQUdBSU4nLFxuICAgIGRlc2NyaXB0aW9uOiAncmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUnXG4gIH0sXG4gIHtcbiAgICBlcnJubzogNSxcbiAgICBjb2RlOiAnRUFERFJJTlVTRScsXG4gICAgZGVzY3JpcHRpb246ICdhZGRyZXNzIGFscmVhZHkgaW4gdXNlJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDYsXG4gICAgY29kZTogJ0VBRERSTk9UQVZBSUwnLFxuICAgIGRlc2NyaXB0aW9uOiAnYWRkcmVzcyBub3QgYXZhaWxhYmxlJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDcsXG4gICAgY29kZTogJ0VBRk5PU1VQUE9SVCcsXG4gICAgZGVzY3JpcHRpb246ICdhZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDgsXG4gICAgY29kZTogJ0VBTFJFQURZJyxcbiAgICBkZXNjcmlwdGlvbjogJ2Nvbm5lY3Rpb24gYWxyZWFkeSBpbiBwcm9ncmVzcydcbiAgfSxcbiAge1xuICAgIGVycm5vOiA5LFxuICAgIGNvZGU6ICdFQkFERicsXG4gICAgZGVzY3JpcHRpb246ICdiYWQgZmlsZSBkZXNjcmlwdG9yJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDEwLFxuICAgIGNvZGU6ICdFQlVTWScsXG4gICAgZGVzY3JpcHRpb246ICdyZXNvdXJjZSBidXN5IG9yIGxvY2tlZCdcbiAgfSxcbiAge1xuICAgIGVycm5vOiAxMSxcbiAgICBjb2RlOiAnRUNPTk5BQk9SVEVEJyxcbiAgICBkZXNjcmlwdGlvbjogJ3NvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0J1xuICB9LFxuICB7XG4gICAgZXJybm86IDEyLFxuICAgIGNvZGU6ICdFQ09OTlJFRlVTRUQnLFxuICAgIGRlc2NyaXB0aW9uOiAnY29ubmVjdGlvbiByZWZ1c2VkJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDEzLFxuICAgIGNvZGU6ICdFQ09OTlJFU0VUJyxcbiAgICBkZXNjcmlwdGlvbjogJ2Nvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcidcbiAgfSxcbiAge1xuICAgIGVycm5vOiAxNCxcbiAgICBjb2RlOiAnRURFU1RBRERSUkVRJyxcbiAgICBkZXNjcmlwdGlvbjogJ2Rlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQnXG4gIH0sXG4gIHtcbiAgICBlcnJubzogMTUsXG4gICAgY29kZTogJ0VGQVVMVCcsXG4gICAgZGVzY3JpcHRpb246ICdiYWQgYWRkcmVzcyBpbiBzeXN0ZW0gY2FsbCBhcmd1bWVudCdcbiAgfSxcbiAge1xuICAgIGVycm5vOiAxNixcbiAgICBjb2RlOiAnRUhPU1RVTlJFQUNIJyxcbiAgICBkZXNjcmlwdGlvbjogJ2hvc3QgaXMgdW5yZWFjaGFibGUnXG4gIH0sXG4gIHtcbiAgICBlcnJubzogMTcsXG4gICAgY29kZTogJ0VJTlRSJyxcbiAgICBkZXNjcmlwdGlvbjogJ2ludGVycnVwdGVkIHN5c3RlbSBjYWxsJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDE4LFxuICAgIGNvZGU6ICdFSU5WQUwnLFxuICAgIGRlc2NyaXB0aW9uOiAnaW52YWxpZCBhcmd1bWVudCdcbiAgfSxcbiAge1xuICAgIGVycm5vOiAxOSxcbiAgICBjb2RlOiAnRUlTQ09OTicsXG4gICAgZGVzY3JpcHRpb246ICdzb2NrZXQgaXMgYWxyZWFkeSBjb25uZWN0ZWQnXG4gIH0sXG4gIHtcbiAgICBlcnJubzogMjAsXG4gICAgY29kZTogJ0VNRklMRScsXG4gICAgZGVzY3JpcHRpb246ICd0b28gbWFueSBvcGVuIGZpbGVzJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDIxLFxuICAgIGNvZGU6ICdFTVNHU0laRScsXG4gICAgZGVzY3JpcHRpb246ICdtZXNzYWdlIHRvbyBsb25nJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDIyLFxuICAgIGNvZGU6ICdFTkVURE9XTicsXG4gICAgZGVzY3JpcHRpb246ICduZXR3b3JrIGlzIGRvd24nXG4gIH0sXG4gIHtcbiAgICBlcnJubzogMjMsXG4gICAgY29kZTogJ0VORVRVTlJFQUNIJyxcbiAgICBkZXNjcmlwdGlvbjogJ25ldHdvcmsgaXMgdW5yZWFjaGFibGUnXG4gIH0sXG4gIHtcbiAgICBlcnJubzogMjQsXG4gICAgY29kZTogJ0VORklMRScsXG4gICAgZGVzY3JpcHRpb246ICdmaWxlIHRhYmxlIG92ZXJmbG93J1xuICB9LFxuICB7XG4gICAgZXJybm86IDI1LFxuICAgIGNvZGU6ICdFTk9CVUZTJyxcbiAgICBkZXNjcmlwdGlvbjogJ25vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUnXG4gIH0sXG4gIHtcbiAgICBlcnJubzogMjYsXG4gICAgY29kZTogJ0VOT01FTScsXG4gICAgZGVzY3JpcHRpb246ICdub3QgZW5vdWdoIG1lbW9yeSdcbiAgfSxcbiAge1xuICAgIGVycm5vOiAyNyxcbiAgICBjb2RlOiAnRU5PVERJUicsXG4gICAgZGVzY3JpcHRpb246ICdub3QgYSBkaXJlY3RvcnknXG4gIH0sXG4gIHtcbiAgICBlcnJubzogMjgsXG4gICAgY29kZTogJ0VJU0RJUicsXG4gICAgZGVzY3JpcHRpb246ICdpbGxlZ2FsIG9wZXJhdGlvbiBvbiBhIGRpcmVjdG9yeSdcbiAgfSxcbiAge1xuICAgIGVycm5vOiAyOSxcbiAgICBjb2RlOiAnRU5PTkVUJyxcbiAgICBkZXNjcmlwdGlvbjogJ21hY2hpbmUgaXMgbm90IG9uIHRoZSBuZXR3b3JrJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDMxLFxuICAgIGNvZGU6ICdFTk9UQ09OTicsXG4gICAgZGVzY3JpcHRpb246ICdzb2NrZXQgaXMgbm90IGNvbm5lY3RlZCdcbiAgfSxcbiAge1xuICAgIGVycm5vOiAzMixcbiAgICBjb2RlOiAnRU5PVFNPQ0snLFxuICAgIGRlc2NyaXB0aW9uOiAnc29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0J1xuICB9LFxuICB7XG4gICAgZXJybm86IDMzLFxuICAgIGNvZGU6ICdFTk9UU1VQJyxcbiAgICBkZXNjcmlwdGlvbjogJ29wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIG9uIHNvY2tldCdcbiAgfSxcbiAge1xuICAgIGVycm5vOiAzNCxcbiAgICBjb2RlOiAnRU5PRU5UJyxcbiAgICBkZXNjcmlwdGlvbjogJ25vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknXG4gIH0sXG4gIHtcbiAgICBlcnJubzogMzUsXG4gICAgY29kZTogJ0VOT1NZUycsXG4gICAgZGVzY3JpcHRpb246ICdmdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQnXG4gIH0sXG4gIHtcbiAgICBlcnJubzogMzYsXG4gICAgY29kZTogJ0VQSVBFJyxcbiAgICBkZXNjcmlwdGlvbjogJ2Jyb2tlbiBwaXBlJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDM3LFxuICAgIGNvZGU6ICdFUFJPVE8nLFxuICAgIGRlc2NyaXB0aW9uOiAncHJvdG9jb2wgZXJyb3InXG4gIH0sXG4gIHtcbiAgICBlcnJubzogMzgsXG4gICAgY29kZTogJ0VQUk9UT05PU1VQUE9SVCcsXG4gICAgZGVzY3JpcHRpb246ICdwcm90b2NvbCBub3Qgc3VwcG9ydGVkJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDM5LFxuICAgIGNvZGU6ICdFUFJPVE9UWVBFJyxcbiAgICBkZXNjcmlwdGlvbjogJ3Byb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldCdcbiAgfSxcbiAge1xuICAgIGVycm5vOiA0MCxcbiAgICBjb2RlOiAnRVRJTUVET1VUJyxcbiAgICBkZXNjcmlwdGlvbjogJ2Nvbm5lY3Rpb24gdGltZWQgb3V0J1xuICB9LFxuICB7XG4gICAgZXJybm86IDQxLFxuICAgIGNvZGU6ICdFQ0hBUlNFVCcsXG4gICAgZGVzY3JpcHRpb246ICdpbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVyJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDQyLFxuICAgIGNvZGU6ICdFQUlGQU1OT1NVUFBPUlQnLFxuICAgIGRlc2NyaXB0aW9uOiAnYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3RuYW1lIG5vdCBzdXBwb3J0ZWQnXG4gIH0sXG4gIHtcbiAgICBlcnJubzogNDQsXG4gICAgY29kZTogJ0VBSVNFUlZJQ0UnLFxuICAgIGRlc2NyaXB0aW9uOiAnc2Vydm5hbWUgbm90IHN1cHBvcnRlZCBmb3IgYWlfc29ja3R5cGUnXG4gIH0sXG4gIHtcbiAgICBlcnJubzogNDUsXG4gICAgY29kZTogJ0VBSVNPQ0tUWVBFJyxcbiAgICBkZXNjcmlwdGlvbjogJ2FpX3NvY2t0eXBlIG5vdCBzdXBwb3J0ZWQnXG4gIH0sXG4gIHtcbiAgICBlcnJubzogNDYsXG4gICAgY29kZTogJ0VTSFVURE9XTicsXG4gICAgZGVzY3JpcHRpb246ICdjYW5ub3Qgc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd24nXG4gIH0sXG4gIHtcbiAgICBlcnJubzogNDcsXG4gICAgY29kZTogJ0VFWElTVCcsXG4gICAgZGVzY3JpcHRpb246ICdmaWxlIGFscmVhZHkgZXhpc3RzJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDQ4LFxuICAgIGNvZGU6ICdFU1JDSCcsXG4gICAgZGVzY3JpcHRpb246ICdubyBzdWNoIHByb2Nlc3MnXG4gIH0sXG4gIHtcbiAgICBlcnJubzogNDksXG4gICAgY29kZTogJ0VOQU1FVE9PTE9ORycsXG4gICAgZGVzY3JpcHRpb246ICduYW1lIHRvbyBsb25nJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDUwLFxuICAgIGNvZGU6ICdFUEVSTScsXG4gICAgZGVzY3JpcHRpb246ICdvcGVyYXRpb24gbm90IHBlcm1pdHRlZCdcbiAgfSxcbiAge1xuICAgIGVycm5vOiA1MSxcbiAgICBjb2RlOiAnRUxPT1AnLFxuICAgIGRlc2NyaXB0aW9uOiAndG9vIG1hbnkgc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQnXG4gIH0sXG4gIHtcbiAgICBlcnJubzogNTIsXG4gICAgY29kZTogJ0VYREVWJyxcbiAgICBkZXNjcmlwdGlvbjogJ2Nyb3NzLWRldmljZSBsaW5rIG5vdCBwZXJtaXR0ZWQnXG4gIH0sXG4gIHtcbiAgICBlcnJubzogNTMsXG4gICAgY29kZTogJ0VOT1RFTVBUWScsXG4gICAgZGVzY3JpcHRpb246ICdkaXJlY3Rvcnkgbm90IGVtcHR5J1xuICB9LFxuICB7XG4gICAgZXJybm86IDU0LFxuICAgIGNvZGU6ICdFTk9TUEMnLFxuICAgIGRlc2NyaXB0aW9uOiAnbm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UnXG4gIH0sXG4gIHtcbiAgICBlcnJubzogNTUsXG4gICAgY29kZTogJ0VJTycsXG4gICAgZGVzY3JpcHRpb246ICdpL28gZXJyb3InXG4gIH0sXG4gIHtcbiAgICBlcnJubzogNTYsXG4gICAgY29kZTogJ0VST0ZTJyxcbiAgICBkZXNjcmlwdGlvbjogJ3JlYWQtb25seSBmaWxlIHN5c3RlbSdcbiAgfSxcbiAge1xuICAgIGVycm5vOiA1NyxcbiAgICBjb2RlOiAnRU5PREVWJyxcbiAgICBkZXNjcmlwdGlvbjogJ25vIHN1Y2ggZGV2aWNlJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDU4LFxuICAgIGNvZGU6ICdFU1BJUEUnLFxuICAgIGRlc2NyaXB0aW9uOiAnaW52YWxpZCBzZWVrJ1xuICB9LFxuICB7XG4gICAgZXJybm86IDU5LFxuICAgIGNvZGU6ICdFQ0FOQ0VMRUQnLFxuICAgIGRlc2NyaXB0aW9uOiAnb3BlcmF0aW9uIGNhbmNlbGVkJ1xuICB9XG5dXG5cbm1vZHVsZS5leHBvcnRzLmVycm5vID0ge31cbm1vZHVsZS5leHBvcnRzLmNvZGUgPSB7fVxuXG5hbGwuZm9yRWFjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgbW9kdWxlLmV4cG9ydHMuZXJybm9bZXJyb3IuZXJybm9dID0gZXJyb3JcbiAgbW9kdWxlLmV4cG9ydHMuY29kZVtlcnJvci5jb2RlXSA9IGVycm9yXG59KVxuXG5tb2R1bGUuZXhwb3J0cy5jdXN0b20gPSByZXF1aXJlKCcuL2N1c3RvbScpKG1vZHVsZS5leHBvcnRzKVxubW9kdWxlLmV4cG9ydHMuY3JlYXRlID0gbW9kdWxlLmV4cG9ydHMuY3VzdG9tLmNyZWF0ZUVycm9yXG4iLCIvKiFcbiAgKiBwcnJcbiAgKiAoYykgMjAxMyBSb2QgVmFnZyA8cm9kQHZhZ2cub3JnPlxuICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ydmFnZy9wcnJcbiAgKiBMaWNlbnNlOiBNSVRcbiAgKi9cblxuKGZ1bmN0aW9uIChuYW1lLCBjb250ZXh0LCBkZWZpbml0aW9uKSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKVxuICAgIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpXG4gIGVsc2VcbiAgICBjb250ZXh0W25hbWVdID0gZGVmaW5pdGlvbigpXG59KSgncHJyJywgdGhpcywgZnVuY3Rpb24oKSB7XG5cbiAgdmFyIHNldFByb3BlcnR5ID0gdHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9PSAnZnVuY3Rpb24nXG4gICAgICA/IGZ1bmN0aW9uIChvYmosIGtleSwgb3B0aW9ucykge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgb3B0aW9ucylcbiAgICAgICAgICByZXR1cm4gb2JqXG4gICAgICAgIH1cbiAgICAgIDogZnVuY3Rpb24gKG9iaiwga2V5LCBvcHRpb25zKSB7IC8vIDwgZXM1XG4gICAgICAgICAgb2JqW2tleV0gPSBvcHRpb25zLnZhbHVlXG4gICAgICAgICAgcmV0dXJuIG9ialxuICAgICAgICB9XG5cbiAgICAsIG1ha2VPcHRpb25zID0gZnVuY3Rpb24gKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBvbyA9IHR5cGVvZiBvcHRpb25zID09ICdvYmplY3QnXG4gICAgICAgICAgLCBvcyA9ICFvbyAmJiB0eXBlb2Ygb3B0aW9ucyA9PSAnc3RyaW5nJ1xuICAgICAgICAgICwgb3AgPSBmdW5jdGlvbiAocCkge1xuICAgICAgICAgICAgICByZXR1cm4gb29cbiAgICAgICAgICAgICAgICA/ICEhb3B0aW9uc1twXVxuICAgICAgICAgICAgICAgIDogb3NcbiAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5pbmRleE9mKHBbMF0pID4gLTFcbiAgICAgICAgICAgICAgICAgIDogZmFsc2VcbiAgICAgICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW51bWVyYWJsZSAgIDogb3AoJ2VudW1lcmFibGUnKVxuICAgICAgICAgICwgY29uZmlndXJhYmxlIDogb3AoJ2NvbmZpZ3VyYWJsZScpXG4gICAgICAgICAgLCB3cml0YWJsZSAgICAgOiBvcCgnd3JpdGFibGUnKVxuICAgICAgICAgICwgdmFsdWUgICAgICAgIDogdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgLCBwcnIgPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBrXG5cbiAgICAgICAgb3B0aW9ucyA9IG1ha2VPcHRpb25zKHZhbHVlLCBvcHRpb25zKVxuXG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZm9yIChrIGluIGtleSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGtleSwgaykpIHtcbiAgICAgICAgICAgICAgb3B0aW9ucy52YWx1ZSA9IGtleVtrXVxuICAgICAgICAgICAgICBzZXRQcm9wZXJ0eShvYmosIGssIG9wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmpcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZXRQcm9wZXJ0eShvYmosIGtleSwgb3B0aW9ucylcbiAgICAgIH1cblxuICByZXR1cm4gcHJyXG59KSIsInZhciBjYW1lbGl6ZSA9IHJlcXVpcmUoXCJjYW1lbGl6ZVwiKVxudmFyIHRlbXBsYXRlID0gcmVxdWlyZShcInN0cmluZy10ZW1wbGF0ZVwiKVxudmFyIGV4dGVuZCA9IHJlcXVpcmUoXCJ4dGVuZC9tdXRhYmxlXCIpXG5cbm1vZHVsZS5leHBvcnRzID0gVHlwZWRFcnJvclxuXG5mdW5jdGlvbiBUeXBlZEVycm9yKGFyZ3MpIHtcbiAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXJncyBpcyByZXF1aXJlZFwiKTtcbiAgICB9XG4gICAgaWYgKCFhcmdzLnR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXJncy50eXBlIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cbiAgICBpZiAoIWFyZ3MubWVzc2FnZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhcmdzLm1lc3NhZ2UgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgdmFyIG1lc3NhZ2UgPSBhcmdzLm1lc3NhZ2VcblxuICAgIGlmIChhcmdzLnR5cGUgJiYgIWFyZ3MubmFtZSkge1xuICAgICAgICB2YXIgZXJyb3JOYW1lID0gY2FtZWxpemUoYXJncy50eXBlKSArIFwiRXJyb3JcIlxuICAgICAgICBhcmdzLm5hbWUgPSBlcnJvck5hbWVbMF0udG9VcHBlckNhc2UoKSArIGVycm9yTmFtZS5zdWJzdHIoMSlcbiAgICB9XG5cbiAgICBleHRlbmQoY3JlYXRlRXJyb3IsIGFyZ3MpO1xuICAgIGNyZWF0ZUVycm9yLl9uYW1lID0gYXJncy5uYW1lO1xuXG4gICAgcmV0dXJuIGNyZWF0ZUVycm9yO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRXJyb3Iob3B0cykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEVycm9yKClcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCBcInR5cGVcIiwge1xuICAgICAgICAgICAgdmFsdWU6IHJlc3VsdC50eXBlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH0pXG5cbiAgICAgICAgdmFyIG9wdGlvbnMgPSBleHRlbmQoe30sIGFyZ3MsIG9wdHMpXG5cbiAgICAgICAgZXh0ZW5kKHJlc3VsdCwgb3B0aW9ucylcbiAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSB0ZW1wbGF0ZShtZXNzYWdlLCBvcHRpb25zKVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG59XG5cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIE9uZVZlcnNpb25Db25zdHJhaW50ID0gcmVxdWlyZSgnaW5kaXZpZHVhbC9vbmUtdmVyc2lvbicpO1xuXG52YXIgTVlfVkVSU0lPTiA9ICc3Jztcbk9uZVZlcnNpb25Db25zdHJhaW50KCdldi1zdG9yZScsIE1ZX1ZFUlNJT04pO1xuXG52YXIgaGFzaEtleSA9ICdfX0VWX1NUT1JFX0tFWUAnICsgTVlfVkVSU0lPTjtcblxubW9kdWxlLmV4cG9ydHMgPSBFdlN0b3JlO1xuXG5mdW5jdGlvbiBFdlN0b3JlKGVsZW0pIHtcbiAgICB2YXIgaGFzaCA9IGVsZW1baGFzaEtleV07XG5cbiAgICBpZiAoIWhhc2gpIHtcbiAgICAgICAgaGFzaCA9IGVsZW1baGFzaEtleV0gPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFzaDtcbn1cbiIsInZhciBzdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHVybCwgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuXG4gIHZhciBlcyA9IG5ldyBFdmVudFNvdXJjZSh1cmwpXG4gIHZhciBycyA9IG5ldyBzdHJlYW0uUmVhZGFibGUoe29iamVjdE1vZGU6dHJ1ZX0pXG5cbiAgdmFyIGpzb24gPSAhIW9wdHMuanNvblxuICB2YXIgZGVjb2RlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGpzb24pIHJldHVybiBKU09OLnBhcnNlKGRhdGEpXG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIHJzLl9yZWFkID0gZnVuY3Rpb24oKSB7fVxuXG4gIGVzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICBycy5wdXNoKGRlY29kZShlLmRhdGEpKVxuICB9XG5cbiAgZXMub25lcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICAgIGlmIChycy5saXN0ZW5lcnMoJ2Vycm9yJykubGVuZ3RoKSBycy5lbWl0KCdlcnJvcicsIGVycilcbiAgfVxuXG4gIGVzLm9ub3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBycy5lbWl0KCdvcGVuJylcbiAgfVxuXG4gIHZhciBkZXN0cm95ZWQgPSBmYWxzZVxuICBycy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGRlc3Ryb3llZCkgcmV0dXJuXG4gICAgZGVzdHJveWVkID0gdHJ1ZVxuICAgIGVzLmNsb3NlKClcbiAgICBycy5lbWl0KCdjbG9zZScpXG4gIH1cblxuICByZXR1cm4gcnNcbn0iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJ2lzLWZ1bmN0aW9uJylcblxubW9kdWxlLmV4cG9ydHMgPSBmb3JFYWNoXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcblxuZnVuY3Rpb24gZm9yRWFjaChsaXN0LCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIGlmICghaXNGdW5jdGlvbihpdGVyYXRvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaXRlcmF0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJylcbiAgICB9XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgY29udGV4dCA9IHRoaXNcbiAgICB9XG4gICAgXG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobGlzdCkgPT09ICdbb2JqZWN0IEFycmF5XScpXG4gICAgICAgIGZvckVhY2hBcnJheShsaXN0LCBpdGVyYXRvciwgY29udGV4dClcbiAgICBlbHNlIGlmICh0eXBlb2YgbGlzdCA9PT0gJ3N0cmluZycpXG4gICAgICAgIGZvckVhY2hTdHJpbmcobGlzdCwgaXRlcmF0b3IsIGNvbnRleHQpXG4gICAgZWxzZVxuICAgICAgICBmb3JFYWNoT2JqZWN0KGxpc3QsIGl0ZXJhdG9yLCBjb250ZXh0KVxufVxuXG5mdW5jdGlvbiBmb3JFYWNoQXJyYXkoYXJyYXksIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCBpKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBhcnJheVtpXSwgaSwgYXJyYXkpXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGZvckVhY2hTdHJpbmcoc3RyaW5nLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzdHJpbmcubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgLy8gbm8gc3VjaCB0aGluZyBhcyBhIHNwYXJzZSBzdHJpbmcuXG4gICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgc3RyaW5nLmNoYXJBdChpKSwgaSwgc3RyaW5nKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZm9yRWFjaE9iamVjdChvYmplY3QsIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgZm9yICh2YXIgayBpbiBvYmplY3QpIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmplY3Rba10sIGssIG9iamVjdClcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsInZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxuXG52YXIgRnJhbWVkSGFzaCA9IGZ1bmN0aW9uIChhbGdvKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGcmFtZWRIYXNoKSkgcmV0dXJuIG5ldyBGcmFtZWRIYXNoKGFsZ28pXG4gIHRoaXMuaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ28pXG59XG5cbkZyYW1lZEhhc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHRoaXMuaGFzaC51cGRhdGUoKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IEJ1ZmZlci5ieXRlTGVuZ3RoKGRhdGEpIDogZGF0YS5sZW5ndGgpICsgJ1xcbicpXG4gIHRoaXMuaGFzaC51cGRhdGUoZGF0YSlcbiAgcmV0dXJuIHRoaXNcbn1cblxuRnJhbWVkSGFzaC5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gKGVuYykge1xuICByZXR1cm4gdGhpcy5oYXNoLmRpZ2VzdChlbmMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gRnJhbWVkSGFzaFxuIiwidmFyIFJlYWRhYmxlID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuUmVhZGFibGVcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcblxubW9kdWxlLmV4cG9ydHMgPSBmcm9tMlxuXG5mcm9tMi5jdG9yID0gY3RvclxuZnJvbTIub2JqID0gb2JqXG5cbnZhciBQcm90byA9IGN0b3IoKVxuXG5mdW5jdGlvbiB0b0Z1bmN0aW9uKGxpc3QpIHtcbiAgbGlzdCA9IGxpc3Quc2xpY2UoKVxuICByZXR1cm4gZnVuY3Rpb24gKF8sIGNiKSB7XG4gICAgdmFyIGVyciA9IG51bGxcbiAgICB2YXIgaXRlbSA9IGxpc3QubGVuZ3RoID8gbGlzdC5zaGlmdCgpIDogbnVsbFxuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGVyciA9IGl0ZW1cbiAgICAgIGl0ZW0gPSBudWxsXG4gICAgfVxuXG4gICAgY2IoZXJyLCBpdGVtKVxuICB9XG59XG5cbmZ1bmN0aW9uIGZyb20yKG9wdHMsIHJlYWQpIHtcbiAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG9wdHMpKSB7XG4gICAgcmVhZCA9IG9wdHNcbiAgICBvcHRzID0ge31cbiAgfVxuXG4gIHZhciBycyA9IG5ldyBQcm90byhvcHRzKVxuICBycy5fZnJvbSA9IEFycmF5LmlzQXJyYXkocmVhZCkgPyB0b0Z1bmN0aW9uKHJlYWQpIDogcmVhZFxuICByZXR1cm4gcnNcbn1cblxuZnVuY3Rpb24gY3RvcihvcHRzLCByZWFkKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlYWQgPSBvcHRzXG4gICAgb3B0cyA9IHt9XG4gIH1cblxuICBvcHRzID0gZGVmYXVsdHMob3B0cylcblxuICBpbmhlcml0cyhDbGFzcywgUmVhZGFibGUpXG4gIGZ1bmN0aW9uIENsYXNzKG92ZXJyaWRlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENsYXNzKSkgcmV0dXJuIG5ldyBDbGFzcyhvdmVycmlkZSlcbiAgICB0aGlzLl9yZWFkaW5nID0gZmFsc2VcbiAgICB0aGlzLl9jYWxsYmFjayA9IGNoZWNrXG4gICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZVxuICAgIFJlYWRhYmxlLmNhbGwodGhpcywgb3ZlcnJpZGUgfHwgb3B0cylcblxuICAgIHZhciBzZWxmID0gdGhpc1xuICAgIHZhciBod20gPSB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmtcblxuICAgIGZ1bmN0aW9uIGNoZWNrKGVyciwgZGF0YSkge1xuICAgICAgaWYgKHNlbGYuZGVzdHJveWVkKSByZXR1cm5cbiAgICAgIGlmIChlcnIpIHJldHVybiBzZWxmLmRlc3Ryb3koZXJyKVxuICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBzZWxmLnB1c2gobnVsbClcbiAgICAgIHNlbGYuX3JlYWRpbmcgPSBmYWxzZVxuICAgICAgaWYgKHNlbGYucHVzaChkYXRhKSkgc2VsZi5fcmVhZChod20pXG4gICAgfVxuICB9XG5cbiAgQ2xhc3MucHJvdG90eXBlLl9mcm9tID0gcmVhZFxuICBDbGFzcy5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbihzaXplKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRpbmcgfHwgdGhpcy5kZXN0cm95ZWQpIHJldHVyblxuICAgIHRoaXMuX3JlYWRpbmcgPSB0cnVlXG4gICAgdGhpcy5fZnJvbShzaXplLCB0aGlzLl9jYWxsYmFjaylcbiAgfVxuXG4gIENsYXNzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oZXJyKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm5cbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcblxuICAgIHZhciBzZWxmID0gdGhpc1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoZXJyKSBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgc2VsZi5lbWl0KCdjbG9zZScpXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBDbGFzc1xufVxuXG5mdW5jdGlvbiBvYmoob3B0cywgcmVhZCkge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicgfHwgQXJyYXkuaXNBcnJheShvcHRzKSkge1xuICAgIHJlYWQgPSBvcHRzXG4gICAgb3B0cyA9IHt9XG4gIH1cblxuICBvcHRzID0gZGVmYXVsdHMob3B0cylcbiAgb3B0cy5vYmplY3RNb2RlID0gdHJ1ZVxuICBvcHRzLmhpZ2hXYXRlck1hcmsgPSAxNlxuXG4gIHJldHVybiBmcm9tMihvcHRzLCByZWFkKVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0cyhvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9XG4gIHJldHVybiBvcHRzXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhZGFibGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgcHJvY2Vzc05leHRUaWNrID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlO1xuXG52YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBFRWxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBlbWl0dGVyLmxpc3RlbmVycyh0eXBlKS5sZW5ndGg7XG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbTtcbihmdW5jdGlvbiAoKXt0cnl7XG4gIFN0cmVhbSA9IHJlcXVpcmUoJ3N0JyArICdyZWFtJyk7XG59Y2F0Y2goXyl7fWZpbmFsbHl7XG4gIGlmICghU3RyZWFtKVxuICAgIFN0cmVhbSA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbn19KCkpXG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBkZWJ1Z1V0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgZGVidWc7XG5pZiAoZGVidWdVdGlsICYmIGRlYnVnVXRpbC5kZWJ1Z2xvZykge1xuICBkZWJ1ZyA9IGRlYnVnVXRpbC5kZWJ1Z2xvZygnc3RyZWFtJyk7XG59IGVsc2Uge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uICgpIHt9O1xufVxuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBTdHJpbmdEZWNvZGVyO1xuXG51dGlsLmluaGVyaXRzKFJlYWRhYmxlLCBTdHJlYW0pO1xuXG52YXIgRHVwbGV4O1xuZnVuY3Rpb24gUmVhZGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcuIFVzZWQgdG8gbWFrZSByZWFkKG4pIGlnbm9yZSBuIGFuZCB0b1xuICAvLyBtYWtlIGFsbCB0aGUgYnVmZmVyIG1lcmdpbmcgYW5kIGxlbmd0aCBjaGVja3MgZ28gYXdheVxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoc3RyZWFtIGluc3RhbmNlb2YgRHVwbGV4KVxuICAgIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIGRlZmF1bHRId20gPSB0aGlzLm9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDtcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gKGh3bSB8fCBod20gPT09IDApID8gaHdtIDogZGVmYXVsdEh3bTtcblxuICAvLyBjYXN0IHRvIGludHMuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IH5+dGhpcy5oaWdoV2F0ZXJNYXJrO1xuXG4gIHRoaXMuYnVmZmVyID0gW107XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgdGhpcy5waXBlcyA9IG51bGw7XG4gIHRoaXMucGlwZXNDb3VudCA9IDA7XG4gIHRoaXMuZmxvd2luZyA9IG51bGw7XG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIHRoaXMucmVhZGluZyA9IGZhbHNlO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIG9ud3JpdGUgY2IgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LFxuICAvLyBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlIGFueVxuICAvLyBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBjYWxsLlxuICB0aGlzLnN5bmMgPSB0cnVlO1xuXG4gIC8vIHdoZW5ldmVyIHdlIHJldHVybiBudWxsLCB0aGVuIHdlIHNldCBhIGZsYWcgdG8gc2F5XG4gIC8vIHRoYXQgd2UncmUgYXdhaXRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGVtaXNzaW9uLlxuICB0aGlzLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLnJlYWRhYmxlTGlzdGVuaW5nID0gZmFsc2U7XG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBvcHRpb25zLmRlZmF1bHRFbmNvZGluZyB8fCAndXRmOCc7XG5cbiAgLy8gd2hlbiBwaXBpbmcsIHdlIG9ubHkgY2FyZSBhYm91dCAncmVhZGFibGUnIGV2ZW50cyB0aGF0IGhhcHBlblxuICAvLyBhZnRlciByZWFkKClpbmcgYWxsIHRoZSBieXRlcyBhbmQgbm90IGdldHRpbmcgYW55IHB1c2hiYWNrLlxuICB0aGlzLnJhbk91dCA9IGZhbHNlO1xuXG4gIC8vIHRoZSBudW1iZXIgb2Ygd3JpdGVycyB0aGF0IGFyZSBhd2FpdGluZyBhIGRyYWluIGV2ZW50IGluIC5waXBlKClzXG4gIHRoaXMuYXdhaXREcmFpbiA9IDA7XG5cbiAgLy8gaWYgdHJ1ZSwgYSBtYXliZVJlYWRNb3JlIGhhcyBiZWVuIHNjaGVkdWxlZFxuICB0aGlzLnJlYWRpbmdNb3JlID0gZmFsc2U7XG5cbiAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gIGlmIChvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgaWYgKCFTdHJpbmdEZWNvZGVyKVxuICAgICAgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyk7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gIH1cbn1cblxudmFyIER1cGxleDtcbmZ1bmN0aW9uIFJlYWRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZGFibGUpKVxuICAgIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucyk7XG5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeVxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5yZWFkID09PSAnZnVuY3Rpb24nKVxuICAgIHRoaXMuX3JlYWQgPSBvcHRpb25zLnJlYWQ7XG5cbiAgU3RyZWFtLmNhbGwodGhpcyk7XG59XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICBpZiAoZW5jb2RpbmcgIT09IHN0YXRlLmVuY29kaW5nKSB7XG4gICAgICBjaHVuayA9IG5ldyBCdWZmZXIoY2h1bmssIGVuY29kaW5nKTtcbiAgICAgIGVuY29kaW5nID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgZmFsc2UpO1xufTtcblxuLy8gVW5zaGlmdCBzaG91bGQgKmFsd2F5cyogYmUgc29tZXRoaW5nIGRpcmVjdGx5IG91dCBvZiByZWFkKClcblJlYWRhYmxlLnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24oY2h1bmspIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCAnJywgdHJ1ZSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9PT0gZmFsc2U7XG59O1xuXG5mdW5jdGlvbiByZWFkYWJsZUFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgYWRkVG9Gcm9udCkge1xuICB2YXIgZXIgPSBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKTtcbiAgaWYgKGVyKSB7XG4gICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9IGVsc2UgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSk7XG4gIH0gZWxzZSBpZiAoc3RhdGUub2JqZWN0TW9kZSB8fCBjaHVuayAmJiBjaHVuay5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHN0YXRlLmVuZGVkICYmICFhZGRUb0Zyb250KSB7XG4gICAgICB2YXIgZSA9IG5ldyBFcnJvcignc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnKTtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGUpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUuZW5kRW1pdHRlZCAmJiBhZGRUb0Zyb250KSB7XG4gICAgICB2YXIgZSA9IG5ldyBFcnJvcignc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnKTtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhYWRkVG9Gcm9udCAmJiAhZW5jb2RpbmcpXG4gICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAgIGlmICghYWRkVG9Gcm9udClcbiAgICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuXG4gICAgICAvLyBpZiB3ZSB3YW50IHRoZSBkYXRhIG5vdywganVzdCBlbWl0IGl0LlxuICAgICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmICFzdGF0ZS5zeW5jKSB7XG4gICAgICAgIHN0cmVhbS5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICBzdHJlYW0ucmVhZCgwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgYnVmZmVyIGluZm8uXG4gICAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICAgICAgaWYgKGFkZFRvRnJvbnQpXG4gICAgICAgICAgc3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuXG4gICAgICAgIGlmIChzdGF0ZS5uZWVkUmVhZGFibGUpXG4gICAgICAgICAgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG4gICAgICB9XG5cbiAgICAgIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCFhZGRUb0Zyb250KSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIG5lZWRNb3JlRGF0YShzdGF0ZSk7XG59XG5cblxuLy8gaWYgaXQncyBwYXN0IHRoZSBoaWdoIHdhdGVyIG1hcmssIHdlIGNhbiBwdXNoIGluIHNvbWUgbW9yZS5cbi8vIEFsc28sIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXQsIHdlIGNhbiBzdGFuZCBzb21lXG4vLyBtb3JlIGJ5dGVzLiAgVGhpcyBpcyB0byB3b3JrIGFyb3VuZCBjYXNlcyB3aGVyZSBod209MCxcbi8vIHN1Y2ggYXMgdGhlIHJlcGwuICBBbHNvLCBpZiB0aGUgcHVzaCgpIHRyaWdnZXJlZCBhXG4vLyByZWFkYWJsZSBldmVudCwgYW5kIHRoZSB1c2VyIGNhbGxlZCByZWFkKGxhcmdlTnVtYmVyKSBzdWNoIHRoYXRcbi8vIG5lZWRSZWFkYWJsZSB3YXMgc2V0LCB0aGVuIHdlIG91Z2h0IHRvIHB1c2ggbW9yZSwgc28gdGhhdCBhbm90aGVyXG4vLyAncmVhZGFibGUnIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkLlxuZnVuY3Rpb24gbmVlZE1vcmVEYXRhKHN0YXRlKSB7XG4gIHJldHVybiAhc3RhdGUuZW5kZWQgJiZcbiAgICAgICAgIChzdGF0ZS5uZWVkUmVhZGFibGUgfHxcbiAgICAgICAgICBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8XG4gICAgICAgICAgc3RhdGUubGVuZ3RoID09PSAwKTtcbn1cblxuLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5SZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbihlbmMpIHtcbiAgaWYgKCFTdHJpbmdEZWNvZGVyKVxuICAgIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nID0gZW5jO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiA4TUJcbnZhciBNQVhfSFdNID0gMHg4MDAwMDA7XG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID49IE1BWF9IV00pIHtcbiAgICBuID0gTUFYX0hXTTtcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyXG4gICAgbi0tO1xuICAgIG4gfD0gbiA+Pj4gMTtcbiAgICBuIHw9IG4gPj4+IDI7XG4gICAgbiB8PSBuID4+PiA0O1xuICAgIG4gfD0gbiA+Pj4gODtcbiAgICBuIHw9IG4gPj4+IDE2O1xuICAgIG4rKztcbiAgfVxuICByZXR1cm4gbjtcbn1cblxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKVxuICAgIHJldHVybiAwO1xuXG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKVxuICAgIHJldHVybiBuID09PSAwID8gMCA6IDE7XG5cbiAgaWYgKG4gPT09IG51bGwgfHwgaXNOYU4obikpIHtcbiAgICAvLyBvbmx5IGZsb3cgb25lIGJ1ZmZlciBhdCBhIHRpbWVcbiAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5idWZmZXIubGVuZ3RoKVxuICAgICAgcmV0dXJuIHN0YXRlLmJ1ZmZlclswXS5sZW5ndGg7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbiAgfVxuXG4gIGlmIChuIDw9IDApXG4gICAgcmV0dXJuIDA7XG5cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIHRhcmdldCBidWZmZXIgbGV2ZWwsXG4gIC8vIHRoZW4gcmFpc2UgdGhlIHdhdGVyIG1hcmsuICBCdW1wIHVwIHRvIHRoZSBuZXh0IGhpZ2hlc3RcbiAgLy8gcG93ZXIgb2YgMiwgdG8gcHJldmVudCBpbmNyZWFzaW5nIGl0IGV4Y2Vzc2l2ZWx5IGluIHRpbnlcbiAgLy8gYW1vdW50cy5cbiAgaWYgKG4gPiBzdGF0ZS5oaWdoV2F0ZXJNYXJrKVxuICAgIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKTtcblxuICAvLyBkb24ndCBoYXZlIHRoYXQgbXVjaC4gIHJldHVybiBudWxsLCB1bmxlc3Mgd2UndmUgZW5kZWQuXG4gIGlmIChuID4gc3RhdGUubGVuZ3RoKSB7XG4gICAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuO1xufVxuXG4vLyB5b3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihuKSB7XG4gIGRlYnVnKCdyZWFkJywgbik7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBuT3JpZyA9IG47XG5cbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuID4gMClcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcblxuICAvLyBpZiB3ZSdyZSBkb2luZyByZWFkKDApIHRvIHRyaWdnZXIgYSByZWFkYWJsZSBldmVudCwgYnV0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhIGJ1bmNoIG9mIGRhdGEgaW4gdGhlIGJ1ZmZlciwgdGhlbiBqdXN0IHRyaWdnZXJcbiAgLy8gdGhlICdyZWFkYWJsZScgZXZlbnQgYW5kIG1vdmUgb24uXG4gIGlmIChuID09PSAwICYmXG4gICAgICBzdGF0ZS5uZWVkUmVhZGFibGUgJiZcbiAgICAgIChzdGF0ZS5sZW5ndGggPj0gc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5lbmRlZCkpIHtcbiAgICBkZWJ1ZygncmVhZDogZW1pdFJlYWRhYmxlJywgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZClcbiAgICAgIGVuZFJlYWRhYmxlKHRoaXMpO1xuICAgIGVsc2VcbiAgICAgIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKTtcblxuICAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMClcbiAgICAgIGVuZFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQWxsIHRoZSBhY3R1YWwgY2h1bmsgZ2VuZXJhdGlvbiBsb2dpYyBuZWVkcyB0byBiZVxuICAvLyAqYmVsb3cqIHRoZSBjYWxsIHRvIF9yZWFkLiAgVGhlIHJlYXNvbiBpcyB0aGF0IGluIGNlcnRhaW5cbiAgLy8gc3ludGhldGljIHN0cmVhbSBjYXNlcywgc3VjaCBhcyBwYXNzdGhyb3VnaCBzdHJlYW1zLCBfcmVhZFxuICAvLyBtYXkgYmUgYSBjb21wbGV0ZWx5IHN5bmNocm9ub3VzIG9wZXJhdGlvbiB3aGljaCBtYXkgY2hhbmdlXG4gIC8vIHRoZSBzdGF0ZSBvZiB0aGUgcmVhZCBidWZmZXIsIHByb3ZpZGluZyBlbm91Z2ggZGF0YSB3aGVuXG4gIC8vIGJlZm9yZSB0aGVyZSB3YXMgKm5vdCogZW5vdWdoLlxuICAvL1xuICAvLyBTbywgdGhlIHN0ZXBzIGFyZTpcbiAgLy8gMS4gRmlndXJlIG91dCB3aGF0IHRoZSBzdGF0ZSBvZiB0aGluZ3Mgd2lsbCBiZSBhZnRlciB3ZSBkb1xuICAvLyBhIHJlYWQgZnJvbSB0aGUgYnVmZmVyLlxuICAvL1xuICAvLyAyLiBJZiB0aGF0IHJlc3VsdGluZyBzdGF0ZSB3aWxsIHRyaWdnZXIgYSBfcmVhZCwgdGhlbiBjYWxsIF9yZWFkLlxuICAvLyBOb3RlIHRoYXQgdGhpcyBtYXkgYmUgYXN5bmNocm9ub3VzLCBvciBzeW5jaHJvbm91cy4gIFllcywgaXQgaXNcbiAgLy8gZGVlcGx5IHVnbHkgdG8gd3JpdGUgQVBJcyB0aGlzIHdheSwgYnV0IHRoYXQgc3RpbGwgZG9lc24ndCBtZWFuXG4gIC8vIHRoYXQgdGhlIFJlYWRhYmxlIGNsYXNzIHNob3VsZCBiZWhhdmUgaW1wcm9wZXJseSwgYXMgc3RyZWFtcyBhcmVcbiAgLy8gZGVzaWduZWQgdG8gYmUgc3luYy9hc3luYyBhZ25vc3RpYy5cbiAgLy8gVGFrZSBub3RlIGlmIHRoZSBfcmVhZCBjYWxsIGlzIHN5bmMgb3IgYXN5bmMgKGllLCBpZiB0aGUgcmVhZCBjYWxsXG4gIC8vIGhhcyByZXR1cm5lZCB5ZXQpLCBzbyB0aGF0IHdlIGtub3cgd2hldGhlciBvciBub3QgaXQncyBzYWZlIHRvIGVtaXRcbiAgLy8gJ3JlYWRhYmxlJyBldGMuXG4gIC8vXG4gIC8vIDMuIEFjdHVhbGx5IHB1bGwgdGhlIHJlcXVlc3RlZCBjaHVua3Mgb3V0IG9mIHRoZSBidWZmZXIgYW5kIHJldHVybi5cblxuICAvLyBpZiB3ZSBuZWVkIGEgcmVhZGFibGUgZXZlbnQsIHRoZW4gd2UgbmVlZCB0byBkbyBzb21lIHJlYWRpbmcuXG4gIHZhciBkb1JlYWQgPSBzdGF0ZS5uZWVkUmVhZGFibGU7XG4gIGRlYnVnKCduZWVkIHJlYWRhYmxlJywgZG9SZWFkKTtcblxuICAvLyBpZiB3ZSBjdXJyZW50bHkgaGF2ZSBsZXNzIHRoYW4gdGhlIGhpZ2hXYXRlck1hcmssIHRoZW4gYWxzbyByZWFkIHNvbWVcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCB8fCBzdGF0ZS5sZW5ndGggLSBuIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRvUmVhZCA9IHRydWU7XG4gICAgZGVidWcoJ2xlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrJywgZG9SZWFkKTtcbiAgfVxuXG4gIC8vIGhvd2V2ZXIsIGlmIHdlJ3ZlIGVuZGVkLCB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQsIGFuZCBpZiB3ZSdyZSBhbHJlYWR5XG4gIC8vIHJlYWRpbmcsIHRoZW4gaXQncyB1bm5lY2Vzc2FyeS5cbiAgaWYgKHN0YXRlLmVuZGVkIHx8IHN0YXRlLnJlYWRpbmcpIHtcbiAgICBkb1JlYWQgPSBmYWxzZTtcbiAgICBkZWJ1ZygncmVhZGluZyBvciBlbmRlZCcsIGRvUmVhZCk7XG4gIH1cblxuICBpZiAoZG9SZWFkKSB7XG4gICAgZGVidWcoJ2RvIHJlYWQnKTtcbiAgICBzdGF0ZS5yZWFkaW5nID0gdHJ1ZTtcbiAgICBzdGF0ZS5zeW5jID0gdHJ1ZTtcbiAgICAvLyBpZiB0aGUgbGVuZ3RoIGlzIGN1cnJlbnRseSB6ZXJvLCB0aGVuIHdlICpuZWVkKiBhIHJlYWRhYmxlIGV2ZW50LlxuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApXG4gICAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIC8vIGNhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcbiAgICB0aGlzLl9yZWFkKHN0YXRlLmhpZ2hXYXRlck1hcmspO1xuICAgIHN0YXRlLnN5bmMgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIElmIF9yZWFkIHB1c2hlZCBkYXRhIHN5bmNocm9ub3VzbHksIHRoZW4gYHJlYWRpbmdgIHdpbGwgYmUgZmFsc2UsXG4gIC8vIGFuZCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBtdWNoIGRhdGEgd2UgY2FuIHJldHVybiB0byB0aGUgdXNlci5cbiAgaWYgKGRvUmVhZCAmJiAhc3RhdGUucmVhZGluZylcbiAgICBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuXG4gIHZhciByZXQ7XG4gIGlmIChuID4gMClcbiAgICByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7XG4gIGVsc2VcbiAgICByZXQgPSBudWxsO1xuXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIG4gPSAwO1xuICB9XG5cbiAgc3RhdGUubGVuZ3RoIC09IG47XG5cbiAgLy8gSWYgd2UgaGF2ZSBub3RoaW5nIGluIHRoZSBidWZmZXIsIHRoZW4gd2Ugd2FudCB0byBrbm93XG4gIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuZW5kZWQpXG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyBJZiB3ZSB0cmllZCB0byByZWFkKCkgcGFzdCB0aGUgRU9GLCB0aGVuIGVtaXQgZW5kIG9uIHRoZSBuZXh0IHRpY2suXG4gIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApXG4gICAgZW5kUmVhZGFibGUodGhpcyk7XG5cbiAgaWYgKHJldCAhPT0gbnVsbClcbiAgICB0aGlzLmVtaXQoJ2RhdGEnLCByZXQpO1xuXG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKSB7XG4gIHZhciBlciA9IG51bGw7XG4gIGlmICghKEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpICYmXG4gICAgICB0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmXG4gICAgICBjaHVuayAhPT0gbnVsbCAmJlxuICAgICAgY2h1bmsgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICByZXR1cm4gZXI7XG59XG5cblxuZnVuY3Rpb24gb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5lbmRlZCkgcmV0dXJuO1xuICBpZiAoc3RhdGUuZGVjb2Rlcikge1xuICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkge1xuICAgICAgc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWU7XG5cbiAgLy8gZW1pdCAncmVhZGFibGUnIG5vdyB0byBtYWtlIHN1cmUgaXQgZ2V0cyBwaWNrZWQgdXAuXG4gIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xufVxuXG4vLyBEb24ndCBlbWl0IHJlYWRhYmxlIHJpZ2h0IGF3YXkgaW4gc3luYyBtb2RlLCBiZWNhdXNlIHRoaXMgY2FuIHRyaWdnZXJcbi8vIGFub3RoZXIgcmVhZCgpIGNhbGwgPT4gc3RhY2sgb3ZlcmZsb3cuICBUaGlzIHdheSwgaXQgbWlnaHQgdHJpZ2dlclxuLy8gYSBuZXh0VGljayByZWN1cnNpb24gd2FybmluZywgYnV0IHRoYXQncyBub3Qgc28gYmFkLlxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkge1xuICAgIGRlYnVnKCdlbWl0UmVhZGFibGUnLCBzdGF0ZS5mbG93aW5nKTtcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSB0cnVlO1xuICAgIGlmIChzdGF0ZS5zeW5jKVxuICAgICAgcHJvY2Vzc05leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSk7XG4gICAgZWxzZVxuICAgICAgZW1pdFJlYWRhYmxlXyhzdHJlYW0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZV8oc3RyZWFtKSB7XG4gIGRlYnVnKCdlbWl0IHJlYWRhYmxlJyk7XG4gIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpO1xuICBmbG93KHN0cmVhbSk7XG59XG5cblxuLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nTW9yZSkge1xuICAgIHN0YXRlLnJlYWRpbmdNb3JlID0gdHJ1ZTtcbiAgICBwcm9jZXNzTmV4dFRpY2sobWF5YmVSZWFkTW9yZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgd2hpbGUgKCFzdGF0ZS5yZWFkaW5nICYmICFzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5lbmRlZCAmJlxuICAgICAgICAgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRlYnVnKCdtYXliZVJlYWRNb3JlIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICAgIGlmIChsZW4gPT09IHN0YXRlLmxlbmd0aClcbiAgICAgIC8vIGRpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVhaztcbiAgICBlbHNlXG4gICAgICBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gIH1cbiAgc3RhdGUucmVhZGluZ01vcmUgPSBmYWxzZTtcbn1cblxuLy8gYWJzdHJhY3QgbWV0aG9kLiAgdG8gYmUgb3ZlcnJpZGRlbiBpbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gY2FsbCBjYihlciwgZGF0YSkgd2hlcmUgZGF0YSBpcyA8PSBuIGluIGxlbmd0aC5cbi8vIGZvciB2aXJ0dWFsIChub24tc3RyaW5nLCBub24tYnVmZmVyKSBzdHJlYW1zLCBcImxlbmd0aFwiIGlzIHNvbWV3aGF0XG4vLyBhcmJpdHJhcnksIGFuZCBwZXJoYXBzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuXG5SZWFkYWJsZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbihuKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpKTtcbn07XG5cblJlYWRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdCwgcGlwZU9wdHMpIHtcbiAgdmFyIHNyYyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgc3dpdGNoIChzdGF0ZS5waXBlc0NvdW50KSB7XG4gICAgY2FzZSAwOlxuICAgICAgc3RhdGUucGlwZXMgPSBkZXN0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc3RhdGUucGlwZXMgPSBbc3RhdGUucGlwZXMsIGRlc3RdO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0YXRlLnBpcGVzLnB1c2goZGVzdCk7XG4gICAgICBicmVhaztcbiAgfVxuICBzdGF0ZS5waXBlc0NvdW50ICs9IDE7XG4gIGRlYnVnKCdwaXBlIGNvdW50PSVkIG9wdHM9JWonLCBzdGF0ZS5waXBlc0NvdW50LCBwaXBlT3B0cyk7XG5cbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJlxuICAgICAgICAgICAgICBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJlxuICAgICAgICAgICAgICBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcblxuICB2YXIgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogY2xlYW51cDtcbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpXG4gICAgcHJvY2Vzc05leHRUaWNrKGVuZEZuKTtcbiAgZWxzZVxuICAgIHNyYy5vbmNlKCdlbmQnLCBlbmRGbik7XG5cbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSkge1xuICAgIGRlYnVnKCdvbnVucGlwZScpO1xuICAgIGlmIChyZWFkYWJsZSA9PT0gc3JjKSB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgZGVidWcoJ29uZW5kJyk7XG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG4gIC8vIHdoZW4gdGhlIGRlc3QgZHJhaW5zLCBpdCByZWR1Y2VzIHRoZSBhd2FpdERyYWluIGNvdW50ZXJcbiAgLy8gb24gdGhlIHNvdXJjZS4gIFRoaXMgd291bGQgYmUgbW9yZSBlbGVnYW50IHdpdGggYSAub25jZSgpXG4gIC8vIGhhbmRsZXIgaW4gZmxvdygpLCBidXQgYWRkaW5nIGFuZCByZW1vdmluZyByZXBlYXRlZGx5IGlzXG4gIC8vIHRvbyBzbG93LlxuICB2YXIgb25kcmFpbiA9IHBpcGVPbkRyYWluKHNyYyk7XG4gIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbik7XG5cbiAgdmFyIGNsZWFuZWRVcCA9IGZhbHNlO1xuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIGRlYnVnKCdjbGVhbnVwJyk7XG4gICAgLy8gY2xlYW51cCBldmVudCBoYW5kbGVycyBvbmNlIHRoZSBwaXBlIGlzIGJyb2tlblxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgb25kcmFpbik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBjbGVhbnVwKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpO1xuXG4gICAgY2xlYW5lZFVwID0gdHJ1ZTtcblxuICAgIC8vIGlmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gJiZcbiAgICAgICAgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSlcbiAgICAgIG9uZHJhaW4oKTtcbiAgfVxuXG4gIHNyYy5vbignZGF0YScsIG9uZGF0YSk7XG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGRlYnVnKCdvbmRhdGEnKTtcbiAgICB2YXIgcmV0ID0gZGVzdC53cml0ZShjaHVuayk7XG4gICAgaWYgKGZhbHNlID09PSByZXQpIHtcbiAgICAgIC8vIElmIHRoZSB1c2VyIHVucGlwZWQgZHVyaW5nIGBkZXN0LndyaXRlKClgLCBpdCBpcyBwb3NzaWJsZVxuICAgICAgLy8gdG8gZ2V0IHN0dWNrIGluIGEgcGVybWFuZW50bHkgcGF1c2VkIHN0YXRlIGlmIHRoYXQgd3JpdGVcbiAgICAgIC8vIGFsc28gcmV0dXJuZWQgZmFsc2UuXG4gICAgICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSAmJlxuICAgICAgICAgIHN0YXRlLnBpcGVzWzBdID09PSBkZXN0ICYmXG4gICAgICAgICAgc3JjLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA9PT0gMSAmJlxuICAgICAgICAgICFjbGVhbmVkVXApIHtcbiAgICAgICAgZGVidWcoJ2ZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZScsIHNyYy5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKTtcbiAgICAgICAgc3JjLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4rKztcbiAgICAgIH1cbiAgICAgIHNyYy5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBkZXN0IGhhcyBhbiBlcnJvciwgdGhlbiBzdG9wIHBpcGluZyBpbnRvIGl0LlxuICAvLyBob3dldmVyLCBkb24ndCBzdXBwcmVzcyB0aGUgdGhyb3dpbmcgYmVoYXZpb3IgZm9yIHRoaXMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGVyKTtcbiAgICB1bnBpcGUoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGlmIChFRWxpc3RlbmVyQ291bnQoZGVzdCwgJ2Vycm9yJykgPT09IDApXG4gICAgICBkZXN0LmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9XG4gIC8vIFRoaXMgaXMgYSBicnV0YWxseSB1Z2x5IGhhY2sgdG8gbWFrZSBzdXJlIHRoYXQgb3VyIGVycm9yIGhhbmRsZXJcbiAgLy8gaXMgYXR0YWNoZWQgYmVmb3JlIGFueSB1c2VybGFuZCBvbmVzLiAgTkVWRVIgRE8gVEhJUy5cbiAgaWYgKCFkZXN0Ll9ldmVudHMgfHwgIWRlc3QuX2V2ZW50cy5lcnJvcilcbiAgICBkZXN0Lm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICBlbHNlIGlmIChpc0FycmF5KGRlc3QuX2V2ZW50cy5lcnJvcikpXG4gICAgZGVzdC5fZXZlbnRzLmVycm9yLnVuc2hpZnQob25lcnJvcik7XG4gIGVsc2VcbiAgICBkZXN0Ll9ldmVudHMuZXJyb3IgPSBbb25lcnJvciwgZGVzdC5fZXZlbnRzLmVycm9yXTtcblxuXG4gIC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnY2xvc2UnLCBvbmNsb3NlKTtcbiAgZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgZGVidWcoJ29uZmluaXNoJyk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcblxuICBmdW5jdGlvbiB1bnBpcGUoKSB7XG4gICAgZGVidWcoJ3VucGlwZScpO1xuICAgIHNyYy51bnBpcGUoZGVzdCk7XG4gIH1cblxuICAvLyB0ZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0b1xuICBkZXN0LmVtaXQoJ3BpcGUnLCBzcmMpO1xuXG4gIC8vIHN0YXJ0IHRoZSBmbG93IGlmIGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3BpcGUgcmVzdW1lJyk7XG4gICAgc3JjLnJlc3VtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG5mdW5jdGlvbiBwaXBlT25EcmFpbihzcmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTtcbiAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbilcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW4tLTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbiA9PT0gMCAmJiBFRWxpc3RlbmVyQ291bnQoc3JjLCAnZGF0YScpKSB7XG4gICAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICAgIGZsb3coc3JjKTtcbiAgICB9XG4gIH07XG59XG5cblxuUmVhZGFibGUucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uKGRlc3QpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICAvLyBpZiB3ZSdyZSBub3QgcGlwaW5nIGFueXdoZXJlLCB0aGVuIGRvIG5vdGhpbmcuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAwKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIGp1c3Qgb25lIGRlc3RpbmF0aW9uLiAgbW9zdCBjb21tb24gY2FzZS5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHtcbiAgICAvLyBwYXNzZWQgaW4gb25lLCBidXQgaXQncyBub3QgdGhlIHJpZ2h0IG9uZS5cbiAgICBpZiAoZGVzdCAmJiBkZXN0ICE9PSBzdGF0ZS5waXBlcylcbiAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKCFkZXN0KVxuICAgICAgZGVzdCA9IHN0YXRlLnBpcGVzO1xuXG4gICAgLy8gZ290IGEgbWF0Y2guXG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICBpZiAoZGVzdClcbiAgICAgIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzbG93IGNhc2UuIG11bHRpcGxlIHBpcGUgZGVzdGluYXRpb25zLlxuXG4gIGlmICghZGVzdCkge1xuICAgIC8vIHJlbW92ZSBhbGwuXG4gICAgdmFyIGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnBpcGVzQ291bnQ7XG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG4gIHZhciBpID0gaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCk7XG4gIGlmIChpID09PSAtMSlcbiAgICByZXR1cm4gdGhpcztcblxuICBzdGF0ZS5waXBlcy5zcGxpY2UoaSwgMSk7XG4gIHN0YXRlLnBpcGVzQ291bnQgLT0gMTtcbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpXG4gICAgc3RhdGUucGlwZXMgPSBzdGF0ZS5waXBlc1swXTtcblxuICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gc2V0IHVwIGRhdGEgZXZlbnRzIGlmIHRoZXkgYXJlIGFza2VkIGZvclxuLy8gRW5zdXJlIHJlYWRhYmxlIGxpc3RlbmVycyBldmVudHVhbGx5IGdldCBzb21ldGhpbmdcblJlYWRhYmxlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKGV2LCBmbikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2LCBmbik7XG5cbiAgLy8gSWYgbGlzdGVuaW5nIHRvIGRhdGEsIGFuZCBpdCBoYXMgbm90IGV4cGxpY2l0bHkgYmVlbiBwYXVzZWQsXG4gIC8vIHRoZW4gY2FsbCByZXN1bWUgdG8gc3RhcnQgdGhlIGZsb3cgb2YgZGF0YSBvbiB0aGUgbmV4dCB0aWNrLlxuICBpZiAoZXYgPT09ICdkYXRhJyAmJiBmYWxzZSAhPT0gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSB7XG4gICAgdGhpcy5yZXN1bWUoKTtcbiAgfVxuXG4gIGlmIChldiA9PT0gJ3JlYWRhYmxlJyAmJiB0aGlzLnJlYWRhYmxlKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAoIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHRydWU7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICAgICAgcHJvY2Vzc05leHRUaWNrKG5SZWFkaW5nTmV4dFRpY2ssIHRoaXMpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgZW1pdFJlYWRhYmxlKHRoaXMsIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcblJlYWRhYmxlLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IFJlYWRhYmxlLnByb3RvdHlwZS5vbjtcblxuZnVuY3Rpb24gblJlYWRpbmdOZXh0VGljayhzZWxmKSB7XG4gIGRlYnVnKCdyZWFkYWJsZSBuZXh0dGljayByZWFkIDAnKTtcbiAgc2VsZi5yZWFkKDApO1xufVxuXG4vLyBwYXVzZSgpIGFuZCByZXN1bWUoKSBhcmUgcmVtbmFudHMgb2YgdGhlIGxlZ2FjeSByZWFkYWJsZSBzdHJlYW0gQVBJXG4vLyBJZiB0aGUgdXNlciB1c2VzIHRoZW0sIHRoZW4gc3dpdGNoIGludG8gb2xkIG1vZGUuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdyZXN1bWUnKTtcbiAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICByZXN1bWUodGhpcywgc3RhdGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZXN1bWVTY2hlZHVsZWQpIHtcbiAgICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHByb2Nlc3NOZXh0VGljayhyZXN1bWVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICBzdHJlYW0uZW1pdCgncmVzdW1lJyk7XG4gIGZsb3coc3RyZWFtKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpXG4gICAgc3RyZWFtLnJlYWQoMCk7XG59XG5cblJlYWRhYmxlLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcbiAgaWYgKGZhbHNlICE9PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGF1c2UnKTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG4gIGlmIChzdGF0ZS5mbG93aW5nKSB7XG4gICAgZG8ge1xuICAgICAgdmFyIGNodW5rID0gc3RyZWFtLnJlYWQoKTtcbiAgICB9IHdoaWxlIChudWxsICE9PSBjaHVuayAmJiBzdGF0ZS5mbG93aW5nKTtcbiAgfVxufVxuXG4vLyB3cmFwIGFuIG9sZC1zdHlsZSBzdHJlYW0gYXMgdGhlIGFzeW5jIGRhdGEgc291cmNlLlxuLy8gVGhpcyBpcyAqbm90KiBwYXJ0IG9mIHRoZSByZWFkYWJsZSBzdHJlYW0gaW50ZXJmYWNlLlxuLy8gSXQgaXMgYW4gdWdseSB1bmZvcnR1bmF0ZSBtZXNzIG9mIGhpc3RvcnkuXG5SZWFkYWJsZS5wcm90b3R5cGUud3JhcCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgcGF1c2VkID0gZmFsc2U7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnKCd3cmFwcGVkIGVuZCcpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpXG4gICAgICAgIHNlbGYucHVzaChjaHVuayk7XG4gICAgfVxuXG4gICAgc2VsZi5wdXNoKG51bGwpO1xuICB9KTtcblxuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbihjaHVuaykge1xuICAgIGRlYnVnKCd3cmFwcGVkIGRhdGEnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlcilcbiAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAvLyBkb24ndCBza2lwIG92ZXIgZmFsc3kgdmFsdWVzIGluIG9iamVjdE1vZGVcbiAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSAmJiAoY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IHVuZGVmaW5lZCkpXG4gICAgICByZXR1cm47XG4gICAgZWxzZSBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgKCFjaHVuayB8fCAhY2h1bmsubGVuZ3RoKSlcbiAgICAgIHJldHVybjtcblxuICAgIHZhciByZXQgPSBzZWxmLnB1c2goY2h1bmspO1xuICAgIGlmICghcmV0KSB7XG4gICAgICBwYXVzZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBwcm94eSBhbGwgdGhlIG90aGVyIG1ldGhvZHMuXG4gIC8vIGltcG9ydGFudCB3aGVuIHdyYXBwaW5nIGZpbHRlcnMgYW5kIGR1cGxleGVzLlxuICBmb3IgKHZhciBpIGluIHN0cmVhbSkge1xuICAgIGlmICh0aGlzW2ldID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHN0cmVhbVtpXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1tpXSA9IGZ1bmN0aW9uKG1ldGhvZCkgeyByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW1bbWV0aG9kXS5hcHBseShzdHJlYW0sIGFyZ3VtZW50cyk7XG4gICAgICB9OyB9KGkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByb3h5IGNlcnRhaW4gaW1wb3J0YW50IGV2ZW50cy5cbiAgdmFyIGV2ZW50cyA9IFsnZXJyb3InLCAnY2xvc2UnLCAnZGVzdHJveScsICdwYXVzZScsICdyZXN1bWUnXTtcbiAgZm9yRWFjaChldmVudHMsIGZ1bmN0aW9uKGV2KSB7XG4gICAgc3RyZWFtLm9uKGV2LCBzZWxmLmVtaXQuYmluZChzZWxmLCBldikpO1xuICB9KTtcblxuICAvLyB3aGVuIHdlIHRyeSB0byBjb25zdW1lIHNvbWUgbW9yZSBieXRlcywgc2ltcGx5IHVucGF1c2UgdGhlXG4gIC8vIHVuZGVybHlpbmcgc3RyZWFtLlxuICBzZWxmLl9yZWFkID0gZnVuY3Rpb24obikge1xuICAgIGRlYnVnKCd3cmFwcGVkIF9yZWFkJywgbik7XG4gICAgaWYgKHBhdXNlZCkge1xuICAgICAgcGF1c2VkID0gZmFsc2U7XG4gICAgICBzdHJlYW0ucmVzdW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBzZWxmO1xufTtcblxuXG4vLyBleHBvc2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG5SZWFkYWJsZS5fZnJvbUxpc3QgPSBmcm9tTGlzdDtcblxuLy8gUGx1Y2sgb2ZmIG4gYnl0ZXMgZnJvbSBhbiBhcnJheSBvZiBidWZmZXJzLlxuLy8gTGVuZ3RoIGlzIHRoZSBjb21iaW5lZCBsZW5ndGhzIG9mIGFsbCB0aGUgYnVmZmVycyBpbiB0aGUgbGlzdC5cbmZ1bmN0aW9uIGZyb21MaXN0KG4sIHN0YXRlKSB7XG4gIHZhciBsaXN0ID0gc3RhdGUuYnVmZmVyO1xuICB2YXIgbGVuZ3RoID0gc3RhdGUubGVuZ3RoO1xuICB2YXIgc3RyaW5nTW9kZSA9ICEhc3RhdGUuZGVjb2RlcjtcbiAgdmFyIG9iamVjdE1vZGUgPSAhIXN0YXRlLm9iamVjdE1vZGU7XG4gIHZhciByZXQ7XG5cbiAgLy8gbm90aGluZyBpbiB0aGUgbGlzdCwgZGVmaW5pdGVseSBlbXB0eS5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiBudWxsO1xuXG4gIGlmIChsZW5ndGggPT09IDApXG4gICAgcmV0ID0gbnVsbDtcbiAgZWxzZSBpZiAob2JqZWN0TW9kZSlcbiAgICByZXQgPSBsaXN0LnNoaWZ0KCk7XG4gIGVsc2UgaWYgKCFuIHx8IG4gPj0gbGVuZ3RoKSB7XG4gICAgLy8gcmVhZCBpdCBhbGwsIHRydW5jYXRlIHRoZSBhcnJheS5cbiAgICBpZiAoc3RyaW5nTW9kZSlcbiAgICAgIHJldCA9IGxpc3Quam9pbignJyk7XG4gICAgZWxzZSBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICByZXQgPSBsaXN0WzBdO1xuICAgIGVsc2VcbiAgICAgIHJldCA9IEJ1ZmZlci5jb25jYXQobGlzdCwgbGVuZ3RoKTtcbiAgICBsaXN0Lmxlbmd0aCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVhZCBqdXN0IHNvbWUgb2YgaXQuXG4gICAgaWYgKG4gPCBsaXN0WzBdLmxlbmd0aCkge1xuICAgICAgLy8ganVzdCB0YWtlIGEgcGFydCBvZiB0aGUgZmlyc3QgbGlzdCBpdGVtLlxuICAgICAgLy8gc2xpY2UgaXMgdGhlIHNhbWUgZm9yIGJ1ZmZlcnMgYW5kIHN0cmluZ3MuXG4gICAgICB2YXIgYnVmID0gbGlzdFswXTtcbiAgICAgIHJldCA9IGJ1Zi5zbGljZSgwLCBuKTtcbiAgICAgIGxpc3RbMF0gPSBidWYuc2xpY2Uobik7XG4gICAgfSBlbHNlIGlmIChuID09PSBsaXN0WzBdLmxlbmd0aCkge1xuICAgICAgLy8gZmlyc3QgbGlzdCBpcyBhIHBlcmZlY3QgbWF0Y2hcbiAgICAgIHJldCA9IGxpc3Quc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29tcGxleCBjYXNlLlxuICAgICAgLy8gd2UgaGF2ZSBlbm91Z2ggdG8gY292ZXIgaXQsIGJ1dCBpdCBzcGFucyBwYXN0IHRoZSBmaXJzdCBidWZmZXIuXG4gICAgICBpZiAoc3RyaW5nTW9kZSlcbiAgICAgICAgcmV0ID0gJyc7XG4gICAgICBlbHNlXG4gICAgICAgIHJldCA9IG5ldyBCdWZmZXIobik7XG5cbiAgICAgIHZhciBjID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsICYmIGMgPCBuOyBpKyspIHtcbiAgICAgICAgdmFyIGJ1ZiA9IGxpc3RbMF07XG4gICAgICAgIHZhciBjcHkgPSBNYXRoLm1pbihuIC0gYywgYnVmLmxlbmd0aCk7XG5cbiAgICAgICAgaWYgKHN0cmluZ01vZGUpXG4gICAgICAgICAgcmV0ICs9IGJ1Zi5zbGljZSgwLCBjcHkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgYnVmLmNvcHkocmV0LCBjLCAwLCBjcHkpO1xuXG4gICAgICAgIGlmIChjcHkgPCBidWYubGVuZ3RoKVxuICAgICAgICAgIGxpc3RbMF0gPSBidWYuc2xpY2UoY3B5KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcblxuICAgICAgICBjICs9IGNweTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuXG4gIC8vIElmIHdlIGdldCBoZXJlIGJlZm9yZSBjb25zdW1pbmcgYWxsIHRoZSBieXRlcywgdGhlbiB0aGF0IGlzIGFcbiAgLy8gYnVnIGluIG5vZGUuICBTaG91bGQgbmV2ZXIgaGFwcGVuLlxuICBpZiAoc3RhdGUubGVuZ3RoID4gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VuZFJlYWRhYmxlIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7XG5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHByb2Nlc3NOZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZU5UKHN0YXRlLCBzdHJlYW0pIHtcbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0ucmVhZGFibGUgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yRWFjaCAoeHMsIGYpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmKHhzW2ldLCBpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmRleE9mICh4cywgeCkge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmICh4c1tpXSA9PT0geCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCJcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSQlRyZWVcblxudmFyIFJFRCAgID0gMFxudmFyIEJMQUNLID0gMVxuXG5mdW5jdGlvbiBSQk5vZGUoY29sb3IsIGtleSwgdmFsdWUsIGxlZnQsIHJpZ2h0LCBjb3VudCkge1xuICB0aGlzLl9jb2xvciA9IGNvbG9yXG4gIHRoaXMua2V5ID0ga2V5XG4gIHRoaXMudmFsdWUgPSB2YWx1ZVxuICB0aGlzLmxlZnQgPSBsZWZ0XG4gIHRoaXMucmlnaHQgPSByaWdodFxuICB0aGlzLl9jb3VudCA9IGNvdW50XG59XG5cbmZ1bmN0aW9uIGNsb25lTm9kZShub2RlKSB7XG4gIHJldHVybiBuZXcgUkJOb2RlKG5vZGUuX2NvbG9yLCBub2RlLmtleSwgbm9kZS52YWx1ZSwgbm9kZS5sZWZ0LCBub2RlLnJpZ2h0LCBub2RlLl9jb3VudClcbn1cblxuZnVuY3Rpb24gcmVwYWludChjb2xvciwgbm9kZSkge1xuICByZXR1cm4gbmV3IFJCTm9kZShjb2xvciwgbm9kZS5rZXksIG5vZGUudmFsdWUsIG5vZGUubGVmdCwgbm9kZS5yaWdodCwgbm9kZS5fY291bnQpXG59XG5cbmZ1bmN0aW9uIHJlY291bnQobm9kZSkge1xuICBub2RlLl9jb3VudCA9IDEgKyAobm9kZS5sZWZ0ID8gbm9kZS5sZWZ0Ll9jb3VudCA6IDApICsgKG5vZGUucmlnaHQgPyBub2RlLnJpZ2h0Ll9jb3VudCA6IDApXG59XG5cbmZ1bmN0aW9uIFJlZEJsYWNrVHJlZShjb21wYXJlLCByb290KSB7XG4gIHRoaXMuX2NvbXBhcmUgPSBjb21wYXJlXG4gIHRoaXMucm9vdCA9IHJvb3Rcbn1cblxudmFyIHByb3RvID0gUmVkQmxhY2tUcmVlLnByb3RvdHlwZVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIFwia2V5c1wiLCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdXG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGssdikge1xuICAgICAgcmVzdWx0LnB1c2goaylcbiAgICB9KVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCBcInZhbHVlc1wiLCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdXG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGssdikge1xuICAgICAgcmVzdWx0LnB1c2godilcbiAgICB9KVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufSlcblxuLy9SZXR1cm5zIHRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gdGhlIHRyZWVcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgXCJsZW5ndGhcIiwge1xuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmKHRoaXMucm9vdCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdC5fY291bnRcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfVxufSlcblxuLy9JbnNlcnQgYSBuZXcgaXRlbSBpbnRvIHRoZSB0cmVlXG5wcm90by5pbnNlcnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gIHZhciBjbXAgPSB0aGlzLl9jb21wYXJlXG4gIC8vRmluZCBwb2ludCB0byBpbnNlcnQgbmV3IG5vZGUgYXRcbiAgdmFyIG4gPSB0aGlzLnJvb3RcbiAgdmFyIG5fc3RhY2sgPSBbXVxuICB2YXIgZF9zdGFjayA9IFtdXG4gIHdoaWxlKG4pIHtcbiAgICB2YXIgZCA9IGNtcChrZXksIG4ua2V5KVxuICAgIG5fc3RhY2sucHVzaChuKVxuICAgIGRfc3RhY2sucHVzaChkKVxuICAgIGlmKGQgPD0gMCkge1xuICAgICAgbiA9IG4ubGVmdFxuICAgIH0gZWxzZSB7XG4gICAgICBuID0gbi5yaWdodFxuICAgIH1cbiAgfVxuICAvL1JlYnVpbGQgcGF0aCB0byBsZWFmIG5vZGVcbiAgbl9zdGFjay5wdXNoKG5ldyBSQk5vZGUoUkVELCBrZXksIHZhbHVlLCBudWxsLCBudWxsLCAxKSlcbiAgZm9yKHZhciBzPW5fc3RhY2subGVuZ3RoLTI7IHM+PTA7IC0tcykge1xuICAgIHZhciBuID0gbl9zdGFja1tzXVxuICAgIGlmKGRfc3RhY2tbc10gPD0gMCkge1xuICAgICAgbl9zdGFja1tzXSA9IG5ldyBSQk5vZGUobi5fY29sb3IsIG4ua2V5LCBuLnZhbHVlLCBuX3N0YWNrW3MrMV0sIG4ucmlnaHQsIG4uX2NvdW50KzEpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5fc3RhY2tbc10gPSBuZXcgUkJOb2RlKG4uX2NvbG9yLCBuLmtleSwgbi52YWx1ZSwgbi5sZWZ0LCBuX3N0YWNrW3MrMV0sIG4uX2NvdW50KzEpXG4gICAgfVxuICB9XG4gIC8vUmViYWxhbmNlIHRyZWUgdXNpbmcgcm90YXRpb25zXG4gIC8vY29uc29sZS5sb2coXCJzdGFydCBpbnNlcnRcIiwga2V5LCBkX3N0YWNrKVxuICBmb3IodmFyIHM9bl9zdGFjay5sZW5ndGgtMTsgcz4xOyAtLXMpIHtcbiAgICB2YXIgcCA9IG5fc3RhY2tbcy0xXVxuICAgIHZhciBuID0gbl9zdGFja1tzXVxuICAgIGlmKHAuX2NvbG9yID09PSBCTEFDSyB8fCBuLl9jb2xvciA9PT0gQkxBQ0spIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIHZhciBwcCA9IG5fc3RhY2tbcy0yXVxuICAgIGlmKHBwLmxlZnQgPT09IHApIHtcbiAgICAgIGlmKHAubGVmdCA9PT0gbikge1xuICAgICAgICB2YXIgeSA9IHBwLnJpZ2h0XG4gICAgICAgIGlmKHkgJiYgeS5fY29sb3IgPT09IFJFRCkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJMTHJcIilcbiAgICAgICAgICBwLl9jb2xvciA9IEJMQUNLXG4gICAgICAgICAgcHAucmlnaHQgPSByZXBhaW50KEJMQUNLLCB5KVxuICAgICAgICAgIHBwLl9jb2xvciA9IFJFRFxuICAgICAgICAgIHMgLT0gMVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJMTGJcIilcbiAgICAgICAgICBwcC5fY29sb3IgPSBSRURcbiAgICAgICAgICBwcC5sZWZ0ID0gcC5yaWdodFxuICAgICAgICAgIHAuX2NvbG9yID0gQkxBQ0tcbiAgICAgICAgICBwLnJpZ2h0ID0gcHBcbiAgICAgICAgICBuX3N0YWNrW3MtMl0gPSBwXG4gICAgICAgICAgbl9zdGFja1tzLTFdID0gblxuICAgICAgICAgIHJlY291bnQocHApXG4gICAgICAgICAgcmVjb3VudChwKVxuICAgICAgICAgIGlmKHMgPj0gMykge1xuICAgICAgICAgICAgdmFyIHBwcCA9IG5fc3RhY2tbcy0zXVxuICAgICAgICAgICAgaWYocHBwLmxlZnQgPT09IHBwKSB7XG4gICAgICAgICAgICAgIHBwcC5sZWZ0ID0gcFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHBwLnJpZ2h0ID0gcFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgeSA9IHBwLnJpZ2h0XG4gICAgICAgIGlmKHkgJiYgeS5fY29sb3IgPT09IFJFRCkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJMUnJcIilcbiAgICAgICAgICBwLl9jb2xvciA9IEJMQUNLXG4gICAgICAgICAgcHAucmlnaHQgPSByZXBhaW50KEJMQUNLLCB5KVxuICAgICAgICAgIHBwLl9jb2xvciA9IFJFRFxuICAgICAgICAgIHMgLT0gMVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJMUmJcIilcbiAgICAgICAgICBwLnJpZ2h0ID0gbi5sZWZ0XG4gICAgICAgICAgcHAuX2NvbG9yID0gUkVEXG4gICAgICAgICAgcHAubGVmdCA9IG4ucmlnaHRcbiAgICAgICAgICBuLl9jb2xvciA9IEJMQUNLXG4gICAgICAgICAgbi5sZWZ0ID0gcFxuICAgICAgICAgIG4ucmlnaHQgPSBwcFxuICAgICAgICAgIG5fc3RhY2tbcy0yXSA9IG5cbiAgICAgICAgICBuX3N0YWNrW3MtMV0gPSBwXG4gICAgICAgICAgcmVjb3VudChwcClcbiAgICAgICAgICByZWNvdW50KHApXG4gICAgICAgICAgcmVjb3VudChuKVxuICAgICAgICAgIGlmKHMgPj0gMykge1xuICAgICAgICAgICAgdmFyIHBwcCA9IG5fc3RhY2tbcy0zXVxuICAgICAgICAgICAgaWYocHBwLmxlZnQgPT09IHBwKSB7XG4gICAgICAgICAgICAgIHBwcC5sZWZ0ID0gblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHBwLnJpZ2h0ID0gblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKHAucmlnaHQgPT09IG4pIHtcbiAgICAgICAgdmFyIHkgPSBwcC5sZWZ0XG4gICAgICAgIGlmKHkgJiYgeS5fY29sb3IgPT09IFJFRCkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJSUnJcIiwgeS5rZXkpXG4gICAgICAgICAgcC5fY29sb3IgPSBCTEFDS1xuICAgICAgICAgIHBwLmxlZnQgPSByZXBhaW50KEJMQUNLLCB5KVxuICAgICAgICAgIHBwLl9jb2xvciA9IFJFRFxuICAgICAgICAgIHMgLT0gMVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJSUmJcIilcbiAgICAgICAgICBwcC5fY29sb3IgPSBSRURcbiAgICAgICAgICBwcC5yaWdodCA9IHAubGVmdFxuICAgICAgICAgIHAuX2NvbG9yID0gQkxBQ0tcbiAgICAgICAgICBwLmxlZnQgPSBwcFxuICAgICAgICAgIG5fc3RhY2tbcy0yXSA9IHBcbiAgICAgICAgICBuX3N0YWNrW3MtMV0gPSBuXG4gICAgICAgICAgcmVjb3VudChwcClcbiAgICAgICAgICByZWNvdW50KHApXG4gICAgICAgICAgaWYocyA+PSAzKSB7XG4gICAgICAgICAgICB2YXIgcHBwID0gbl9zdGFja1tzLTNdXG4gICAgICAgICAgICBpZihwcHAucmlnaHQgPT09IHBwKSB7XG4gICAgICAgICAgICAgIHBwcC5yaWdodCA9IHBcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBwcC5sZWZ0ID0gcFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgeSA9IHBwLmxlZnRcbiAgICAgICAgaWYoeSAmJiB5Ll9jb2xvciA9PT0gUkVEKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlJMclwiKVxuICAgICAgICAgIHAuX2NvbG9yID0gQkxBQ0tcbiAgICAgICAgICBwcC5sZWZ0ID0gcmVwYWludChCTEFDSywgeSlcbiAgICAgICAgICBwcC5fY29sb3IgPSBSRURcbiAgICAgICAgICBzIC09IDFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiUkxiXCIpXG4gICAgICAgICAgcC5sZWZ0ID0gbi5yaWdodFxuICAgICAgICAgIHBwLl9jb2xvciA9IFJFRFxuICAgICAgICAgIHBwLnJpZ2h0ID0gbi5sZWZ0XG4gICAgICAgICAgbi5fY29sb3IgPSBCTEFDS1xuICAgICAgICAgIG4ucmlnaHQgPSBwXG4gICAgICAgICAgbi5sZWZ0ID0gcHBcbiAgICAgICAgICBuX3N0YWNrW3MtMl0gPSBuXG4gICAgICAgICAgbl9zdGFja1tzLTFdID0gcFxuICAgICAgICAgIHJlY291bnQocHApXG4gICAgICAgICAgcmVjb3VudChwKVxuICAgICAgICAgIHJlY291bnQobilcbiAgICAgICAgICBpZihzID49IDMpIHtcbiAgICAgICAgICAgIHZhciBwcHAgPSBuX3N0YWNrW3MtM11cbiAgICAgICAgICAgIGlmKHBwcC5yaWdodCA9PT0gcHApIHtcbiAgICAgICAgICAgICAgcHBwLnJpZ2h0ID0gblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHBwLmxlZnQgPSBuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy9SZXR1cm4gbmV3IHRyZWVcbiAgbl9zdGFja1swXS5fY29sb3IgPSBCTEFDS1xuICByZXR1cm4gbmV3IFJlZEJsYWNrVHJlZShjbXAsIG5fc3RhY2tbMF0pXG59XG5cblxuLy9WaXNpdCBhbGwgbm9kZXMgaW5vcmRlclxuZnVuY3Rpb24gZG9WaXNpdEZ1bGwodmlzaXQsIG5vZGUpIHtcbiAgaWYobm9kZS5sZWZ0KSB7XG4gICAgdmFyIHYgPSBkb1Zpc2l0RnVsbCh2aXNpdCwgbm9kZS5sZWZ0KVxuICAgIGlmKHYpIHsgcmV0dXJuIHYgfVxuICB9XG4gIHZhciB2ID0gdmlzaXQobm9kZS5rZXksIG5vZGUudmFsdWUpXG4gIGlmKHYpIHsgcmV0dXJuIHYgfVxuICBpZihub2RlLnJpZ2h0KSB7XG4gICAgcmV0dXJuIGRvVmlzaXRGdWxsKHZpc2l0LCBub2RlLnJpZ2h0KVxuICB9XG59XG5cbi8vVmlzaXQgaGFsZiBub2RlcyBpbiBvcmRlclxuZnVuY3Rpb24gZG9WaXNpdEhhbGYobG8sIGNvbXBhcmUsIHZpc2l0LCBub2RlKSB7XG4gIHZhciBsID0gY29tcGFyZShsbywgbm9kZS5rZXkpXG4gIGlmKGwgPD0gMCkge1xuICAgIGlmKG5vZGUubGVmdCkge1xuICAgICAgdmFyIHYgPSBkb1Zpc2l0SGFsZihsbywgY29tcGFyZSwgdmlzaXQsIG5vZGUubGVmdClcbiAgICAgIGlmKHYpIHsgcmV0dXJuIHYgfVxuICAgIH1cbiAgICB2YXIgdiA9IHZpc2l0KG5vZGUua2V5LCBub2RlLnZhbHVlKVxuICAgIGlmKHYpIHsgcmV0dXJuIHYgfVxuICB9XG4gIGlmKG5vZGUucmlnaHQpIHtcbiAgICByZXR1cm4gZG9WaXNpdEhhbGYobG8sIGNvbXBhcmUsIHZpc2l0LCBub2RlLnJpZ2h0KVxuICB9XG59XG5cbi8vVmlzaXQgYWxsIG5vZGVzIHdpdGhpbiBhIHJhbmdlXG5mdW5jdGlvbiBkb1Zpc2l0KGxvLCBoaSwgY29tcGFyZSwgdmlzaXQsIG5vZGUpIHtcbiAgdmFyIGwgPSBjb21wYXJlKGxvLCBub2RlLmtleSlcbiAgdmFyIGggPSBjb21wYXJlKGhpLCBub2RlLmtleSlcbiAgdmFyIHZcbiAgaWYobCA8PSAwKSB7XG4gICAgaWYobm9kZS5sZWZ0KSB7XG4gICAgICB2ID0gZG9WaXNpdChsbywgaGksIGNvbXBhcmUsIHZpc2l0LCBub2RlLmxlZnQpXG4gICAgICBpZih2KSB7IHJldHVybiB2IH1cbiAgICB9XG4gICAgaWYoaCA+IDApIHtcbiAgICAgIHYgPSB2aXNpdChub2RlLmtleSwgbm9kZS52YWx1ZSlcbiAgICAgIGlmKHYpIHsgcmV0dXJuIHYgfVxuICAgIH1cbiAgfVxuICBpZihoID4gMCAmJiBub2RlLnJpZ2h0KSB7XG4gICAgcmV0dXJuIGRvVmlzaXQobG8sIGhpLCBjb21wYXJlLCB2aXNpdCwgbm9kZS5yaWdodClcbiAgfVxufVxuXG5cbnByb3RvLmZvckVhY2ggPSBmdW5jdGlvbiByYlRyZWVGb3JFYWNoKHZpc2l0LCBsbywgaGkpIHtcbiAgaWYoIXRoaXMucm9vdCkge1xuICAgIHJldHVyblxuICB9XG4gIHN3aXRjaChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGRvVmlzaXRGdWxsKHZpc2l0LCB0aGlzLnJvb3QpXG4gICAgYnJlYWtcblxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBkb1Zpc2l0SGFsZihsbywgdGhpcy5fY29tcGFyZSwgdmlzaXQsIHRoaXMucm9vdClcbiAgICBicmVha1xuXG4gICAgY2FzZSAzOlxuICAgICAgaWYodGhpcy5fY29tcGFyZShsbywgaGkpID49IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICByZXR1cm4gZG9WaXNpdChsbywgaGksIHRoaXMuX2NvbXBhcmUsIHZpc2l0LCB0aGlzLnJvb3QpXG4gICAgYnJlYWtcbiAgfVxufVxuXG4vL0ZpcnN0IGl0ZW0gaW4gbGlzdFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCBcImJlZ2luXCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhY2sgPSBbXVxuICAgIHZhciBuID0gdGhpcy5yb290XG4gICAgd2hpbGUobikge1xuICAgICAgc3RhY2sucHVzaChuKVxuICAgICAgbiA9IG4ubGVmdFxuICAgIH1cbiAgICByZXR1cm4gbmV3IFJlZEJsYWNrVHJlZUl0ZXJhdG9yKHRoaXMsIHN0YWNrKVxuICB9XG59KVxuXG4vL0xhc3QgaXRlbSBpbiBsaXN0XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIFwiZW5kXCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhY2sgPSBbXVxuICAgIHZhciBuID0gdGhpcy5yb290XG4gICAgd2hpbGUobikge1xuICAgICAgc3RhY2sucHVzaChuKVxuICAgICAgbiA9IG4ucmlnaHRcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSZWRCbGFja1RyZWVJdGVyYXRvcih0aGlzLCBzdGFjaylcbiAgfVxufSlcblxuLy9GaW5kIHRoZSBpdGggaXRlbSBpbiB0aGUgdHJlZVxucHJvdG8uYXQgPSBmdW5jdGlvbihpZHgpIHtcbiAgaWYoaWR4IDwgMCkge1xuICAgIHJldHVybiBuZXcgUmVkQmxhY2tUcmVlSXRlcmF0b3IodGhpcywgW10pXG4gIH1cbiAgdmFyIG4gPSB0aGlzLnJvb3RcbiAgdmFyIHN0YWNrID0gW11cbiAgd2hpbGUodHJ1ZSkge1xuICAgIHN0YWNrLnB1c2gobilcbiAgICBpZihuLmxlZnQpIHtcbiAgICAgIGlmKGlkeCA8IG4ubGVmdC5fY291bnQpIHtcbiAgICAgICAgbiA9IG4ubGVmdFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWR4IC09IG4ubGVmdC5fY291bnRcbiAgICB9XG4gICAgaWYoIWlkeCkge1xuICAgICAgcmV0dXJuIG5ldyBSZWRCbGFja1RyZWVJdGVyYXRvcih0aGlzLCBzdGFjaylcbiAgICB9XG4gICAgaWR4IC09IDFcbiAgICBpZihuLnJpZ2h0KSB7XG4gICAgICBpZihpZHggPj0gbi5yaWdodC5fY291bnQpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIG4gPSBuLnJpZ2h0XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgUmVkQmxhY2tUcmVlSXRlcmF0b3IodGhpcywgW10pXG59XG5cbnByb3RvLmdlID0gZnVuY3Rpb24oa2V5KSB7XG4gIHZhciBjbXAgPSB0aGlzLl9jb21wYXJlXG4gIHZhciBuID0gdGhpcy5yb290XG4gIHZhciBzdGFjayA9IFtdXG4gIHZhciBsYXN0X3B0ciA9IDBcbiAgd2hpbGUobikge1xuICAgIHZhciBkID0gY21wKGtleSwgbi5rZXkpXG4gICAgc3RhY2sucHVzaChuKVxuICAgIGlmKGQgPD0gMCkge1xuICAgICAgbGFzdF9wdHIgPSBzdGFjay5sZW5ndGhcbiAgICB9XG4gICAgaWYoZCA8PSAwKSB7XG4gICAgICBuID0gbi5sZWZ0XG4gICAgfSBlbHNlIHtcbiAgICAgIG4gPSBuLnJpZ2h0XG4gICAgfVxuICB9XG4gIHN0YWNrLmxlbmd0aCA9IGxhc3RfcHRyXG4gIHJldHVybiBuZXcgUmVkQmxhY2tUcmVlSXRlcmF0b3IodGhpcywgc3RhY2spXG59XG5cbnByb3RvLmd0ID0gZnVuY3Rpb24oa2V5KSB7XG4gIHZhciBjbXAgPSB0aGlzLl9jb21wYXJlXG4gIHZhciBuID0gdGhpcy5yb290XG4gIHZhciBzdGFjayA9IFtdXG4gIHZhciBsYXN0X3B0ciA9IDBcbiAgd2hpbGUobikge1xuICAgIHZhciBkID0gY21wKGtleSwgbi5rZXkpXG4gICAgc3RhY2sucHVzaChuKVxuICAgIGlmKGQgPCAwKSB7XG4gICAgICBsYXN0X3B0ciA9IHN0YWNrLmxlbmd0aFxuICAgIH1cbiAgICBpZihkIDwgMCkge1xuICAgICAgbiA9IG4ubGVmdFxuICAgIH0gZWxzZSB7XG4gICAgICBuID0gbi5yaWdodFxuICAgIH1cbiAgfVxuICBzdGFjay5sZW5ndGggPSBsYXN0X3B0clxuICByZXR1cm4gbmV3IFJlZEJsYWNrVHJlZUl0ZXJhdG9yKHRoaXMsIHN0YWNrKVxufVxuXG5wcm90by5sdCA9IGZ1bmN0aW9uKGtleSkge1xuICB2YXIgY21wID0gdGhpcy5fY29tcGFyZVxuICB2YXIgbiA9IHRoaXMucm9vdFxuICB2YXIgc3RhY2sgPSBbXVxuICB2YXIgbGFzdF9wdHIgPSAwXG4gIHdoaWxlKG4pIHtcbiAgICB2YXIgZCA9IGNtcChrZXksIG4ua2V5KVxuICAgIHN0YWNrLnB1c2gobilcbiAgICBpZihkID4gMCkge1xuICAgICAgbGFzdF9wdHIgPSBzdGFjay5sZW5ndGhcbiAgICB9XG4gICAgaWYoZCA8PSAwKSB7XG4gICAgICBuID0gbi5sZWZ0XG4gICAgfSBlbHNlIHtcbiAgICAgIG4gPSBuLnJpZ2h0XG4gICAgfVxuICB9XG4gIHN0YWNrLmxlbmd0aCA9IGxhc3RfcHRyXG4gIHJldHVybiBuZXcgUmVkQmxhY2tUcmVlSXRlcmF0b3IodGhpcywgc3RhY2spXG59XG5cbnByb3RvLmxlID0gZnVuY3Rpb24oa2V5KSB7XG4gIHZhciBjbXAgPSB0aGlzLl9jb21wYXJlXG4gIHZhciBuID0gdGhpcy5yb290XG4gIHZhciBzdGFjayA9IFtdXG4gIHZhciBsYXN0X3B0ciA9IDBcbiAgd2hpbGUobikge1xuICAgIHZhciBkID0gY21wKGtleSwgbi5rZXkpXG4gICAgc3RhY2sucHVzaChuKVxuICAgIGlmKGQgPj0gMCkge1xuICAgICAgbGFzdF9wdHIgPSBzdGFjay5sZW5ndGhcbiAgICB9XG4gICAgaWYoZCA8IDApIHtcbiAgICAgIG4gPSBuLmxlZnRcbiAgICB9IGVsc2Uge1xuICAgICAgbiA9IG4ucmlnaHRcbiAgICB9XG4gIH1cbiAgc3RhY2subGVuZ3RoID0gbGFzdF9wdHJcbiAgcmV0dXJuIG5ldyBSZWRCbGFja1RyZWVJdGVyYXRvcih0aGlzLCBzdGFjaylcbn1cblxuLy9GaW5kcyB0aGUgaXRlbSB3aXRoIGtleSBpZiBpdCBleGlzdHNcbnByb3RvLmZpbmQgPSBmdW5jdGlvbihrZXkpIHtcbiAgdmFyIGNtcCA9IHRoaXMuX2NvbXBhcmVcbiAgdmFyIG4gPSB0aGlzLnJvb3RcbiAgdmFyIHN0YWNrID0gW11cbiAgd2hpbGUobikge1xuICAgIHZhciBkID0gY21wKGtleSwgbi5rZXkpXG4gICAgc3RhY2sucHVzaChuKVxuICAgIGlmKGQgPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgUmVkQmxhY2tUcmVlSXRlcmF0b3IodGhpcywgc3RhY2spXG4gICAgfVxuICAgIGlmKGQgPD0gMCkge1xuICAgICAgbiA9IG4ubGVmdFxuICAgIH0gZWxzZSB7XG4gICAgICBuID0gbi5yaWdodFxuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IFJlZEJsYWNrVHJlZUl0ZXJhdG9yKHRoaXMsIFtdKVxufVxuXG4vL1JlbW92ZXMgaXRlbSB3aXRoIGtleSBmcm9tIHRyZWVcbnByb3RvLnJlbW92ZSA9IGZ1bmN0aW9uKGtleSkge1xuICB2YXIgaXRlciA9IHRoaXMuZmluZChrZXkpXG4gIGlmKGl0ZXIpIHtcbiAgICByZXR1cm4gaXRlci5yZW1vdmUoKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbi8vUmV0dXJucyB0aGUgaXRlbSBhdCBga2V5YFxucHJvdG8uZ2V0ID0gZnVuY3Rpb24oa2V5KSB7XG4gIHZhciBjbXAgPSB0aGlzLl9jb21wYXJlXG4gIHZhciBuID0gdGhpcy5yb290XG4gIHdoaWxlKG4pIHtcbiAgICB2YXIgZCA9IGNtcChrZXksIG4ua2V5KVxuICAgIGlmKGQgPT09IDApIHtcbiAgICAgIHJldHVybiBuLnZhbHVlXG4gICAgfVxuICAgIGlmKGQgPD0gMCkge1xuICAgICAgbiA9IG4ubGVmdFxuICAgIH0gZWxzZSB7XG4gICAgICBuID0gbi5yaWdodFxuICAgIH1cbiAgfVxuICByZXR1cm5cbn1cblxuLy9JdGVyYXRvciBmb3IgcmVkIGJsYWNrIHRyZWVcbmZ1bmN0aW9uIFJlZEJsYWNrVHJlZUl0ZXJhdG9yKHRyZWUsIHN0YWNrKSB7XG4gIHRoaXMudHJlZSA9IHRyZWVcbiAgdGhpcy5fc3RhY2sgPSBzdGFja1xufVxuXG52YXIgaXByb3RvID0gUmVkQmxhY2tUcmVlSXRlcmF0b3IucHJvdG90eXBlXG5cbi8vVGVzdCBpZiBpdGVyYXRvciBpcyB2YWxpZFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGlwcm90bywgXCJ2YWxpZFwiLCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aCA+IDBcbiAgfVxufSlcblxuLy9Ob2RlIG9mIHRoZSBpdGVyYXRvclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGlwcm90bywgXCJub2RlXCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICBpZih0aGlzLl9zdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWVcbn0pXG5cbi8vTWFrZXMgYSBjb3B5IG9mIGFuIGl0ZXJhdG9yXG5pcHJvdG8uY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZWRCbGFja1RyZWVJdGVyYXRvcih0aGlzLnRyZWUsIHRoaXMuX3N0YWNrLnNsaWNlKCkpXG59XG5cbi8vU3dhcHMgdHdvIG5vZGVzXG5mdW5jdGlvbiBzd2FwTm9kZShuLCB2KSB7XG4gIG4ua2V5ID0gdi5rZXlcbiAgbi52YWx1ZSA9IHYudmFsdWVcbiAgbi5sZWZ0ID0gdi5sZWZ0XG4gIG4ucmlnaHQgPSB2LnJpZ2h0XG4gIG4uX2NvbG9yID0gdi5fY29sb3JcbiAgbi5fY291bnQgPSB2Ll9jb3VudFxufVxuXG4vL0ZpeCB1cCBhIGRvdWJsZSBibGFjayBub2RlIGluIGEgdHJlZVxuZnVuY3Rpb24gZml4RG91YmxlQmxhY2soc3RhY2spIHtcbiAgdmFyIG4sIHAsIHMsIHpcbiAgZm9yKHZhciBpPXN0YWNrLmxlbmd0aC0xOyBpPj0wOyAtLWkpIHtcbiAgICBuID0gc3RhY2tbaV1cbiAgICBpZihpID09PSAwKSB7XG4gICAgICBuLl9jb2xvciA9IEJMQUNLXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgLy9jb25zb2xlLmxvZyhcInZpc2l0IG5vZGU6XCIsIG4ua2V5LCBpLCBzdGFja1tpXS5rZXksIHN0YWNrW2ktMV0ua2V5KVxuICAgIHAgPSBzdGFja1tpLTFdXG4gICAgaWYocC5sZWZ0ID09PSBuKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKFwibGVmdCBjaGlsZFwiKVxuICAgICAgcyA9IHAucmlnaHRcbiAgICAgIGlmKHMucmlnaHQgJiYgcy5yaWdodC5fY29sb3IgPT09IFJFRCkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiY2FzZSAxOiByaWdodCBzaWJsaW5nIGNoaWxkIHJlZFwiKVxuICAgICAgICBzID0gcC5yaWdodCA9IGNsb25lTm9kZShzKVxuICAgICAgICB6ID0gcy5yaWdodCA9IGNsb25lTm9kZShzLnJpZ2h0KVxuICAgICAgICBwLnJpZ2h0ID0gcy5sZWZ0XG4gICAgICAgIHMubGVmdCA9IHBcbiAgICAgICAgcy5yaWdodCA9IHpcbiAgICAgICAgcy5fY29sb3IgPSBwLl9jb2xvclxuICAgICAgICBuLl9jb2xvciA9IEJMQUNLXG4gICAgICAgIHAuX2NvbG9yID0gQkxBQ0tcbiAgICAgICAgei5fY29sb3IgPSBCTEFDS1xuICAgICAgICByZWNvdW50KHApXG4gICAgICAgIHJlY291bnQocylcbiAgICAgICAgaWYoaSA+IDEpIHtcbiAgICAgICAgICB2YXIgcHAgPSBzdGFja1tpLTJdXG4gICAgICAgICAgaWYocHAubGVmdCA9PT0gcCkge1xuICAgICAgICAgICAgcHAubGVmdCA9IHNcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHAucmlnaHQgPSBzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YWNrW2ktMV0gPSBzXG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIGlmKHMubGVmdCAmJiBzLmxlZnQuX2NvbG9yID09PSBSRUQpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcImNhc2UgMTogbGVmdCBzaWJsaW5nIGNoaWxkIHJlZFwiKVxuICAgICAgICBzID0gcC5yaWdodCA9IGNsb25lTm9kZShzKVxuICAgICAgICB6ID0gcy5sZWZ0ID0gY2xvbmVOb2RlKHMubGVmdClcbiAgICAgICAgcC5yaWdodCA9IHoubGVmdFxuICAgICAgICBzLmxlZnQgPSB6LnJpZ2h0XG4gICAgICAgIHoubGVmdCA9IHBcbiAgICAgICAgei5yaWdodCA9IHNcbiAgICAgICAgei5fY29sb3IgPSBwLl9jb2xvclxuICAgICAgICBwLl9jb2xvciA9IEJMQUNLXG4gICAgICAgIHMuX2NvbG9yID0gQkxBQ0tcbiAgICAgICAgbi5fY29sb3IgPSBCTEFDS1xuICAgICAgICByZWNvdW50KHApXG4gICAgICAgIHJlY291bnQocylcbiAgICAgICAgcmVjb3VudCh6KVxuICAgICAgICBpZihpID4gMSkge1xuICAgICAgICAgIHZhciBwcCA9IHN0YWNrW2ktMl1cbiAgICAgICAgICBpZihwcC5sZWZ0ID09PSBwKSB7XG4gICAgICAgICAgICBwcC5sZWZ0ID0gelxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcC5yaWdodCA9IHpcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhY2tbaS0xXSA9IHpcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZihzLl9jb2xvciA9PT0gQkxBQ0spIHtcbiAgICAgICAgaWYocC5fY29sb3IgPT09IFJFRCkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJjYXNlIDI6IGJsYWNrIHNpYmxpbmcsIHJlZCBwYXJlbnRcIiwgcC5yaWdodC52YWx1ZSlcbiAgICAgICAgICBwLl9jb2xvciA9IEJMQUNLXG4gICAgICAgICAgcC5yaWdodCA9IHJlcGFpbnQoUkVELCBzKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJjYXNlIDI6IGJsYWNrIHNpYmxpbmcsIGJsYWNrIHBhcmVudFwiLCBwLnJpZ2h0LnZhbHVlKVxuICAgICAgICAgIHAucmlnaHQgPSByZXBhaW50KFJFRCwgcylcbiAgICAgICAgICBjb250aW51ZSAgXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJjYXNlIDM6IHJlZCBzaWJsaW5nXCIpXG4gICAgICAgIHMgPSBjbG9uZU5vZGUocylcbiAgICAgICAgcC5yaWdodCA9IHMubGVmdFxuICAgICAgICBzLmxlZnQgPSBwXG4gICAgICAgIHMuX2NvbG9yID0gcC5fY29sb3JcbiAgICAgICAgcC5fY29sb3IgPSBSRURcbiAgICAgICAgcmVjb3VudChwKVxuICAgICAgICByZWNvdW50KHMpXG4gICAgICAgIGlmKGkgPiAxKSB7XG4gICAgICAgICAgdmFyIHBwID0gc3RhY2tbaS0yXVxuICAgICAgICAgIGlmKHBwLmxlZnQgPT09IHApIHtcbiAgICAgICAgICAgIHBwLmxlZnQgPSBzXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBwLnJpZ2h0ID0gc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGFja1tpLTFdID0gc1xuICAgICAgICBzdGFja1tpXSA9IHBcbiAgICAgICAgaWYoaSsxIDwgc3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgc3RhY2tbaSsxXSA9IG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFjay5wdXNoKG4pXG4gICAgICAgIH1cbiAgICAgICAgaSA9IGkrMlxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvL2NvbnNvbGUubG9nKFwicmlnaHQgY2hpbGRcIilcbiAgICAgIHMgPSBwLmxlZnRcbiAgICAgIGlmKHMubGVmdCAmJiBzLmxlZnQuX2NvbG9yID09PSBSRUQpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcImNhc2UgMTogbGVmdCBzaWJsaW5nIGNoaWxkIHJlZFwiLCBwLnZhbHVlLCBwLl9jb2xvcilcbiAgICAgICAgcyA9IHAubGVmdCA9IGNsb25lTm9kZShzKVxuICAgICAgICB6ID0gcy5sZWZ0ID0gY2xvbmVOb2RlKHMubGVmdClcbiAgICAgICAgcC5sZWZ0ID0gcy5yaWdodFxuICAgICAgICBzLnJpZ2h0ID0gcFxuICAgICAgICBzLmxlZnQgPSB6XG4gICAgICAgIHMuX2NvbG9yID0gcC5fY29sb3JcbiAgICAgICAgbi5fY29sb3IgPSBCTEFDS1xuICAgICAgICBwLl9jb2xvciA9IEJMQUNLXG4gICAgICAgIHouX2NvbG9yID0gQkxBQ0tcbiAgICAgICAgcmVjb3VudChwKVxuICAgICAgICByZWNvdW50KHMpXG4gICAgICAgIGlmKGkgPiAxKSB7XG4gICAgICAgICAgdmFyIHBwID0gc3RhY2tbaS0yXVxuICAgICAgICAgIGlmKHBwLnJpZ2h0ID09PSBwKSB7XG4gICAgICAgICAgICBwcC5yaWdodCA9IHNcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHAubGVmdCA9IHNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhY2tbaS0xXSA9IHNcbiAgICAgICAgcmV0dXJuXG4gICAgICB9IGVsc2UgaWYocy5yaWdodCAmJiBzLnJpZ2h0Ll9jb2xvciA9PT0gUkVEKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJjYXNlIDE6IHJpZ2h0IHNpYmxpbmcgY2hpbGQgcmVkXCIpXG4gICAgICAgIHMgPSBwLmxlZnQgPSBjbG9uZU5vZGUocylcbiAgICAgICAgeiA9IHMucmlnaHQgPSBjbG9uZU5vZGUocy5yaWdodClcbiAgICAgICAgcC5sZWZ0ID0gei5yaWdodFxuICAgICAgICBzLnJpZ2h0ID0gei5sZWZ0XG4gICAgICAgIHoucmlnaHQgPSBwXG4gICAgICAgIHoubGVmdCA9IHNcbiAgICAgICAgei5fY29sb3IgPSBwLl9jb2xvclxuICAgICAgICBwLl9jb2xvciA9IEJMQUNLXG4gICAgICAgIHMuX2NvbG9yID0gQkxBQ0tcbiAgICAgICAgbi5fY29sb3IgPSBCTEFDS1xuICAgICAgICByZWNvdW50KHApXG4gICAgICAgIHJlY291bnQocylcbiAgICAgICAgcmVjb3VudCh6KVxuICAgICAgICBpZihpID4gMSkge1xuICAgICAgICAgIHZhciBwcCA9IHN0YWNrW2ktMl1cbiAgICAgICAgICBpZihwcC5yaWdodCA9PT0gcCkge1xuICAgICAgICAgICAgcHAucmlnaHQgPSB6XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBwLmxlZnQgPSB6XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YWNrW2ktMV0gPSB6XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYocy5fY29sb3IgPT09IEJMQUNLKSB7XG4gICAgICAgIGlmKHAuX2NvbG9yID09PSBSRUQpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiY2FzZSAyOiBibGFjayBzaWJsaW5nLCByZWQgcGFyZW50XCIpXG4gICAgICAgICAgcC5fY29sb3IgPSBCTEFDS1xuICAgICAgICAgIHAubGVmdCA9IHJlcGFpbnQoUkVELCBzKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJjYXNlIDI6IGJsYWNrIHNpYmxpbmcsIGJsYWNrIHBhcmVudFwiKVxuICAgICAgICAgIHAubGVmdCA9IHJlcGFpbnQoUkVELCBzKVxuICAgICAgICAgIGNvbnRpbnVlICBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcImNhc2UgMzogcmVkIHNpYmxpbmdcIilcbiAgICAgICAgcyA9IGNsb25lTm9kZShzKVxuICAgICAgICBwLmxlZnQgPSBzLnJpZ2h0XG4gICAgICAgIHMucmlnaHQgPSBwXG4gICAgICAgIHMuX2NvbG9yID0gcC5fY29sb3JcbiAgICAgICAgcC5fY29sb3IgPSBSRURcbiAgICAgICAgcmVjb3VudChwKVxuICAgICAgICByZWNvdW50KHMpXG4gICAgICAgIGlmKGkgPiAxKSB7XG4gICAgICAgICAgdmFyIHBwID0gc3RhY2tbaS0yXVxuICAgICAgICAgIGlmKHBwLnJpZ2h0ID09PSBwKSB7XG4gICAgICAgICAgICBwcC5yaWdodCA9IHNcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHAubGVmdCA9IHNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhY2tbaS0xXSA9IHNcbiAgICAgICAgc3RhY2tbaV0gPSBwXG4gICAgICAgIGlmKGkrMSA8IHN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgIHN0YWNrW2krMV0gPSBuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhY2sucHVzaChuKVxuICAgICAgICB9XG4gICAgICAgIGkgPSBpKzJcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy9SZW1vdmVzIGl0ZW0gYXQgaXRlcmF0b3IgZnJvbSB0cmVlXG5pcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdGFjayA9IHRoaXMuX3N0YWNrXG4gIGlmKHN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0aGlzLnRyZWVcbiAgfVxuICAvL0ZpcnN0IGNvcHkgcGF0aCB0byBub2RlXG4gIHZhciBjc3RhY2sgPSBuZXcgQXJyYXkoc3RhY2subGVuZ3RoKVxuICB2YXIgbiA9IHN0YWNrW3N0YWNrLmxlbmd0aC0xXVxuICBjc3RhY2tbY3N0YWNrLmxlbmd0aC0xXSA9IG5ldyBSQk5vZGUobi5fY29sb3IsIG4ua2V5LCBuLnZhbHVlLCBuLmxlZnQsIG4ucmlnaHQsIG4uX2NvdW50KVxuICBmb3IodmFyIGk9c3RhY2subGVuZ3RoLTI7IGk+PTA7IC0taSkge1xuICAgIHZhciBuID0gc3RhY2tbaV1cbiAgICBpZihuLmxlZnQgPT09IHN0YWNrW2krMV0pIHtcbiAgICAgIGNzdGFja1tpXSA9IG5ldyBSQk5vZGUobi5fY29sb3IsIG4ua2V5LCBuLnZhbHVlLCBjc3RhY2tbaSsxXSwgbi5yaWdodCwgbi5fY291bnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNzdGFja1tpXSA9IG5ldyBSQk5vZGUobi5fY29sb3IsIG4ua2V5LCBuLnZhbHVlLCBuLmxlZnQsIGNzdGFja1tpKzFdLCBuLl9jb3VudClcbiAgICB9XG4gIH1cblxuICAvL0dldCBub2RlXG4gIG4gPSBjc3RhY2tbY3N0YWNrLmxlbmd0aC0xXVxuICAvL2NvbnNvbGUubG9nKFwic3RhcnQgcmVtb3ZlOiBcIiwgbi52YWx1ZSlcblxuICAvL0lmIG5vdCBsZWFmLCB0aGVuIHN3YXAgd2l0aCBwcmV2aW91cyBub2RlXG4gIGlmKG4ubGVmdCAmJiBuLnJpZ2h0KSB7XG4gICAgLy9jb25zb2xlLmxvZyhcIm1vdmluZyB0byBsZWFmXCIpXG5cbiAgICAvL0ZpcnN0IHdhbGsgdG8gcHJldmlvdXMgbGVhZlxuICAgIHZhciBzcGxpdCA9IGNzdGFjay5sZW5ndGhcbiAgICBuID0gbi5sZWZ0XG4gICAgd2hpbGUobi5yaWdodCkge1xuICAgICAgY3N0YWNrLnB1c2gobilcbiAgICAgIG4gPSBuLnJpZ2h0XG4gICAgfVxuICAgIC8vQ29weSBwYXRoIHRvIGxlYWZcbiAgICB2YXIgdiA9IGNzdGFja1tzcGxpdC0xXVxuICAgIGNzdGFjay5wdXNoKG5ldyBSQk5vZGUobi5fY29sb3IsIHYua2V5LCB2LnZhbHVlLCBuLmxlZnQsIG4ucmlnaHQsIG4uX2NvdW50KSlcbiAgICBjc3RhY2tbc3BsaXQtMV0ua2V5ID0gbi5rZXlcbiAgICBjc3RhY2tbc3BsaXQtMV0udmFsdWUgPSBuLnZhbHVlXG5cbiAgICAvL0ZpeCB1cCBzdGFja1xuICAgIGZvcih2YXIgaT1jc3RhY2subGVuZ3RoLTI7IGk+PXNwbGl0OyAtLWkpIHtcbiAgICAgIG4gPSBjc3RhY2tbaV1cbiAgICAgIGNzdGFja1tpXSA9IG5ldyBSQk5vZGUobi5fY29sb3IsIG4ua2V5LCBuLnZhbHVlLCBuLmxlZnQsIGNzdGFja1tpKzFdLCBuLl9jb3VudClcbiAgICB9XG4gICAgY3N0YWNrW3NwbGl0LTFdLmxlZnQgPSBjc3RhY2tbc3BsaXRdXG4gIH1cbiAgLy9jb25zb2xlLmxvZyhcInN0YWNrPVwiLCBjc3RhY2subWFwKGZ1bmN0aW9uKHYpIHsgcmV0dXJuIHYudmFsdWUgfSkpXG5cbiAgLy9SZW1vdmUgbGVhZiBub2RlXG4gIG4gPSBjc3RhY2tbY3N0YWNrLmxlbmd0aC0xXVxuICBpZihuLl9jb2xvciA9PT0gUkVEKSB7XG4gICAgLy9FYXN5IGNhc2U6IHJlbW92aW5nIHJlZCBsZWFmXG4gICAgLy9jb25zb2xlLmxvZyhcIlJFRCBsZWFmXCIpXG4gICAgdmFyIHAgPSBjc3RhY2tbY3N0YWNrLmxlbmd0aC0yXVxuICAgIGlmKHAubGVmdCA9PT0gbikge1xuICAgICAgcC5sZWZ0ID0gbnVsbFxuICAgIH0gZWxzZSBpZihwLnJpZ2h0ID09PSBuKSB7XG4gICAgICBwLnJpZ2h0ID0gbnVsbFxuICAgIH1cbiAgICBjc3RhY2sucG9wKClcbiAgICBmb3IodmFyIGk9MDsgaTxjc3RhY2subGVuZ3RoOyArK2kpIHtcbiAgICAgIGNzdGFja1tpXS5fY291bnQtLVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFJlZEJsYWNrVHJlZSh0aGlzLnRyZWUuX2NvbXBhcmUsIGNzdGFja1swXSlcbiAgfSBlbHNlIHtcbiAgICBpZihuLmxlZnQgfHwgbi5yaWdodCkge1xuICAgICAgLy9TZWNvbmQgZWFzeSBjYXNlOiAgU2luZ2xlIGNoaWxkIGJsYWNrIHBhcmVudFxuICAgICAgLy9jb25zb2xlLmxvZyhcIkJMQUNLIHNpbmdsZSBjaGlsZFwiKVxuICAgICAgaWYobi5sZWZ0KSB7XG4gICAgICAgIHN3YXBOb2RlKG4sIG4ubGVmdClcbiAgICAgIH0gZWxzZSBpZihuLnJpZ2h0KSB7XG4gICAgICAgIHN3YXBOb2RlKG4sIG4ucmlnaHQpXG4gICAgICB9XG4gICAgICAvL0NoaWxkIG11c3QgYmUgcmVkLCBzbyByZXBhaW50IGl0IGJsYWNrIHRvIGJhbGFuY2UgY29sb3JcbiAgICAgIG4uX2NvbG9yID0gQkxBQ0tcbiAgICAgIGZvcih2YXIgaT0wOyBpPGNzdGFjay5sZW5ndGgtMTsgKytpKSB7XG4gICAgICAgIGNzdGFja1tpXS5fY291bnQtLVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBSZWRCbGFja1RyZWUodGhpcy50cmVlLl9jb21wYXJlLCBjc3RhY2tbMF0pXG4gICAgfSBlbHNlIGlmKGNzdGFjay5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vVGhpcmQgZWFzeSBjYXNlOiByb290XG4gICAgICAvL2NvbnNvbGUubG9nKFwiUk9PVFwiKVxuICAgICAgcmV0dXJuIG5ldyBSZWRCbGFja1RyZWUodGhpcy50cmVlLl9jb21wYXJlLCBudWxsKVxuICAgIH0gZWxzZSB7XG4gICAgICAvL0hhcmQgY2FzZTogUmVwYWludCBuLCBhbmQgdGhlbiBkbyBzb21lIG5hc3R5IHN0dWZmXG4gICAgICAvL2NvbnNvbGUubG9nKFwiQkxBQ0sgbGVhZiBubyBjaGlsZHJlblwiKVxuICAgICAgZm9yKHZhciBpPTA7IGk8Y3N0YWNrLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNzdGFja1tpXS5fY291bnQtLVxuICAgICAgfVxuICAgICAgdmFyIHBhcmVudCA9IGNzdGFja1tjc3RhY2subGVuZ3RoLTJdXG4gICAgICBmaXhEb3VibGVCbGFjayhjc3RhY2spXG4gICAgICAvL0ZpeCB1cCBsaW5rc1xuICAgICAgaWYocGFyZW50LmxlZnQgPT09IG4pIHtcbiAgICAgICAgcGFyZW50LmxlZnQgPSBudWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJlbnQucmlnaHQgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgUmVkQmxhY2tUcmVlKHRoaXMudHJlZS5fY29tcGFyZSwgY3N0YWNrWzBdKVxufVxuXG4vL1JldHVybnMga2V5XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoaXByb3RvLCBcImtleVwiLCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgaWYodGhpcy5fc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXS5rZXlcbiAgICB9XG4gICAgcmV0dXJuXG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWVcbn0pXG5cbi8vUmV0dXJucyB2YWx1ZVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGlwcm90bywgXCJ2YWx1ZVwiLCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgaWYodGhpcy5fc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXS52YWx1ZVxuICAgIH1cbiAgICByZXR1cm5cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSlcblxuXG4vL1JldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoaXMgaXRlcmF0b3IgaW4gdGhlIHNvcnRlZCBsaXN0XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoaXByb3RvLCBcImluZGV4XCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaWR4ID0gMFxuICAgIHZhciBzdGFjayA9IHRoaXMuX3N0YWNrXG4gICAgaWYoc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgciA9IHRoaXMudHJlZS5yb290XG4gICAgICBpZihyKSB7XG4gICAgICAgIHJldHVybiByLl9jb3VudFxuICAgICAgfVxuICAgICAgcmV0dXJuIDBcbiAgICB9IGVsc2UgaWYoc3RhY2tbc3RhY2subGVuZ3RoLTFdLmxlZnQpIHtcbiAgICAgIGlkeCA9IHN0YWNrW3N0YWNrLmxlbmd0aC0xXS5sZWZ0Ll9jb3VudFxuICAgIH1cbiAgICBmb3IodmFyIHM9c3RhY2subGVuZ3RoLTI7IHM+PTA7IC0tcykge1xuICAgICAgaWYoc3RhY2tbcysxXSA9PT0gc3RhY2tbc10ucmlnaHQpIHtcbiAgICAgICAgKytpZHhcbiAgICAgICAgaWYoc3RhY2tbc10ubGVmdCkge1xuICAgICAgICAgIGlkeCArPSBzdGFja1tzXS5sZWZ0Ll9jb3VudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZHhcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSlcblxuLy9BZHZhbmNlcyBpdGVyYXRvciB0byBuZXh0IGVsZW1lbnQgaW4gbGlzdFxuaXByb3RvLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHN0YWNrID0gdGhpcy5fc3RhY2tcbiAgaWYoc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIG4gPSBzdGFja1tzdGFjay5sZW5ndGgtMV1cbiAgaWYobi5yaWdodCkge1xuICAgIG4gPSBuLnJpZ2h0XG4gICAgd2hpbGUobikge1xuICAgICAgc3RhY2sucHVzaChuKVxuICAgICAgbiA9IG4ubGVmdFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzdGFjay5wb3AoKVxuICAgIHdoaWxlKHN0YWNrLmxlbmd0aCA+IDAgJiYgc3RhY2tbc3RhY2subGVuZ3RoLTFdLnJpZ2h0ID09PSBuKSB7XG4gICAgICBuID0gc3RhY2tbc3RhY2subGVuZ3RoLTFdXG4gICAgICBzdGFjay5wb3AoKVxuICAgIH1cbiAgfVxufVxuXG4vL0NoZWNrcyBpZiBpdGVyYXRvciBpcyBhdCBlbmQgb2YgdHJlZVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGlwcm90bywgXCJoYXNOZXh0XCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhY2sgPSB0aGlzLl9zdGFja1xuICAgIGlmKHN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGlmKHN0YWNrW3N0YWNrLmxlbmd0aC0xXS5yaWdodCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgZm9yKHZhciBzPXN0YWNrLmxlbmd0aC0xOyBzPjA7IC0tcykge1xuICAgICAgaWYoc3RhY2tbcy0xXS5sZWZ0ID09PSBzdGFja1tzXSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufSlcblxuLy9VcGRhdGUgdmFsdWVcbmlwcm90by51cGRhdGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgc3RhY2sgPSB0aGlzLl9zdGFja1xuICBpZihzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCB1cGRhdGUgZW1wdHkgbm9kZSFcIilcbiAgfVxuICB2YXIgY3N0YWNrID0gbmV3IEFycmF5KHN0YWNrLmxlbmd0aClcbiAgdmFyIG4gPSBzdGFja1tzdGFjay5sZW5ndGgtMV1cbiAgY3N0YWNrW2NzdGFjay5sZW5ndGgtMV0gPSBuZXcgUkJOb2RlKG4uX2NvbG9yLCBuLmtleSwgdmFsdWUsIG4ubGVmdCwgbi5yaWdodCwgbi5fY291bnQpXG4gIGZvcih2YXIgaT1zdGFjay5sZW5ndGgtMjsgaT49MDsgLS1pKSB7XG4gICAgbiA9IHN0YWNrW2ldXG4gICAgaWYobi5sZWZ0ID09PSBzdGFja1tpKzFdKSB7XG4gICAgICBjc3RhY2tbaV0gPSBuZXcgUkJOb2RlKG4uX2NvbG9yLCBuLmtleSwgbi52YWx1ZSwgY3N0YWNrW2krMV0sIG4ucmlnaHQsIG4uX2NvdW50KVxuICAgIH0gZWxzZSB7XG4gICAgICBjc3RhY2tbaV0gPSBuZXcgUkJOb2RlKG4uX2NvbG9yLCBuLmtleSwgbi52YWx1ZSwgbi5sZWZ0LCBjc3RhY2tbaSsxXSwgbi5fY291bnQpXG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgUmVkQmxhY2tUcmVlKHRoaXMudHJlZS5fY29tcGFyZSwgY3N0YWNrWzBdKVxufVxuXG4vL01vdmVzIGl0ZXJhdG9yIGJhY2t3YXJkIG9uZSBlbGVtZW50XG5pcHJvdG8ucHJldiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RhY2sgPSB0aGlzLl9zdGFja1xuICBpZihzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgbiA9IHN0YWNrW3N0YWNrLmxlbmd0aC0xXVxuICBpZihuLmxlZnQpIHtcbiAgICBuID0gbi5sZWZ0XG4gICAgd2hpbGUobikge1xuICAgICAgc3RhY2sucHVzaChuKVxuICAgICAgbiA9IG4ucmlnaHRcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RhY2sucG9wKClcbiAgICB3aGlsZShzdGFjay5sZW5ndGggPiAwICYmIHN0YWNrW3N0YWNrLmxlbmd0aC0xXS5sZWZ0ID09PSBuKSB7XG4gICAgICBuID0gc3RhY2tbc3RhY2subGVuZ3RoLTFdXG4gICAgICBzdGFjay5wb3AoKVxuICAgIH1cbiAgfVxufVxuXG4vL0NoZWNrcyBpZiBpdGVyYXRvciBpcyBhdCBzdGFydCBvZiB0cmVlXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoaXByb3RvLCBcImhhc1ByZXZcIiwge1xuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFjayA9IHRoaXMuX3N0YWNrXG4gICAgaWYoc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYoc3RhY2tbc3RhY2subGVuZ3RoLTFdLmxlZnQpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGZvcih2YXIgcz1zdGFjay5sZW5ndGgtMTsgcz4wOyAtLXMpIHtcbiAgICAgIGlmKHN0YWNrW3MtMV0ucmlnaHQgPT09IHN0YWNrW3NdKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59KVxuXG4vL0RlZmF1bHQgY29tcGFyaXNvbiBmdW5jdGlvblxuZnVuY3Rpb24gZGVmYXVsdENvbXBhcmUoYSwgYikge1xuICBpZihhIDwgYikge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmKGEgPiBiKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuICByZXR1cm4gMFxufVxuXG4vL0J1aWxkIGEgdHJlZVxuZnVuY3Rpb24gY3JlYXRlUkJUcmVlKGNvbXBhcmUpIHtcbiAgcmV0dXJuIG5ldyBSZWRCbGFja1RyZWUoY29tcGFyZSB8fCBkZWZhdWx0Q29tcGFyZSwgbnVsbClcbn0iLCJ2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuXG52YXIgSU5ERU5UX1NUQVJUID0gL1tcXHtcXFtdL1xudmFyIElOREVOVF9FTkQgPSAvW1xcfVxcXV0vXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBsaW5lcyA9IFtdXG4gIHZhciBpbmRlbnQgPSAwXG5cbiAgdmFyIHB1c2ggPSBmdW5jdGlvbihzdHIpIHtcbiAgICB2YXIgc3BhY2VzID0gJydcbiAgICB3aGlsZSAoc3BhY2VzLmxlbmd0aCA8IGluZGVudCoyKSBzcGFjZXMgKz0gJyAgJ1xuICAgIGxpbmVzLnB1c2goc3BhY2VzK3N0cilcbiAgfVxuXG4gIHZhciBsaW5lID0gZnVuY3Rpb24oZm10KSB7XG4gICAgaWYgKCFmbXQpIHJldHVybiBsaW5lXG5cbiAgICBpZiAoSU5ERU5UX0VORC50ZXN0KGZtdC50cmltKClbMF0pICYmIElOREVOVF9TVEFSVC50ZXN0KGZtdFtmbXQubGVuZ3RoLTFdKSkge1xuICAgICAgaW5kZW50LS1cbiAgICAgIHB1c2godXRpbC5mb3JtYXQuYXBwbHkodXRpbCwgYXJndW1lbnRzKSlcbiAgICAgIGluZGVudCsrXG4gICAgICByZXR1cm4gbGluZVxuICAgIH1cbiAgICBpZiAoSU5ERU5UX1NUQVJULnRlc3QoZm10W2ZtdC5sZW5ndGgtMV0pKSB7XG4gICAgICBwdXNoKHV0aWwuZm9ybWF0LmFwcGx5KHV0aWwsIGFyZ3VtZW50cykpXG4gICAgICBpbmRlbnQrK1xuICAgICAgcmV0dXJuIGxpbmVcbiAgICB9XG4gICAgaWYgKElOREVOVF9FTkQudGVzdChmbXQudHJpbSgpWzBdKSkge1xuICAgICAgaW5kZW50LS1cbiAgICAgIHB1c2godXRpbC5mb3JtYXQuYXBwbHkodXRpbCwgYXJndW1lbnRzKSlcbiAgICAgIHJldHVybiBsaW5lXG4gICAgfVxuXG4gICAgcHVzaCh1dGlsLmZvcm1hdC5hcHBseSh1dGlsLCBhcmd1bWVudHMpKVxuICAgIHJldHVybiBsaW5lXG4gIH1cblxuICBsaW5lLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpXG4gIH1cblxuICBsaW5lLnRvRnVuY3Rpb24gPSBmdW5jdGlvbihzY29wZSkge1xuICAgIHZhciBzcmMgPSAncmV0dXJuICgnK2xpbmUudG9TdHJpbmcoKSsnKSdcblxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc2NvcGUgfHwge30pLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBrZXlcbiAgICB9KVxuXG4gICAgdmFyIHZhbHMgPSBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBzY29wZVtrZXldXG4gICAgfSlcblxuICAgIHJldHVybiBGdW5jdGlvbi5hcHBseShudWxsLCBrZXlzLmNvbmNhdChzcmMpKS5hcHBseShudWxsLCB2YWxzKVxuICB9XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIGxpbmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKVxuXG4gIHJldHVybiBsaW5lXG59XG4iLCJ2YXIgaXNQcm9wZXJ0eSA9IHJlcXVpcmUoJ2lzLXByb3BlcnR5JylcblxudmFyIGdlbiA9IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xuICByZXR1cm4gaXNQcm9wZXJ0eShwcm9wKSA/IG9iaisnLicrcHJvcCA6IG9iaisnWycrSlNPTi5zdHJpbmdpZnkocHJvcCkrJ10nXG59XG5cbmdlbi52YWxpZCA9IGlzUHJvcGVydHlcbmdlbi5wcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wKSB7XG4gcmV0dXJuIGlzUHJvcGVydHkocHJvcCkgPyBwcm9wIDogSlNPTi5zdHJpbmdpZnkocHJvcClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZW5cbiIsIi8vIG9yaWdpbmFsbHkgcHVsbGVkIG91dCBvZiBzaW1wbGUtcGVlclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldEJyb3dzZXJSVEMgKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsXG4gIHZhciB3cnRjID0ge1xuICAgIFJUQ1BlZXJDb25uZWN0aW9uOiB3aW5kb3cubW96UlRDUGVlckNvbm5lY3Rpb24gfHwgd2luZG93LlJUQ1BlZXJDb25uZWN0aW9uIHx8XG4gICAgICB3aW5kb3cud2Via2l0UlRDUGVlckNvbm5lY3Rpb24sXG4gICAgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uOiB3aW5kb3cubW96UlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHx8XG4gICAgICB3aW5kb3cuUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHx8IHdpbmRvdy53ZWJraXRSVENTZXNzaW9uRGVzY3JpcHRpb24sXG4gICAgUlRDSWNlQ2FuZGlkYXRlOiB3aW5kb3cubW96UlRDSWNlQ2FuZGlkYXRlIHx8IHdpbmRvdy5SVENJY2VDYW5kaWRhdGUgfHxcbiAgICAgIHdpbmRvdy53ZWJraXRSVENJY2VDYW5kaWRhdGVcbiAgfVxuICBpZiAoIXdydGMuUlRDUGVlckNvbm5lY3Rpb24pIHJldHVybiBudWxsXG4gIHJldHVybiB3cnRjXG59XG4iLCJ2YXIgdG9wTGV2ZWwgPSB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6XG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fVxudmFyIG1pbkRvYyA9IHJlcXVpcmUoJ21pbi1kb2N1bWVudCcpO1xuXG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQ7XG59IGVsc2Uge1xuICAgIHZhciBkb2NjeSA9IHRvcExldmVsWydfX0dMT0JBTF9ET0NVTUVOVF9DQUNIRUA0J107XG5cbiAgICBpZiAoIWRvY2N5KSB7XG4gICAgICAgIGRvY2N5ID0gdG9wTGV2ZWxbJ19fR0xPQkFMX0RPQ1VNRU5UX0NBQ0hFQDQnXSA9IG1pbkRvYztcbiAgICB9XG5cbiAgICBtb2R1bGUuZXhwb3J0cyA9IGRvY2N5O1xufVxuIiwiaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdztcbn0gZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIil7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBzZWxmO1xufSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHt9O1xufVxuIiwidmFyIGhhdCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdHMsIGJhc2UpIHtcbiAgICBpZiAoIWJhc2UpIGJhc2UgPSAxNjtcbiAgICBpZiAoYml0cyA9PT0gdW5kZWZpbmVkKSBiaXRzID0gMTI4O1xuICAgIGlmIChiaXRzIDw9IDApIHJldHVybiAnMCc7XG4gICAgXG4gICAgdmFyIGRpZ2l0cyA9IE1hdGgubG9nKE1hdGgucG93KDIsIGJpdHMpKSAvIE1hdGgubG9nKGJhc2UpO1xuICAgIGZvciAodmFyIGkgPSAyOyBkaWdpdHMgPT09IEluZmluaXR5OyBpICo9IDIpIHtcbiAgICAgICAgZGlnaXRzID0gTWF0aC5sb2coTWF0aC5wb3coMiwgYml0cyAvIGkpKSAvIE1hdGgubG9nKGJhc2UpICogaTtcbiAgICB9XG4gICAgXG4gICAgdmFyIHJlbSA9IGRpZ2l0cyAtIE1hdGguZmxvb3IoZGlnaXRzKTtcbiAgICBcbiAgICB2YXIgcmVzID0gJyc7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBNYXRoLmZsb29yKGRpZ2l0cyk7IGkrKykge1xuICAgICAgICB2YXIgeCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGJhc2UpLnRvU3RyaW5nKGJhc2UpO1xuICAgICAgICByZXMgPSB4ICsgcmVzO1xuICAgIH1cbiAgICBcbiAgICBpZiAocmVtKSB7XG4gICAgICAgIHZhciBiID0gTWF0aC5wb3coYmFzZSwgcmVtKTtcbiAgICAgICAgdmFyIHggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBiKS50b1N0cmluZyhiYXNlKTtcbiAgICAgICAgcmVzID0geCArIHJlcztcbiAgICB9XG4gICAgXG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHJlcywgYmFzZSk7XG4gICAgaWYgKHBhcnNlZCAhPT0gSW5maW5pdHkgJiYgcGFyc2VkID49IE1hdGgucG93KDIsIGJpdHMpKSB7XG4gICAgICAgIHJldHVybiBoYXQoYml0cywgYmFzZSlcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gcmVzO1xufTtcblxuaGF0LnJhY2sgPSBmdW5jdGlvbiAoYml0cywgYmFzZSwgZXhwYW5kQnkpIHtcbiAgICB2YXIgZm4gPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB2YXIgaXRlcnMgPSAwO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoaXRlcnMgKysgPiAxMCkge1xuICAgICAgICAgICAgICAgIGlmIChleHBhbmRCeSkgYml0cyArPSBleHBhbmRCeTtcbiAgICAgICAgICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcigndG9vIG1hbnkgSUQgY29sbGlzaW9ucywgdXNlIG1vcmUgYml0cycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBpZCA9IGhhdChiaXRzLCBiYXNlKTtcbiAgICAgICAgfSB3aGlsZSAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoaGF0cywgaWQpKTtcbiAgICAgICAgXG4gICAgICAgIGhhdHNbaWRdID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH07XG4gICAgdmFyIGhhdHMgPSBmbi5oYXRzID0ge307XG4gICAgXG4gICAgZm4uZ2V0ID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgIHJldHVybiBmbi5oYXRzW2lkXTtcbiAgICB9O1xuICAgIFxuICAgIGZuLnNldCA9IGZ1bmN0aW9uIChpZCwgdmFsdWUpIHtcbiAgICAgICAgZm4uaGF0c1tpZF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGZuO1xuICAgIH07XG4gICAgXG4gICAgZm4uYml0cyA9IGJpdHMgfHwgMTI4O1xuICAgIGZuLmJhc2UgPSBiYXNlIHx8IDE2O1xuICAgIHJldHVybiBmbjtcbn07XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCdidWZmZXItZXF1YWxzJylcbnZhciB4dGVuZCA9IHJlcXVpcmUoJ3h0ZW5kJylcbnZhciBpc2FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzb2RpdW0sIGtleXBhaXIsIG9wdHMpIHtcbiAgaWYgKHNvZGl1bS5hcGkgJiYgIXNvZGl1bS5jcnlwdG9fc2lnbikgc29kaXVtID0gc29kaXVtLmFwaVxuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuICB2YXIgcHViXG4gIGlmICh0eXBlb2Ygb3B0cy5wdWJsaWNLZXkgPT09ICdmdW5jdGlvbicpIHtcbiAgICBwdWIgPSBvcHRzLnB1YmxpY0tleVxuICB9XG4gIGVsc2Uge1xuICAgIHZhciBwdWIgPSBbXS5jb25jYXQoa2V5cGFpci5wdWJsaWNLZXkgfHwgW10pXG4gICAgaWYgKG9wdHMucHVibGljS2V5KSBwdWIgPSBbXS5jb25jYXQocHViLCBvcHRzLnB1YmxpY0tleSlcbiAgfVxuIFxuICByZXR1cm4geHRlbmQoe1xuICAgIGlkZW50aXR5OiBkZWZpbmVkKFxuICAgICAga2V5cGFpci5pZGVudGl0eSwga2V5cGFpci5wdWJsaWNLZXksIG9wdHMuaWRlbnRpdHksIG9wdHMuaWRcbiAgICApLFxuICAgIHNpZ246IGZ1bmN0aW9uIChub2RlLCBjYikge1xuICAgICAgdmFyIGJrZXkgPSBCdWZmZXIobm9kZS5rZXksICdoZXgnKVxuICAgICAgaWYgKHNvZGl1bS5zaWduICYmICFzb2RpdW0uY3J5cHRvX3NpZ24pIHtcbiAgICAgICAgY2IobnVsbCwgc29kaXVtLnNpZ24oYmtleSwga2V5cGFpci5zZWNyZXRLZXkpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2IobnVsbCwgc29kaXVtLmNyeXB0b19zaWduX2RldGFjaGVkKGJrZXksIGtleXBhaXIuc2VjcmV0S2V5KSlcbiAgICAgIH1cbiAgICB9LFxuICAgIHZlcmlmeTogZnVuY3Rpb24gKG5vZGUsIGNiKSB7XG4gICAgICBpZiAodHlwZW9mIHB1YiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwdWIobm9kZS5pZGVudGl0eSwgZnVuY3Rpb24gKGVyciwgb2spIHtcbiAgICAgICAgICBpZiAoZXJyKSBjYihlcnIpXG4gICAgICAgICAgZWxzZSBpZiAoIW9rKSBjYihudWxsLCBmYWxzZSlcbiAgICAgICAgICBlbHNlIGNiKG51bGwsIHZlcmlmeShub2RlKSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHB1Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlcShub2RlLmlkZW50aXR5LCBwdWJbaV0pKSBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmIChpID09PSBwdWIubGVuZ3RoKSByZXR1cm4gY2IobnVsbCwgZmFsc2UpXG4gICAgICAgIGNiKG51bGwsIHZlcmlmeShub2RlKSlcbiAgICAgIH1cbiAgICB9XG4gIH0sIG9wdHMpXG5cbiAgZnVuY3Rpb24gdmVyaWZ5IChub2RlKSB7XG4gICAgdmFyIGJrZXkgPSBCdWZmZXIobm9kZS5rZXksICdoZXgnKVxuICAgIGlmIChzb2RpdW0udmVyaWZ5ICYmICFzb2RpdW0uY3J5cHRvX3NpZ25fb3Blbikge1xuICAgICAgcmV0dXJuIHNvZGl1bS52ZXJpZnkoYmtleSwgbm9kZS5zaWduYXR1cmUsIG5vZGUuaWRlbnRpdHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzb2RpdW0uY3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkKFxuICAgICAgICBub2RlLnNpZ25hdHVyZSwgYmtleSwgbm9kZS5pZGVudGl0eSlcbiAgICB9XG4gIH1cbn1cbiIsInZhciBhZnRlciA9IHJlcXVpcmUoJ2FmdGVyLWFsbCcpXG52YXIgbGV4aW50ID0gcmVxdWlyZSgnbGV4aWNvZ3JhcGhpYy1pbnRlZ2VyJylcbnZhciBjb2xsZWN0ID0gcmVxdWlyZSgnc3RyZWFtLWNvbGxlY3RvcicpXG52YXIgdGhyb3VnaCA9IHJlcXVpcmUoJ3Rocm91Z2gyJylcbnZhciBwdW1wID0gcmVxdWlyZSgncHVtcCcpXG52YXIgZnJvbSA9IHJlcXVpcmUoJ2Zyb20yJylcbnZhciBtdXRleGlmeSA9IHJlcXVpcmUoJ211dGV4aWZ5JylcbnZhciBjdWlkID0gcmVxdWlyZSgnY3VpZCcpXG52YXIgbG9ncyA9IHJlcXVpcmUoJ2xldmVsLWxvZ3MnKVxudmFyIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cycpXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxudmFyIGVudW1lcmF0ZSA9IHJlcXVpcmUoJ2xldmVsLWVudW1lcmF0ZScpXG52YXIgcmVwbGljYXRlID0gcmVxdWlyZSgnLi9saWIvcmVwbGljYXRlJylcbnZhciBtZXNzYWdlcyA9IHJlcXVpcmUoJy4vbGliL21lc3NhZ2VzJylcbnZhciBoYXNoID0gcmVxdWlyZSgnLi9saWIvaGFzaCcpXG52YXIgZW5jb2RlciA9IHJlcXVpcmUoJy4vbGliL2VuY29kZScpXG5cbnZhciBJRCA9ICchIWlkJ1xudmFyIENIQU5HRVMgPSAnIWNoYW5nZXMhJ1xudmFyIE5PREVTID0gJyFub2RlcyEnXG52YXIgSEVBRFMgPSAnIWhlYWRzISdcblxudmFyIElOVkFMSURfU0lHTkFUVVJFID0gbmV3IEVycm9yKCdJbnZhbGlkIHNpZ25hdHVyZScpXG52YXIgQ0hFQ0tTVU1fTUlTTUFUQ0ggPSBuZXcgRXJyb3IoJ0NoZWNrc3VtIG1pc21hdGNoJylcbnZhciBJTlZBTElEX0xPRyA9IG5ldyBFcnJvcignSW52YWxpZCBsb2cgc2VxdWVuY2UnKVxuXG5JTlZBTElEX0xPRy5ub3RGb3VuZCA9IHRydWVcbklOVkFMSURfTE9HLnN0YXR1cyA9IDQwNFxuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHt9XG5cbnZhciBIeXBlcmxvZyA9IGZ1bmN0aW9uIChkYiwgb3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSHlwZXJsb2cpKSByZXR1cm4gbmV3IEh5cGVybG9nKGRiLCBvcHRzKVxuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuXG4gIGV2ZW50cy5FdmVudEVtaXR0ZXIuY2FsbCh0aGlzKVxuXG4gIHRoaXMuaWQgPSBvcHRzLmlkIHx8IG51bGxcbiAgdGhpcy5lbnVtZXJhdGUgPSBlbnVtZXJhdGUoZGIsIHtwcmVmaXg6ICdlbnVtJ30pXG4gIHRoaXMuZGIgPSBkYlxuICB0aGlzLmxvZ3MgPSBsb2dzKGRiLCB7cHJlZml4OiAnbG9ncycsIHZhbHVlRW5jb2Rpbmc6IG1lc3NhZ2VzLkVudHJ5fSlcbiAgdGhpcy5sb2NrID0gb3B0cy5sb2NrIHx8IG11dGV4aWZ5KClcbiAgdGhpcy5jaGFuZ2VzID0gMFxuICB0aGlzLnNldE1heExpc3RlbmVycygwKVxuICB0aGlzLnZhbHVlRW5jb2RpbmcgPSBvcHRzLnZhbHVlRW5jb2RpbmcgfHwgb3B0cy5lbmNvZGluZyB8fCAnYmluYXJ5J1xuICB0aGlzLmlkZW50aXR5ID0gb3B0cy5pZGVudGl0eSB8fCBudWxsXG4gIHRoaXMudmVyaWZ5ID0gb3B0cy52ZXJpZnkgfHwgbnVsbFxuICB0aGlzLnNpZ24gPSBvcHRzLnNpZ24gfHwgbnVsbFxuXG4gIHZhciBzZWxmID0gdGhpc1xuICB2YXIgZ2V0SWQgPSBvcHRzLmdldElkIHx8IGZ1bmN0aW9uIChjYikge1xuICAgIGRiLmdldChJRCwge3ZhbHVlRW5jb2Rpbmc6ICd1dGYtOCd9LCBmdW5jdGlvbiAoXywgaWQpIHtcbiAgICAgIGlmIChpZCkgcmV0dXJuIGNiKG51bGwsIGlkKVxuICAgICAgaWQgPSBjdWlkKClcbiAgICAgIGRiLnB1dChJRCwgaWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2IobnVsbCwgaWQpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0aGlzLmxvY2soZnVuY3Rpb24gKHJlbGVhc2UpIHtcbiAgICBjb2xsZWN0KGRiLmNyZWF0ZUtleVN0cmVhbSh7Z3Q6IENIQU5HRVMsIGx0OiBDSEFOR0VTICsgJ34nLCByZXZlcnNlOiB0cnVlLCBsaW1pdDogMX0pLCBmdW5jdGlvbiAoXywga2V5cykge1xuICAgICAgc2VsZi5jaGFuZ2VzID0gTWF0aC5tYXgoc2VsZi5jaGFuZ2VzLCBrZXlzICYmIGtleXMubGVuZ3RoID8gbGV4aW50LnVucGFjayhrZXlzWzBdLnNwbGl0KCchJykucG9wKCksICdoZXgnKSA6IDApXG4gICAgICBpZiAoc2VsZi5pZCkgcmV0dXJuIHJlbGVhc2UoKVxuICAgICAgZ2V0SWQoZnVuY3Rpb24gKF8sIGlkKSB7XG4gICAgICAgIHNlbGYuaWQgPSBpZCB8fCBjdWlkKClcbiAgICAgICAgcmVsZWFzZSgpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbnV0aWwuaW5oZXJpdHMoSHlwZXJsb2csIGV2ZW50cy5FdmVudEVtaXR0ZXIpXG5cbkh5cGVybG9nLnByb3RvdHlwZS5yZWFkeSA9IGZ1bmN0aW9uIChjYikge1xuICBpZiAodGhpcy5pZCkgcmV0dXJuIGNiKClcbiAgdGhpcy5sb2NrKGZ1bmN0aW9uIChyZWxlYXNlKSB7XG4gICAgcmVsZWFzZSgpXG4gICAgY2IoKVxuICB9KVxufVxuXG5IeXBlcmxvZy5wcm90b3R5cGUuaGVhZHMgPSBmdW5jdGlvbiAob3B0cywgY2IpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmICghb3B0cykgb3B0cyA9IHt9XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0c1xuICAgIG9wdHMgPSB7fVxuICB9XG5cbiAgdmFyIHJzID0gdGhpcy5kYi5jcmVhdGVWYWx1ZVN0cmVhbSh7XG4gICAgZ3Q6IEhFQURTLFxuICAgIGx0OiBIRUFEUyArICd+JyxcbiAgICB2YWx1ZUVuY29kaW5nOiAndXRmLTgnXG4gIH0pXG5cbiAgdmFyIGZvcm1hdCA9IHRocm91Z2gub2JqKGZ1bmN0aW9uIChrZXksIGVuYywgY2IpIHtcbiAgICBzZWxmLmdldChrZXksIG9wdHMsIGNiKVxuICB9KVxuXG4gIHJldHVybiBjb2xsZWN0KHB1bXAocnMsIGZvcm1hdCksIGNiKVxufVxuXG5IeXBlcmxvZy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSwgb3B0cywgY2IpIHtcbiAgaWYgKCFvcHRzKSBvcHRzID0ge31cbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRzXG4gICAgb3B0cyA9IHt9XG4gIH1cbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHRoaXMuZGIuZ2V0KE5PREVTICsga2V5LCB7dmFsdWVFbmNvZGluZzogJ2JpbmFyeSd9LCBmdW5jdGlvbiAoZXJyLCBidWYpIHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHZhciBub2RlID0gbWVzc2FnZXMuTm9kZS5kZWNvZGUoYnVmKVxuICAgIG5vZGUudmFsdWUgPSBlbmNvZGVyLmRlY29kZShub2RlLnZhbHVlLCBvcHRzLnZhbHVlRW5jb2RpbmcgfHwgc2VsZi52YWx1ZUVuY29kaW5nKVxuICAgIGNiKG51bGwsIG5vZGUpXG4gIH0pXG59XG5cbnZhciBhZGQgPSBmdW5jdGlvbiAoZGFnLCBsaW5rcywgdmFsdWUsIG9wdHMsIGNiKSB7XG4gIHZhciBsb2dMaW5rcyA9IFtdXG4gIHZhciBpZCA9IG9wdHMubG9nIHx8IGRhZy5pZFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHR5cGVvZiBsaW5rc1tpXSAhPT0gJ3N0cmluZycpIGxpbmtzW2ldID0gbGlua3NbaV0ua2V5XG4gIH1cbiAgdmFyIG5vZGUgPSB7XG4gICAgbG9nOiBpZCxcbiAgICBrZXk6IGhhc2gobGlua3MsIHZhbHVlKSxcbiAgICBpZGVudGl0eTogb3B0cy5pZGVudGl0eSB8fCBudWxsLFxuICAgIHNpZ25hdHVyZTogb3B0cy5zaWduYXR1cmUgfHwgbnVsbCxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgbGlua3M6IGxpbmtzXG4gIH1cbiAgZGFnLmVtaXQoJ3ByZWFkZCcsIG5vZGUpXG5cbiAgdmFyIG5leHQgPSBhZnRlcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcblxuICAgIHZhciBvbmxvY2tlZCA9IGZ1bmN0aW9uIChyZWxlYXNlKSB7XG4gICAgICBkYWcubG9ncy5oZWFkKGlkLCBmdW5jdGlvbiAoZXJyLCBzZXEpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlbGVhc2UoY2IsIGVycilcblxuICAgICAgICBub2RlLmNoYW5nZSA9IGRhZy5jaGFuZ2VzICsgMVxuICAgICAgICBub2RlLnNlcSA9IHNlcSArIDFcblxuICAgICAgICBpZiAob3B0cy5oYXNoICYmIG5vZGUua2V5ICE9PSBvcHRzLmhhc2gpIHJldHVybiByZWxlYXNlKGNiLCBDSEVDS1NVTV9NSVNNQVRDSClcbiAgICAgICAgaWYgKG9wdHMuc2VxICYmIG5vZGUuc2VxICE9PSBvcHRzLnNlcSkgcmV0dXJuIHJlbGVhc2UoY2IsIElOVkFMSURfTE9HKVxuXG4gICAgICAgIHZhciBsb2cgPSB7XG4gICAgICAgICAgY2hhbmdlOiBkYWcuY2hhbmdlcyArIDEsXG4gICAgICAgICAgbm9kZTogbm9kZS5rZXksXG4gICAgICAgICAgbGlua3M6IGxvZ0xpbmtzXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb25jbG9uZSA9IGZ1bmN0aW9uIChjbG9uZSkge1xuICAgICAgICAgIGlmICghb3B0cy5sb2cpIHJldHVybiByZWxlYXNlKGNiLCBudWxsLCBjbG9uZSlcbiAgICAgICAgICBkYWcuZGIucHV0KGRhZy5sb2dzLmtleShub2RlLmxvZywgbm9kZS5zZXEpLCBtZXNzYWdlcy5FbnRyeS5lbmNvZGUobG9nKSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlbGVhc2UoY2IsIGVycilcbiAgICAgICAgICAgIHJlbGVhc2UoY2IsIG51bGwsIGNsb25lKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBkYWcuZ2V0KG5vZGUua2V5LCB7IHZhbHVlRW5jb2Rpbmc6ICdiaW5hcnknIH0sIGZ1bmN0aW9uIChfLCBjbG9uZSkge1xuICAgICAgICAgIGlmIChjbG9uZSkgcmV0dXJuIG9uY2xvbmUoY2xvbmUpXG5cbiAgICAgICAgICB2YXIgYmF0Y2ggPSBbXVxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyBpKyspIGJhdGNoLnB1c2goe3R5cGU6ICdkZWwnLCBrZXk6IEhFQURTICsgbGlua3NbaV19KVxuICAgICAgICAgIGJhdGNoLnB1c2goe3R5cGU6ICdwdXQnLCBrZXk6IENIQU5HRVMgKyBsZXhpbnQucGFjayhub2RlLmNoYW5nZSwgJ2hleCcpLCB2YWx1ZTogbm9kZS5rZXl9KVxuICAgICAgICAgIGJhdGNoLnB1c2goe3R5cGU6ICdwdXQnLCBrZXk6IE5PREVTICsgbm9kZS5rZXksIHZhbHVlOiBtZXNzYWdlcy5Ob2RlLmVuY29kZShub2RlKX0pXG4gICAgICAgICAgYmF0Y2gucHVzaCh7dHlwZTogJ3B1dCcsIGtleTogSEVBRFMgKyBub2RlLmtleSwgdmFsdWU6IG5vZGUua2V5fSlcbiAgICAgICAgICBiYXRjaC5wdXNoKHt0eXBlOiAncHV0Jywga2V5OiBkYWcubG9ncy5rZXkobm9kZS5sb2csIG5vZGUuc2VxKSwgdmFsdWU6IG1lc3NhZ2VzLkVudHJ5LmVuY29kZShsb2cpfSlcblxuICAgICAgICAgIGRhZy5kYi5iYXRjaChiYXRjaCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlbGVhc2UoY2IsIGVycilcbiAgICAgICAgICAgIGRhZy5jaGFuZ2VzID0gbm9kZS5jaGFuZ2VcbiAgICAgICAgICAgIGRhZy5lbWl0KCdhZGQnLCBub2RlKVxuICAgICAgICAgICAgcmVsZWFzZShjYiwgbnVsbCwgbm9kZSlcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICB2YXIgZG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvcHRzLnJlbGVhc2UpIHJldHVybiBvbmxvY2tlZChvcHRzLnJlbGVhc2UpXG4gICAgICBkYWcubG9jayhvbmxvY2tlZClcbiAgICB9XG5cbiAgICBpZiAobm9kZS5sb2cgPT09IGRhZy5pZCkgeyAvLyB3ZSBvd24gdGhpcyBub2RlXG4gICAgICBpZiAoIWRhZy5zaWduIHx8IG5vZGUuc2lnbmF0dXJlKSByZXR1cm4gZG9uZSgpXG4gICAgICBkYWcuc2lnbihub2RlLCBmdW5jdGlvbiAoZXJyLCBzaWcpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgbm9kZS5pZGVudGl0eSA9IGRhZy5pZGVudGl0eVxuICAgICAgICBub2RlLnNpZ25hdHVyZSA9IHNpZ1xuICAgICAgICBkb25lKClcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZGFnLnZlcmlmeSkgcmV0dXJuIGRvbmUoKVxuICAgICAgZGFnLnZlcmlmeShub2RlLCBmdW5jdGlvbiAoZXJyLCB2YWxpZCkge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBpZiAoIXZhbGlkKSByZXR1cm4gY2IoSU5WQUxJRF9TSUdOQVRVUkUpXG4gICAgICAgIGRvbmUoKVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbiAgdmFyIG5leHRMaW5rID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjYiA9IG5leHQoKVxuICAgIHJldHVybiBmdW5jdGlvbiAoZXJyLCBsaW5rKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgaWYgKGxpbmsubG9nICE9PSBpZCAmJiBsb2dMaW5rcy5pbmRleE9mKGxpbmsubG9nKSA9PT0gLTEpIGxvZ0xpbmtzLnB1c2gobGluay5sb2cpXG4gICAgICBjYihudWxsKVxuICAgIH1cbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykge1xuICAgIGRhZy5nZXQobGlua3NbaV0sIG5leHRMaW5rKCkpXG4gIH1cbn1cblxudmFyIGNyZWF0ZUxpdmVTdHJlYW0gPSBmdW5jdGlvbiAoZGFnLCBvcHRzKSB7XG4gIHZhciBzaW5jZSA9IG9wdHMuc2luY2UgfHwgMFxuICB2YXIgbGltaXQgPSBvcHRzLmxpbWl0IHx8IC0xXG4gIHZhciB3YWl0ID0gbnVsbFxuXG4gIHZhciByZWFkID0gZnVuY3Rpb24gKHNpemUsIGNiKSB7XG4gICAgaWYgKGRhZy5jaGFuZ2VzIDw9IHNpbmNlKSB7XG4gICAgICB3YWl0ID0gY2JcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghbGltaXQpIHJldHVybiBjYihudWxsLCBudWxsKVxuXG4gICAgZGFnLmRiLmdldChDSEFOR0VTICsgbGV4aW50LnBhY2soc2luY2UgKyAxLCAnaGV4JyksIGZ1bmN0aW9uIChlcnIsIGhhc2gpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBkYWcuZ2V0KGhhc2gsIG9wdHMsIGZ1bmN0aW9uIChlcnIsIG5vZGUpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgc2luY2UgPSBub2RlLmNoYW5nZVxuICAgICAgICBpZiAobGltaXQgIT09IC0xKSBsaW1pdC0tXG4gICAgICAgIGNiKG51bGwsIG5vZGUpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB2YXIga2ljayA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXdhaXQpIHJldHVyblxuICAgIHZhciBjYiA9IHdhaXRcbiAgICB3YWl0ID0gbnVsbFxuICAgIHJlYWQoMCwgY2IpXG4gIH1cblxuICBkYWcub24oJ2FkZCcsIGtpY2spXG4gIGRhZy5yZWFkeShraWNrKVxuXG4gIHZhciBycyA9IGZyb20ub2JqKHJlYWQpXG5cbiAgcnMub25jZSgnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGFnLnJlbW92ZUxpc3RlbmVyKCdhZGQnLCBraWNrKVxuICB9KVxuXG4gIHJldHVybiByc1xufVxuXG5IeXBlcmxvZy5wcm90b3R5cGUuY3JlYXRlUmVhZFN0cmVhbSA9IGZ1bmN0aW9uIChvcHRzKSB7XG4gIGlmICghb3B0cykgb3B0cyA9IHt9XG4gIGlmIChvcHRzLnRhaWwpIHtcbiAgICBvcHRzLnNpbmNlID0gdGhpcy5jaGFuZ2VzXG4gIH1cbiAgaWYgKG9wdHMubGl2ZSkgcmV0dXJuIGNyZWF0ZUxpdmVTdHJlYW0odGhpcywgb3B0cylcblxuICB2YXIgc2VsZiA9IHRoaXNcbiAgdmFyIHNpbmNlID0gb3B0cy5zaW5jZSB8fCAwXG4gIHZhciB1bnRpbCA9IG9wdHMudW50aWwgfHwgMFxuXG4gIHZhciBrZXlzID0gdGhpcy5kYi5jcmVhdGVWYWx1ZVN0cmVhbSh7XG4gICAgZ3Q6IENIQU5HRVMgKyBsZXhpbnQucGFjayhzaW5jZSwgJ2hleCcpLFxuICAgIGx0OiBDSEFOR0VTICsgKHVudGlsID8gbGV4aW50LnBhY2sodW50aWwsICdoZXgnKSA6ICd+JyksXG4gICAgdmFsdWVFbmNvZGluZzogJ3V0Zi04JyxcbiAgICByZXZlcnNlOiBvcHRzLnJldmVyc2UsXG4gICAgbGltaXQ6IG9wdHMubGltaXRcbiAgfSlcblxuICB2YXIgZ2V0ID0gZnVuY3Rpb24gKGtleSwgZW5jLCBjYikge1xuICAgIHNlbGYuZ2V0KGtleSwgb3B0cywgY2IpXG4gIH1cblxuICByZXR1cm4gcHVtcChrZXlzLCB0aHJvdWdoLm9iaihnZXQpKVxufVxuXG5IeXBlcmxvZy5wcm90b3R5cGUucmVwbGljYXRlID1cbkh5cGVybG9nLnByb3RvdHlwZS5jcmVhdGVSZXBsaWNhdGlvblN0cmVhbSA9IGZ1bmN0aW9uIChvcHRzKSB7XG4gIHJldHVybiByZXBsaWNhdGUodGhpcywgb3B0cylcbn1cblxuSHlwZXJsb2cucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChsaW5rcywgdmFsdWUsIG9wdHMsIGNiKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHRoaXMuYWRkKGxpbmtzLCB2YWx1ZSwgbnVsbCwgb3B0cylcbiAgaWYgKCFjYikgY2IgPSBub29wXG4gIGlmICghb3B0cykgb3B0cyA9IHt9XG4gIGlmICghbGlua3MpIGxpbmtzID0gW11cbiAgaWYgKCFBcnJheS5pc0FycmF5KGxpbmtzKSkgbGlua3MgPSBbbGlua3NdXG4gIHZhbHVlID0gZW5jb2Rlci5lbmNvZGUodmFsdWUsIG9wdHMudmFsdWVFbmNvZGluZyB8fCB0aGlzLnZhbHVlRW5jb2RpbmcpXG5cbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHRoaXMucmVhZHkoZnVuY3Rpb24gKCkge1xuICAgIGFkZChzZWxmLCBsaW5rcywgdmFsdWUsIG9wdHMsIGZ1bmN0aW9uIChlcnIsIG5vZGUpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBub2RlLnZhbHVlID0gZW5jb2Rlci5kZWNvZGUobm9kZS52YWx1ZSwgb3B0cy52YWx1ZUVuY29kaW5nIHx8IHNlbGYudmFsdWVFbmNvZGluZylcbiAgICAgIGNiKG51bGwsIG5vZGUpXG4gICAgfSlcbiAgfSlcbn1cblxuSHlwZXJsb2cucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uICh2YWx1ZSwgb3B0cywgY2IpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRzXG4gICAgb3B0cyA9IHt9XG4gIH1cbiAgaWYgKCFjYikgY2IgPSBub29wXG4gIGlmICghb3B0cykgb3B0cyA9IHt9XG4gIHZhciBzZWxmID0gdGhpc1xuICB2YWx1ZSA9IGVuY29kZXIuZW5jb2RlKHZhbHVlLCBvcHRzLnZhbHVlRW5jb2RpbmcgfHwgdGhpcy52YWx1ZUVuY29kaW5nKVxuXG4gIHRoaXMubG9jayhmdW5jdGlvbiAocmVsZWFzZSkge1xuICAgIHNlbGYuaGVhZHMoZnVuY3Rpb24gKGVyciwgaGVhZHMpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiByZWxlYXNlKGNiLCBlcnIpXG4gICAgICBhZGQoc2VsZiwgaGVhZHMsIHZhbHVlLCB7cmVsZWFzZTogcmVsZWFzZX0sIGZ1bmN0aW9uIChlcnIsIG5vZGUpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgbm9kZS52YWx1ZSA9IGVuY29kZXIuZGVjb2RlKG5vZGUudmFsdWUsIG9wdHMudmFsdWVFbmNvZGluZyB8fCBzZWxmLnZhbHVlRW5jb2RpbmcpXG4gICAgICAgIGNiKG51bGwsIG5vZGUpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0gSHlwZXJsb2dcbiIsImV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKHZhbHVlLCBlbmMpIHtcbiAgaWYgKHR5cGVvZiBlbmMgPT09ICdvYmplY3QnICYmIGVuYy5lbmNvZGUpIHtcbiAgICB2YWx1ZSA9IGVuYy5lbmNvZGUodmFsdWUpXG4gIH0gZWxzZSBpZiAoZW5jID09PSAnanNvbicpIHtcbiAgICB2YWx1ZSA9IEJ1ZmZlcihKU09OLnN0cmluZ2lmeSh2YWx1ZSkpXG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHZhbHVlID0gbmV3IEJ1ZmZlcih2YWx1ZSlcbiAgcmV0dXJuIHZhbHVlXG59XG5cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKHZhbHVlLCBlbmMpIHtcbiAgaWYgKHR5cGVvZiBlbmMgPT09ICdvYmplY3QnICYmIGVuYy5kZWNvZGUpIHtcbiAgICByZXR1cm4gZW5jLmRlY29kZSh2YWx1ZSlcbiAgfSBlbHNlIGlmIChlbmMgPT09ICdqc29uJykge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlLnRvU3RyaW5nKCkpXG4gIH0gZWxzZSBpZiAoZW5jID09PSAndXRmLTgnIHx8IGVuYyA9PT0gJ3V0ZjgnKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKClcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cbiIsInZhciBmcmFtZWRIYXNoID0gcmVxdWlyZSgnZnJhbWVkLWhhc2gnKVxudmFyIGVtcHR5ID0gbmV3IEJ1ZmZlcigwKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaW5rcywgdmFsdWUpIHtcbiAgdmFyIGhhc2ggPSBmcmFtZWRIYXNoKCdzaGEyNTYnKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKSBoYXNoLnVwZGF0ZShsaW5rc1tpXSlcbiAgaGFzaC51cGRhdGUodmFsdWUgfHwgZW1wdHkpXG4gIHJldHVybiBoYXNoLmRpZ2VzdCgnaGV4Jylcbn1cbiIsInZhciBwcm90b2J1ZiA9IHJlcXVpcmUoJ3Byb3RvY29sLWJ1ZmZlcnMnKVxuXG5cbm1vZHVsZS5leHBvcnRzID0gcHJvdG9idWYoXCJtZXNzYWdlIE5vZGUge1xcbiAgcmVxdWlyZWQgdWludDMyIGNoYW5nZSAgID0gMTtcXG4gIHJlcXVpcmVkIHN0cmluZyBrZXkgICAgICA9IDI7XFxuICByZXF1aXJlZCBzdHJpbmcgbG9nICAgICAgPSAzO1xcbiAgb3B0aW9uYWwgdWludDMyIHNlcSAgICAgID0gNDtcXG4gIG9wdGlvbmFsIGJ5dGVzIGlkZW50aXR5ICA9IDc7XFxuICBvcHRpb25hbCBieXRlcyBzaWduYXR1cmUgPSA4O1xcbiAgcmVxdWlyZWQgYnl0ZXMgdmFsdWUgICAgID0gNTtcXG4gIHJlcGVhdGVkIHN0cmluZyBsaW5rcyAgICA9IDY7XFxufVxcblxcbm1lc3NhZ2UgRW50cnkge1xcbiAgcmVxdWlyZWQgdWludDMyIGNoYW5nZSA9IDE7XFxuICByZXF1aXJlZCBzdHJpbmcgbm9kZSAgID0gMjtcXG4gIHJlcGVhdGVkIHN0cmluZyBsaW5rcyAgPSAzO1xcbn1cXG5cXG5tZXNzYWdlIExvZyB7XFxuICByZXF1aXJlZCBzdHJpbmcgbG9nID0gMTtcXG4gIHJlcXVpcmVkIHVpbnQzMiBzZXEgPSAyO1xcbn1cXG5cXG5tZXNzYWdlIEhhbmRzaGFrZSB7XFxuICByZXF1aXJlZCB1aW50MzIgdmVyc2lvbiA9IDE7XFxuICBvcHRpb25hbCBzdHJpbmcgbW9kZSAgICA9IDIgW2RlZmF1bHQgPSBcXFwic3luY1xcXCJdO1xcbiAgb3B0aW9uYWwgYnl0ZXMgbWV0YWRhdGEgPSAzO1xcbiAgb3B0aW9uYWwgYm9vbCBsaXZlICAgICAgPSA0O1xcbn1cXG5cIilcbiIsInZhciBEdXBsZXhpZnkgPSByZXF1aXJlKCdkdXBsZXhpZnknKVxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJylcbnZhciBscHN0cmVhbSA9IHJlcXVpcmUoJ2xlbmd0aC1wcmVmaXhlZC1zdHJlYW0nKVxudmFyIHRocm91Z2ggPSByZXF1aXJlKCd0aHJvdWdoMicpXG52YXIgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdoeXBlcmxvZy1yZXBsaWNhdGUnKVxudmFyIG1lc3NhZ2VzID0gcmVxdWlyZSgnLi9tZXNzYWdlcycpXG5cbnZhciBlbXB0eSA9IHtcbiAgZW5jb2RpbmdMZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gMFxuICB9LFxuICBlbmNvZGU6IGZ1bmN0aW9uIChkYXRhLCBidWYsIG9mZnNldCkge1xuICAgIHJldHVybiBidWZcbiAgfVxufVxuXG52YXIgUHJvdG9jb2wgPSBmdW5jdGlvbiAob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUHJvdG9jb2wpKSByZXR1cm4gbmV3IFByb3RvY29sKG9wdHMpXG5cbiAgdmFyIGZyYW1lID0gIW9wdHMgfHwgb3B0cy5mcmFtZSAhPT0gZmFsc2VcblxuICB0aGlzLl9lbmNvZGVyID0gZnJhbWUgPyBscHN0cmVhbS5lbmNvZGUoKSA6IHRocm91Z2gub2JqKClcbiAgdGhpcy5fZGVjb2RlciA9IGZyYW1lID8gbHBzdHJlYW0uZGVjb2RlKCkgOiB0aHJvdWdoLm9iaigpXG4gIHRoaXMuX2ZpbmFsaXplID0gb3B0cy5maW5hbGl6ZSA/IG9wdHMuZmluYWxpemUgOiBmdW5jdGlvbiAoY2IpIHsgY2IoKSB9XG4gIHRoaXMuX3Byb2Nlc3MgPSBvcHRzLnByb2Nlc3MgfHwgbnVsbFxuXG4gIHZhciBzZWxmID0gdGhpc1xuICB2YXIgcGFyc2UgPSB0aHJvdWdoLm9iaihmdW5jdGlvbiAoZGF0YSwgZW5jLCBjYikge1xuICAgIHNlbGYuX2RlY29kZShkYXRhLCBjYilcbiAgfSlcblxuICBwYXJzZS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgc2VsZi5kZXN0cm95KGVycilcbiAgfSlcblxuICB0aGlzLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVidWcoJ2VuZGVkJylcbiAgICBzZWxmLmVuZCgpXG4gIH0pXG5cbiAgdGhpcy5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgIGRlYnVnKCdmaW5pc2hlZCcpXG4gICAgc2VsZi5maW5hbGl6ZSgpXG4gIH0pXG5cbiAgdGhpcy5fZGVjb2Rlci5waXBlKHBhcnNlKVxuXG4gIGlmICh0aGlzLl9wcm9jZXNzKSB7XG4gICAgdGhpcy5fcHJvY2Vzcy5waXBlKHRocm91Z2gub2JqKGZ1bmN0aW9uIChub2RlLCBlbmMsIGNiKSB7XG4gICAgICBzZWxmLmVtaXQoJ25vZGUnLCBub2RlLCBjYikgfHwgY2IoKVxuICAgIH0pKVxuICB9XG5cbiAgdmFyIGh3bSA9IG9wdHMuaGlnaFdhdGVyTWFyayB8fCAxNlxuICBEdXBsZXhpZnkuY2FsbCh0aGlzLCB0aGlzLl9kZWNvZGVyLCB0aGlzLl9lbmNvZGVyLCBmcmFtZSA/IHt9IDoge29iamVjdE1vZGU6IHRydWUsIGhpZ2hXYXRlck1hcms6IGh3bX0pXG59XG5cbnV0aWwuaW5oZXJpdHMoUHJvdG9jb2wsIER1cGxleGlmeSlcblxuUHJvdG9jb2wucHJvdG90eXBlLmhhbmRzaGFrZSA9IGZ1bmN0aW9uIChoYW5kc2hha2UsIGNiKSB7XG4gIGRlYnVnKCdzZW5kaW5nIGhhbmRzaGFrZScpXG4gIHRoaXMuX2VuY29kZSgwLCBtZXNzYWdlcy5IYW5kc2hha2UsIGhhbmRzaGFrZSwgY2IpXG59XG5cblByb3RvY29sLnByb3RvdHlwZS5oYXZlID0gZnVuY3Rpb24gKGhhdmUsIGNiKSB7XG4gIGRlYnVnKCdzZW5kaW5nIGhhdmUnKVxuICB0aGlzLl9lbmNvZGUoMSwgbWVzc2FnZXMuTG9nLCBoYXZlLCBjYilcbn1cblxuUHJvdG9jb2wucHJvdG90eXBlLndhbnQgPSBmdW5jdGlvbiAod2FudCwgY2IpIHtcbiAgZGVidWcoJ3NlbmRpbmcgd2FudCcpXG4gIHRoaXMuX2VuY29kZSgyLCBtZXNzYWdlcy5Mb2csIHdhbnQsIGNiKVxufVxuXG5Qcm90b2NvbC5wcm90b3R5cGUubm9kZSA9IGZ1bmN0aW9uIChub2RlLCBjYikge1xuICBkZWJ1Zygnc2VuZGluZyBub2RlJylcbiAgdGhpcy5fZW5jb2RlKDMsIG1lc3NhZ2VzLk5vZGUsIG5vZGUsIGNiKVxufVxuXG5Qcm90b2NvbC5wcm90b3R5cGUuc2VudEhlYWRzID0gZnVuY3Rpb24gKGNiKSB7XG4gIGRlYnVnKCdzZW5kaW5nIHNlbnRIZWFkcycpXG4gIHRoaXMuX2VuY29kZSg0LCBlbXB0eSwgbnVsbCwgY2IpXG59XG5cblByb3RvY29sLnByb3RvdHlwZS5zZW50V2FudHMgPSBmdW5jdGlvbiAoY2IpIHtcbiAgZGVidWcoJ3NlbmRpbmcgc2VudFdhbnRzJylcbiAgdGhpcy5fZW5jb2RlKDUsIGVtcHR5LCBudWxsLCBjYilcbn1cblxuUHJvdG9jb2wucHJvdG90eXBlLmZpbmFsaXplID0gZnVuY3Rpb24gKGNiKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICB0aGlzLl9maW5hbGl6ZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgZGVidWcoJ2VuZGluZycpXG4gICAgaWYgKGVycikgcmV0dXJuIHNlbGYuZGVzdHJveShlcnIpXG4gICAgc2VsZi5fZW5jb2Rlci5lbmQoY2IpXG4gIH0pXG59XG5cblByb3RvY29sLnByb3RvdHlwZS5fZW5jb2RlID0gZnVuY3Rpb24gKHR5cGUsIGVuYywgZGF0YSwgY2IpIHtcbiAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoZW5jLmVuY29kaW5nTGVuZ3RoKGRhdGEpICsgMSlcbiAgYnVmWzBdID0gdHlwZVxuICBlbmMuZW5jb2RlKGRhdGEsIGJ1ZiwgMSlcbiAgdGhpcy5fZW5jb2Rlci53cml0ZShidWYsIGNiKVxufVxuXG52YXIgZGVjb2RlTWVzc2FnZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHN3aXRjaCAoZGF0YVswXSkge1xuICAgIGNhc2UgMDogcmV0dXJuIG1lc3NhZ2VzLkhhbmRzaGFrZS5kZWNvZGUoZGF0YSwgMSlcbiAgICBjYXNlIDE6IHJldHVybiBtZXNzYWdlcy5Mb2cuZGVjb2RlKGRhdGEsIDEpXG4gICAgY2FzZSAyOiByZXR1cm4gbWVzc2FnZXMuTG9nLmRlY29kZShkYXRhLCAxKVxuICAgIGNhc2UgMzogcmV0dXJuIG1lc3NhZ2VzLk5vZGUuZGVjb2RlKGRhdGEsIDEpXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuUHJvdG9jb2wucHJvdG90eXBlLl9kZWNvZGUgPSBmdW5jdGlvbiAoZGF0YSwgY2IpIHtcbiAgdHJ5IHtcbiAgICB2YXIgbXNnID0gZGVjb2RlTWVzc2FnZShkYXRhKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gY2IoZXJyKVxuICB9XG5cbiAgc3dpdGNoIChkYXRhWzBdKSB7XG4gICAgY2FzZSAwOlxuICAgIGRlYnVnKCdyZWNlaXZpbmcgaGFuZHNoYWtlJylcbiAgICByZXR1cm4gdGhpcy5lbWl0KCdoYW5kc2hha2UnLCBtc2csIGNiKSB8fCBjYigpXG5cbiAgICBjYXNlIDE6XG4gICAgZGVidWcoJ3JlY2VpdmluZyBoYXZlJylcbiAgICByZXR1cm4gdGhpcy5lbWl0KCdoYXZlJywgbXNnLCBjYikgfHwgY2IoKVxuXG4gICAgY2FzZSAyOlxuICAgIGRlYnVnKCdyZWNlaXZpbmcgd2FudCcpXG4gICAgcmV0dXJuIHRoaXMuZW1pdCgnd2FudCcsIG1zZywgY2IpIHx8IGNiKClcblxuICAgIGNhc2UgMzpcbiAgICBkZWJ1ZygncmVjZWl2aW5nIG5vZGUnKVxuICAgIHJldHVybiB0aGlzLl9wcm9jZXNzID8gdGhpcy5fcHJvY2Vzcy53cml0ZShtc2csIGNiKSA6ICh0aGlzLmVtaXQoJ25vZGUnLCBtc2csIGNiKSB8fCBjYigpKVxuXG4gICAgY2FzZSA0OlxuICAgIGRlYnVnKCdyZWNlaXZpbmcgc2VudEhlYWRzJylcbiAgICByZXR1cm4gdGhpcy5lbWl0KCdzZW50SGVhZHMnLCBjYikgfHwgY2IoKVxuXG4gICAgY2FzZSA1OlxuICAgIGRlYnVnKCdyZWNlaXZpbmcgc2VudFdhbnRzJylcbiAgICByZXR1cm4gdGhpcy5lbWl0KCdzZW50V2FudHMnLCBjYikgfHwgY2IoKVxuICB9XG5cbiAgY2IoKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb3RvY29sXG4iLCJ2YXIgdGhyb3VnaCA9IHJlcXVpcmUoJ3Rocm91Z2gyJylcbnZhciBwdW1wID0gcmVxdWlyZSgncHVtcCcpXG52YXIgYml0ZmllbGQgPSByZXF1aXJlKCdiaXRmaWVsZCcpXG52YXIgcHJvdG9jb2wgPSByZXF1aXJlKCcuL3Byb3RvY29sJylcbnZhciBzb3J0ZWRRdWV1ZSA9IHJlcXVpcmUoJy4vc29ydGVkLXF1ZXVlJylcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7fVxudmFyIG5vYXJyID0gW11cblxudmFyIE1BWF9CSVRGSUVMRCA9IDEwICogMTAyNCAqIDEwMjQgLy8gYXJiaXRyYXJ5IGhpZ2ggbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRhZywgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuXG4gIHZhciBzdHJlYW0gPSBwcm90b2NvbChvcHRzKVxuICB2YXIgbW9kZSA9IG9wdHMubW9kZSB8fCAnc3luYydcblxuICB2YXIgcHVzaGluZyA9IGJpdGZpZWxkKDEwMjQsIHtncm93OiBNQVhfQklURklFTER9KVxuXG4gIHZhciBjaGFuZ2VzID0gMFxuICB2YXIgbWlzc2luZyA9IDBcblxuICB2YXIgZG9uZSA9IGZhbHNlXG4gIHZhciByZW1vdGVTZW50V2FudHMgPSBmYWxzZVxuICB2YXIgcmVtb3RlU2VudEhlYWRzID0gZmFsc2VcbiAgdmFyIGxvY2FsU2VudFdhbnRzID0gZmFsc2VcbiAgdmFyIGxvY2FsU2VudEhlYWRzID0gZmFsc2VcblxuICB2YXIgbGl2ZSA9IG9wdHMubGl2ZVxuICB2YXIgb3V0Z29pbmcgPSBzb3J0ZWRRdWV1ZSgpXG4gIHZhciBpbmNvbWluZyA9IHNvcnRlZFF1ZXVlKClcblxuICBvdXRnb2luZy5wdWxsKGZ1bmN0aW9uIGxvb3AgKGVudHJ5KSB7XG4gICAgZGFnLmdldChlbnRyeS5ub2RlLCB7dmFsdWVFbmNvZGluZzogJ2JpbmFyeSd9LCBmdW5jdGlvbiAoZXJyLCBub2RlKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gc3RyZWFtLmRlc3Ryb3koZXJyKVxuICAgICAgc3RyZWFtLmVtaXQoJ3B1c2gnKVxuICAgICAgc3RyZWFtLm5vZGUobm9kZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gc3RyZWFtLmRlc3Ryb3koZXJyKVxuICAgICAgICBzZW5kTm9kZShub2RlLmxvZywgbm9kZS5zZXEgKyAxLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIHN0cmVhbS5kZXN0cm95KGVycilcbiAgICAgICAgICBvdXRnb2luZy5wdWxsKGxvb3ApXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG5cbiAgdmFyIHBpcGUgPSBmdW5jdGlvbiAoYSwgYiwgY2IpIHtcbiAgICB2YXIgZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGEuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgc3RyZWFtLm9uKCdjbG9zZScsIGRlc3Ryb3kpXG4gICAgc3RyZWFtLm9uKCdmaW5pc2gnLCBkZXN0cm95KVxuXG4gICAgYS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIGRlc3Ryb3kpXG4gICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIGRlc3Ryb3kpXG4gICAgfSlcblxuICAgIHJldHVybiBwdW1wKGEsIGIsIGNiKVxuICB9XG5cbiAgdmFyIHNlbmRDaGFuZ2VzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB3cml0ZSA9IGZ1bmN0aW9uIChub2RlLCBlbmMsIGNiKSB7XG4gICAgICBzdHJlYW0ubm9kZShub2RlLCBjYilcbiAgICB9XG5cbiAgICBzdHJlYW0uZW1pdCgnbGl2ZScpXG4gICAgcGlwZShkYWcuY3JlYXRlUmVhZFN0cmVhbSh7c2luY2U6IGNoYW5nZXMsIGxpdmU6IHRydWV9KSwgdGhyb3VnaC5vYmood3JpdGUpKVxuICB9XG5cbiAgdmFyIHVwZGF0ZSA9IGZ1bmN0aW9uIChjYikge1xuICAgIGlmIChkb25lIHx8ICFsb2NhbFNlbnRXYW50cyB8fCAhbG9jYWxTZW50SGVhZHMgfHwgIXJlbW90ZVNlbnRXYW50cyB8fCAhcmVtb3RlU2VudEhlYWRzKSByZXR1cm4gY2IoKVxuICAgIGRvbmUgPSB0cnVlXG4gICAgaWYgKCFsaXZlKSByZXR1cm4gc3RyZWFtLmZpbmFsaXplKGNiKVxuICAgIHNlbmRDaGFuZ2VzKClcbiAgICBjYigpXG4gIH1cblxuICB2YXIgc2VudFdhbnRzID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgbG9jYWxTZW50V2FudHMgPSB0cnVlXG4gICAgc3RyZWFtLnNlbnRXYW50cygpXG4gICAgdXBkYXRlKGNiKVxuICB9XG5cbiAgdmFyIHNlbnRIZWFkcyA9IGZ1bmN0aW9uIChjYikge1xuICAgIGxvY2FsU2VudEhlYWRzID0gdHJ1ZVxuICAgIHN0cmVhbS5zZW50SGVhZHMoKVxuICAgIHVwZGF0ZShjYilcbiAgfVxuXG4gIHZhciBzZW5kTm9kZSA9IGZ1bmN0aW9uIChsb2csIHNlcSwgY2IpIHtcbiAgICBkYWcubG9ncy5nZXQobG9nLCBzZXEsIGZ1bmN0aW9uIChlcnIsIGVudHJ5KSB7XG4gICAgICBpZiAoZXJyICYmIGVyci5ub3RGb3VuZCkgcmV0dXJuIGNiKClcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBpZiAoZW50cnkuY2hhbmdlID4gY2hhbmdlcykgcmV0dXJuIGNiKCkgLy8gZW5zdXJlIHNuYXBzaG90XG5cbiAgICAgIHZhciBpID0gMFxuICAgICAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpIDwgZW50cnkubGlua3MubGVuZ3RoKSByZXR1cm4gc2VuZEhhdmUoZW50cnkubGlua3NbaSsrXSwgbG9vcClcbiAgICAgICAgZW50cnkubGlua3MgPSBub2FyciAvLyBwcmVtYXR1cmUgb3B0OiBsZXNzIG1lbSB5b1xuICAgICAgICBvdXRnb2luZy5wdXNoKGVudHJ5LCBjYilcbiAgICAgIH1cblxuICAgICAgbG9vcCgpXG4gICAgfSlcbiAgfVxuXG4gIHZhciByZWNlaXZlTm9kZSA9IGZ1bmN0aW9uIChub2RlLCBjYikge1xuICAgIHZhciBvcHRzID0ge1xuICAgICAgaGFzaDogbm9kZS5rZXksXG4gICAgICBsb2c6IG5vZGUubG9nLFxuICAgICAgc2VxOiBub2RlLnNlcSxcbiAgICAgIGlkZW50aXR5OiBub2RlLmlkZW50aXR5LFxuICAgICAgc2lnbmF0dXJlOiBub2RlLnNpZ25hdHVyZSxcbiAgICAgIHZhbHVlRW5jb2Rpbmc6ICdiaW5hcnknXG4gICAgfVxuICAgIGRhZy5hZGQobm9kZS5saW5rcywgbm9kZS52YWx1ZSwgb3B0cywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKCFlcnIpIHJldHVybiBhZnRlckFkZChjYilcbiAgICAgIGlmICghZXJyLm5vdEZvdW5kKSByZXR1cm4gY2IoZXJyKVxuICAgICAgaW5jb21pbmcucHVzaChub2RlLCBjYilcbiAgICB9KVxuICB9XG5cbiAgdmFyIGFmdGVyQWRkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgc3RyZWFtLmVtaXQoJ3B1bGwnKVxuICAgIGlmICghbG9jYWxTZW50V2FudHMgJiYgIS0tbWlzc2luZykgcmV0dXJuIHNlbnRXYW50cyhjYilcbiAgICBpZiAoIWluY29taW5nLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICBpbmNvbWluZy5wdWxsKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICByZWNlaXZlTm9kZShub2RlLCBjYilcbiAgICB9KVxuICB9XG5cbiAgdmFyIHNlbmRIYXZlID0gZnVuY3Rpb24gKGxvZywgY2IpIHtcbiAgICBkYWcuZW51bWVyYXRlKGxvZywgZnVuY3Rpb24gKGVyciwgaWR4KSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuXG4gICAgICBpZiAocHVzaGluZy5nZXQoaWR4KSkgcmV0dXJuIGNiKClcbiAgICAgIHB1c2hpbmcuc2V0KGlkeCwgdHJ1ZSlcblxuICAgICAgZGFnLmxvZ3MuaGVhZChsb2csIGZ1bmN0aW9uIChlcnIsIHNlcSkge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBkYWcubG9ncy5nZXQobG9nLCBzZXEsIGZ1bmN0aW9uIGxvb3AgKGVyciwgZW50cnkpIHsgLy8gZW5zdXJlIHNuYXBzaG90XG4gICAgICAgICAgaWYgKGVyciAmJiBlcnIubm90Rm91bmQpIHJldHVybiBjYigpXG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgICBpZiAoZW50cnkuY2hhbmdlID4gY2hhbmdlcykgcmV0dXJuIGRhZy5sb2dzLmdldChsb2csIHNlcSAtIDEsIGxvb3ApXG4gICAgICAgICAgc3RyZWFtLmhhdmUoe2xvZzogbG9nLCBzZXE6IHNlcX0sIGNiKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgc3RyZWFtLm9uY2UoJ3NlbnRIZWFkcycsIGZ1bmN0aW9uIChjYikge1xuICAgIGlmICghbG9jYWxTZW50V2FudHMgJiYgIW1pc3NpbmcpIHNlbnRXYW50cyhub29wKVxuICAgIHJlbW90ZVNlbnRIZWFkcyA9IHRydWVcbiAgICB1cGRhdGUoY2IpXG4gIH0pXG5cbiAgc3RyZWFtLm9uY2UoJ3NlbnRXYW50cycsIGZ1bmN0aW9uIChjYikge1xuICAgIHJlbW90ZVNlbnRXYW50cyA9IHRydWVcbiAgICB1cGRhdGUoY2IpXG4gIH0pXG5cbiAgc3RyZWFtLm9uKCd3YW50JywgZnVuY3Rpb24gKGhlYWQsIGNiKSB7XG4gICAgc2VuZE5vZGUoaGVhZC5sb2csIGhlYWQuc2VxICsgMSwgY2IpXG4gIH0pXG5cbiAgc3RyZWFtLm9uKCdoYXZlJywgZnVuY3Rpb24gKGhlYWQsIGNiKSB7XG4gICAgZGFnLmxvZ3MuaGVhZChoZWFkLmxvZywgZnVuY3Rpb24gKGVyciwgc2VxKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgaWYgKHNlcSA+PSBoZWFkLnNlcSkgcmV0dXJuIGNiKClcbiAgICAgIG1pc3NpbmcgKz0gKGhlYWQuc2VxIC0gc2VxKVxuICAgICAgc3RyZWFtLndhbnQoe2xvZzogaGVhZC5sb2csIHNlcTogc2VxfSwgY2IpXG4gICAgfSlcbiAgfSlcblxuICBzdHJlYW0ub24oJ25vZGUnLCByZWNlaXZlTm9kZSlcblxuICAvLyBzdGFydCB0aGUgaGFuZHNoYWtlXG5cbiAgc3RyZWFtLm9uKCdoYW5kc2hha2UnLCBmdW5jdGlvbiAoaGFuZHNoYWtlLCBjYikge1xuICAgIHZhciByZW1vdGVNb2RlID0gaGFuZHNoYWtlLm1vZGVcblxuICAgIGlmIChyZW1vdGVNb2RlICE9PSAncHVsbCcgJiYgcmVtb3RlTW9kZSAhPT0gJ3B1c2gnICYmIHJlbW90ZU1vZGUgIT09ICdzeW5jJykgcmV0dXJuIGNiKG5ldyBFcnJvcignUmVtb3RlIHVzZXMgaW52YWxpZCBtb2RlOiAnICsgcmVtb3RlTW9kZSkpXG4gICAgaWYgKHJlbW90ZU1vZGUgPT09ICdwdWxsJyAmJiBtb2RlID09PSAncHVsbCcpIHJldHVybiBjYihuZXcgRXJyb3IoJ1JlbW90ZSBhbmQgbG9jYWwgYXJlIGJvdGggcHVsbGluZycpKVxuICAgIGlmIChyZW1vdGVNb2RlID09PSAncHVzaCcgJiYgbW9kZSA9PT0gJ3B1c2gnKSByZXR1cm4gY2IobmV3IEVycm9yKCdSZW1vdGUgYW5kIGxvY2FsIGFyZSBib3RoIHB1c2hpbmcnKSlcblxuICAgIHJlbW90ZVNlbnRXYW50cyA9IHJlbW90ZU1vZGUgPT09ICdwdXNoJ1xuICAgIHJlbW90ZVNlbnRIZWFkcyA9IHJlbW90ZU1vZGUgPT09ICdwdWxsJ1xuICAgIGxvY2FsU2VudFdhbnRzID0gbW9kZSA9PT0gJ3B1c2gnIHx8IHJlbW90ZU1vZGUgPT09ICdwdWxsJ1xuICAgIGxvY2FsU2VudEhlYWRzID0gbW9kZSA9PT0gJ3B1bGwnIHx8IHJlbW90ZU1vZGUgPT09ICdwdXNoJ1xuXG4gICAgaWYgKGhhbmRzaGFrZS5tZXRhZGF0YSkgc3RyZWFtLmVtaXQoJ21ldGFkYXRhJywgaGFuZHNoYWtlLm1ldGFkYXRhKVxuICAgIGlmICghbGl2ZSkgbGl2ZSA9IGhhbmRzaGFrZS5saXZlXG4gICAgaWYgKGxvY2FsU2VudEhlYWRzKSByZXR1cm4gdXBkYXRlKGNiKVxuXG4gICAgdmFyIHdyaXRlID0gZnVuY3Rpb24gKG5vZGUsIGVuYywgY2IpIHtcbiAgICAgIHNlbmRIYXZlKG5vZGUubG9nLCBjYilcbiAgICB9XG5cbiAgICBkYWcubG9jayhmdW5jdGlvbiAocmVsZWFzZSkgeyAvLyBUT0RPOiBkb24ndCBsb2NrIGhlcmUuIGZpZ3VyZSBvdXQgaG93IHRvIHNuYXBzaG90IHRoZSBoZWFkcyB0byBhIGNoYW5nZSBpbnN0ZWFkXG4gICAgICBjaGFuZ2VzID0gZGFnLmNoYW5nZXNcbiAgICAgIHBpcGUoZGFnLmhlYWRzKCksIHRocm91Z2gub2JqKHdyaXRlKSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICByZWxlYXNlKClcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgc2VudEhlYWRzKGNiKVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxuXG4gIHN0cmVhbS5oYW5kc2hha2Uoe3ZlcnNpb246IDEsIG1vZGU6IG9wdHMubW9kZSwgbWV0YWRhdGE6IG9wdHMubWV0YWRhdGEsIGxpdmU6IGxpdmV9KVxuXG4gIHJldHVybiBzdHJlYW1cbn1cbiIsInZhciBpbmRleE9mID0gZnVuY3Rpb24gKGxpc3QsIGNoYW5nZSkge1xuICB2YXIgbG93ID0gMFxuICB2YXIgaGlnaCA9IGxpc3QubGVuZ3RoXG4gIHZhciBtaWQgPSAwXG5cbiAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICBtaWQgPSAobG93ICsgaGlnaCkgPj4gMVxuICAgIGlmIChjaGFuZ2UgPCBsaXN0W21pZF0uY2hhbmdlKSBoaWdoID0gbWlkXG4gICAgZWxzZSBsb3cgPSBtaWQgKyAxXG4gIH1cblxuICByZXR1cm4gbG93XG59XG5cbnZhciBTb3J0ZWRRdWV1ZSA9IGZ1bmN0aW9uICgpIHsgLy8gVE9ETzogYnVmZmVyIHRvIGxldmVsZGIgaWYgdGhlIHF1ZXVlIGJlY29tZXMgbGFyZ2VcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNvcnRlZFF1ZXVlKSkgcmV0dXJuIG5ldyBTb3J0ZWRRdWV1ZSgpXG4gIHRoaXMubGlzdCA9IFtdXG4gIHRoaXMud2FpdCA9IG51bGxcbiAgdGhpcy5sZW5ndGggPSAwXG59XG5cblNvcnRlZFF1ZXVlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGVudHJ5LCBjYikge1xuICB2YXIgaSA9IGluZGV4T2YodGhpcy5saXN0LCBlbnRyeS5jaGFuZ2UpXG4gIGlmIChpID09PSB0aGlzLmxpc3QubGVuZ3RoKSB0aGlzLmxpc3QucHVzaChlbnRyeSlcbiAgZWxzZSB0aGlzLmxpc3Quc3BsaWNlKGksIDAsIGVudHJ5KVxuICB0aGlzLmxlbmd0aCsrXG5cbiAgaWYgKHRoaXMud2FpdCkgdGhpcy5wdWxsKHRoaXMud2FpdClcbiAgaWYgKGNiKSBjYigpXG59XG5cblNvcnRlZFF1ZXVlLnByb3RvdHlwZS5wdWxsID0gZnVuY3Rpb24gKGNiKSB7XG4gIGlmICghdGhpcy5saXN0Lmxlbmd0aCkge1xuICAgIHRoaXMud2FpdCA9IGNiXG4gICAgcmV0dXJuXG4gIH1cblxuICB0aGlzLndhaXQgPSBudWxsXG5cbiAgdmFyIG5leHQgPSB0aGlzLmxpc3Quc2hpZnQoKVxuICB0aGlzLmxlbmd0aC0tXG5cbiAgY2IobmV4dClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTb3J0ZWRRdWV1ZVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRhYmxlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHByb2Nlc3NOZXh0VGljayA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5Jyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5SZWFkYWJsZS5SZWFkYWJsZVN0YXRlID0gUmVhZGFibGVTdGF0ZTtcblxudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRUVsaXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RoO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW07XG4oZnVuY3Rpb24gKCl7dHJ5e1xuICBTdHJlYW0gPSByZXF1aXJlKCdzdCcgKyAncmVhbScpO1xufWNhdGNoKF8pe31maW5hbGx5e1xuICBpZiAoIVN0cmVhbSlcbiAgICBTdHJlYW0gPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG59fSgpKVxuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgZGVidWdVdGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGRlYnVnO1xuaWYgKGRlYnVnVXRpbCAmJiBkZWJ1Z1V0aWwuZGVidWdsb2cpIHtcbiAgZGVidWcgPSBkZWJ1Z1V0aWwuZGVidWdsb2coJ3N0cmVhbScpO1xufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbiAoKSB7fTtcbn1cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgU3RyaW5nRGVjb2RlcjtcblxudXRpbC5pbmhlcml0cyhSZWFkYWJsZSwgU3RyZWFtKTtcblxudmFyIER1cGxleDtcbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleClcbiAgICB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciBkZWZhdWx0SHdtID0gdGhpcy5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IChod20gfHwgaHdtID09PSAwKSA/IGh3bSA6IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSB+fnRoaXMuaGlnaFdhdGVyTWFyaztcblxuICB0aGlzLmJ1ZmZlciA9IFtdO1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIHRoaXMucGlwZXMgPSBudWxsO1xuICB0aGlzLnBpcGVzQ291bnQgPSAwO1xuICB0aGlzLmZsb3dpbmcgPSBudWxsO1xuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIHRoaXMuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyB3aGVuZXZlciB3ZSByZXR1cm4gbnVsbCwgdGhlbiB3ZSBzZXQgYSBmbGFnIHRvIHNheVxuICAvLyB0aGF0IHdlJ3JlIGF3YWl0aW5nIGEgJ3JlYWRhYmxlJyBldmVudCBlbWlzc2lvbi5cbiAgdGhpcy5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZUxpc3RlbmluZyA9IGZhbHNlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIHdoZW4gcGlwaW5nLCB3ZSBvbmx5IGNhcmUgYWJvdXQgJ3JlYWRhYmxlJyBldmVudHMgdGhhdCBoYXBwZW5cbiAgLy8gYWZ0ZXIgcmVhZCgpaW5nIGFsbCB0aGUgYnl0ZXMgYW5kIG5vdCBnZXR0aW5nIGFueSBwdXNoYmFjay5cbiAgdGhpcy5yYW5PdXQgPSBmYWxzZTtcblxuICAvLyB0aGUgbnVtYmVyIG9mIHdyaXRlcnMgdGhhdCBhcmUgYXdhaXRpbmcgYSBkcmFpbiBldmVudCBpbiAucGlwZSgpc1xuICB0aGlzLmF3YWl0RHJhaW4gPSAwO1xuXG4gIC8vIGlmIHRydWUsIGEgbWF5YmVSZWFkTW9yZSBoYXMgYmVlbiBzY2hlZHVsZWRcbiAgdGhpcy5yZWFkaW5nTW9yZSA9IGZhbHNlO1xuXG4gIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gIHRoaXMuZW5jb2RpbmcgPSBudWxsO1xuICBpZiAob3B0aW9ucy5lbmNvZGluZykge1xuICAgIGlmICghU3RyaW5nRGVjb2RlcilcbiAgICAgIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICAgIHRoaXMuZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKG9wdGlvbnMuZW5jb2RpbmcpO1xuICAgIHRoaXMuZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nO1xuICB9XG59XG5cbnZhciBEdXBsZXg7XG5mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSlcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlKG9wdGlvbnMpO1xuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBuZXcgUmVhZGFibGVTdGF0ZShvcHRpb25zLCB0aGlzKTtcblxuICAvLyBsZWdhY3lcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMucmVhZCA9PT0gJ2Z1bmN0aW9uJylcbiAgICB0aGlzLl9yZWFkID0gb3B0aW9ucy5yZWFkO1xuXG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG4vLyBNYW51YWxseSBzaG92ZSBzb21ldGhpbmcgaW50byB0aGUgcmVhZCgpIGJ1ZmZlci5cbi8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBoaWdoV2F0ZXJNYXJrIGhhcyBub3QgYmVlbiBoaXQgeWV0LFxuLy8gc2ltaWxhciB0byBob3cgV3JpdGFibGUud3JpdGUoKSByZXR1cm5zIHRydWUgaWYgeW91IHNob3VsZFxuLy8gd3JpdGUoKSBzb21lIG1vcmUuXG5SZWFkYWJsZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuXG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBlbmNvZGluZyB8fCBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgaWYgKGVuY29kaW5nICE9PSBzdGF0ZS5lbmNvZGluZykge1xuICAgICAgY2h1bmsgPSBuZXcgQnVmZmVyKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICBlbmNvZGluZyA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGZhbHNlKTtcbn07XG5cbi8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpXG5SZWFkYWJsZS5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uKGNodW5rKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgJycsIHRydWUpO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLmlzUGF1c2VkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPT09IGZhbHNlO1xufTtcblxuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQpIHtcbiAgdmFyIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG4gIGlmIChlcikge1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfSBlbHNlIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpO1xuICB9IGVsc2UgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkge1xuICAgIGlmIChzdGF0ZS5lbmRlZCAmJiAhYWRkVG9Gcm9udCkge1xuICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoJ3N0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GJyk7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZEVtaXR0ZWQgJiYgYWRkVG9Gcm9udCkge1xuICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoJ3N0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50Jyk7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIWFkZFRvRnJvbnQgJiYgIWVuY29kaW5nKVxuICAgICAgICBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspO1xuXG4gICAgICBpZiAoIWFkZFRvRnJvbnQpXG4gICAgICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcblxuICAgICAgLy8gaWYgd2Ugd2FudCB0aGUgZGF0YSBub3csIGp1c3QgZW1pdCBpdC5cbiAgICAgIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuc3luYykge1xuICAgICAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgICAgIGlmIChhZGRUb0Zyb250KVxuICAgICAgICAgIHN0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcblxuICAgICAgICBpZiAoc3RhdGUubmVlZFJlYWRhYmxlKVxuICAgICAgICAgIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xuICAgICAgfVxuXG4gICAgICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBuZWVkTW9yZURhdGEoc3RhdGUpO1xufVxuXG5cbi8vIGlmIGl0J3MgcGFzdCB0aGUgaGlnaCB3YXRlciBtYXJrLCB3ZSBjYW4gcHVzaCBpbiBzb21lIG1vcmUuXG4vLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZVxuLy8gbW9yZSBieXRlcy4gIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsXG4vLyBzdWNoIGFzIHRoZSByZXBsLiAgQWxzbywgaWYgdGhlIHB1c2goKSB0cmlnZ2VyZWQgYVxuLy8gcmVhZGFibGUgZXZlbnQsIGFuZCB0aGUgdXNlciBjYWxsZWQgcmVhZChsYXJnZU51bWJlcikgc3VjaCB0aGF0XG4vLyBuZWVkUmVhZGFibGUgd2FzIHNldCwgdGhlbiB3ZSBvdWdodCB0byBwdXNoIG1vcmUsIHNvIHRoYXQgYW5vdGhlclxuLy8gJ3JlYWRhYmxlJyBldmVudCB3aWxsIGJlIHRyaWdnZXJlZC5cbmZ1bmN0aW9uIG5lZWRNb3JlRGF0YShzdGF0ZSkge1xuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmXG4gICAgICAgICAoc3RhdGUubmVlZFJlYWRhYmxlIHx8XG4gICAgICAgICAgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fFxuICAgICAgICAgIHN0YXRlLmxlbmd0aCA9PT0gMCk7XG59XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oZW5jKSB7XG4gIGlmICghU3RyaW5nRGVjb2RlcilcbiAgICBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoZW5jKTtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IGVuYztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBEb24ndCByYWlzZSB0aGUgaHdtID4gOE1CXG52YXIgTUFYX0hXTSA9IDB4ODAwMDAwO1xuZnVuY3Rpb24gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobikge1xuICBpZiAobiA+PSBNQVhfSFdNKSB7XG4gICAgbiA9IE1BWF9IV007XG4gIH0gZWxzZSB7XG4gICAgLy8gR2V0IHRoZSBuZXh0IGhpZ2hlc3QgcG93ZXIgb2YgMlxuICAgIG4tLTtcbiAgICBuIHw9IG4gPj4+IDE7XG4gICAgbiB8PSBuID4+PiAyO1xuICAgIG4gfD0gbiA+Pj4gNDtcbiAgICBuIHw9IG4gPj4+IDg7XG4gICAgbiB8PSBuID4+PiAxNjtcbiAgICBuKys7XG4gIH1cbiAgcmV0dXJuIG47XG59XG5cbmZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobiwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZClcbiAgICByZXR1cm4gMDtcblxuICBpZiAoc3RhdGUub2JqZWN0TW9kZSlcbiAgICByZXR1cm4gbiA9PT0gMCA/IDAgOiAxO1xuXG4gIGlmIChuID09PSBudWxsIHx8IGlzTmFOKG4pKSB7XG4gICAgLy8gb25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUuYnVmZmVyLmxlbmd0aClcbiAgICAgIHJldHVybiBzdGF0ZS5idWZmZXJbMF0ubGVuZ3RoO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBzdGF0ZS5sZW5ndGg7XG4gIH1cblxuICBpZiAobiA8PSAwKVxuICAgIHJldHVybiAwO1xuXG4gIC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSB0YXJnZXQgYnVmZmVyIGxldmVsLFxuICAvLyB0aGVuIHJhaXNlIHRoZSB3YXRlciBtYXJrLiAgQnVtcCB1cCB0byB0aGUgbmV4dCBoaWdoZXN0XG4gIC8vIHBvd2VyIG9mIDIsIHRvIHByZXZlbnQgaW5jcmVhc2luZyBpdCBleGNlc3NpdmVseSBpbiB0aW55XG4gIC8vIGFtb3VudHMuXG4gIGlmIChuID4gc3RhdGUuaGlnaFdhdGVyTWFyaylcbiAgICBzdGF0ZS5oaWdoV2F0ZXJNYXJrID0gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobik7XG5cbiAgLy8gZG9uJ3QgaGF2ZSB0aGF0IG11Y2guICByZXR1cm4gbnVsbCwgdW5sZXNzIHdlJ3ZlIGVuZGVkLlxuICBpZiAobiA+IHN0YXRlLmxlbmd0aCkge1xuICAgIGlmICghc3RhdGUuZW5kZWQpIHtcbiAgICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbjtcbn1cblxuLy8geW91IGNhbiBvdmVycmlkZSBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBhc3luYyBfcmVhZChuKSBiZWxvdy5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24obikge1xuICBkZWJ1ZygncmVhZCcsIG4pO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgbk9yaWcgPSBuO1xuXG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA+IDApXG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgLy8gaWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAobiA9PT0gMCAmJlxuICAgICAgc3RhdGUubmVlZFJlYWRhYmxlICYmXG4gICAgICAoc3RhdGUubGVuZ3RoID49IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgZGVidWcoJ3JlYWQ6IGVtaXRSZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpXG4gICAgICBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICBlbHNlXG4gICAgICBlbWl0UmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBuID0gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSk7XG5cbiAgLy8gaWYgd2UndmUgZW5kZWQsIGFuZCB3ZSdyZSBub3cgY2xlYXIsIHRoZW4gZmluaXNoIGl0IHVwLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkge1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApXG4gICAgICBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEFsbCB0aGUgYWN0dWFsIGNodW5rIGdlbmVyYXRpb24gbG9naWMgbmVlZHMgdG8gYmVcbiAgLy8gKmJlbG93KiB0aGUgY2FsbCB0byBfcmVhZC4gIFRoZSByZWFzb24gaXMgdGhhdCBpbiBjZXJ0YWluXG4gIC8vIHN5bnRoZXRpYyBzdHJlYW0gY2FzZXMsIHN1Y2ggYXMgcGFzc3Rocm91Z2ggc3RyZWFtcywgX3JlYWRcbiAgLy8gbWF5IGJlIGEgY29tcGxldGVseSBzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hpY2ggbWF5IGNoYW5nZVxuICAvLyB0aGUgc3RhdGUgb2YgdGhlIHJlYWQgYnVmZmVyLCBwcm92aWRpbmcgZW5vdWdoIGRhdGEgd2hlblxuICAvLyBiZWZvcmUgdGhlcmUgd2FzICpub3QqIGVub3VnaC5cbiAgLy9cbiAgLy8gU28sIHRoZSBzdGVwcyBhcmU6XG4gIC8vIDEuIEZpZ3VyZSBvdXQgd2hhdCB0aGUgc3RhdGUgb2YgdGhpbmdzIHdpbGwgYmUgYWZ0ZXIgd2UgZG9cbiAgLy8gYSByZWFkIGZyb20gdGhlIGJ1ZmZlci5cbiAgLy9cbiAgLy8gMi4gSWYgdGhhdCByZXN1bHRpbmcgc3RhdGUgd2lsbCB0cmlnZ2VyIGEgX3JlYWQsIHRoZW4gY2FsbCBfcmVhZC5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IGJlIGFzeW5jaHJvbm91cywgb3Igc3luY2hyb25vdXMuICBZZXMsIGl0IGlzXG4gIC8vIGRlZXBseSB1Z2x5IHRvIHdyaXRlIEFQSXMgdGhpcyB3YXksIGJ1dCB0aGF0IHN0aWxsIGRvZXNuJ3QgbWVhblxuICAvLyB0aGF0IHRoZSBSZWFkYWJsZSBjbGFzcyBzaG91bGQgYmVoYXZlIGltcHJvcGVybHksIGFzIHN0cmVhbXMgYXJlXG4gIC8vIGRlc2lnbmVkIHRvIGJlIHN5bmMvYXN5bmMgYWdub3N0aWMuXG4gIC8vIFRha2Ugbm90ZSBpZiB0aGUgX3JlYWQgY2FsbCBpcyBzeW5jIG9yIGFzeW5jIChpZSwgaWYgdGhlIHJlYWQgY2FsbFxuICAvLyBoYXMgcmV0dXJuZWQgeWV0KSwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IGl0J3Mgc2FmZSB0byBlbWl0XG4gIC8vICdyZWFkYWJsZScgZXRjLlxuICAvL1xuICAvLyAzLiBBY3R1YWxseSBwdWxsIHRoZSByZXF1ZXN0ZWQgY2h1bmtzIG91dCBvZiB0aGUgYnVmZmVyIGFuZCByZXR1cm4uXG5cbiAgLy8gaWYgd2UgbmVlZCBhIHJlYWRhYmxlIGV2ZW50LCB0aGVuIHdlIG5lZWQgdG8gZG8gc29tZSByZWFkaW5nLlxuICB2YXIgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlO1xuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZCk7XG5cbiAgLy8gaWYgd2UgY3VycmVudGx5IGhhdmUgbGVzcyB0aGFuIHRoZSBoaWdoV2F0ZXJNYXJrLCB0aGVuIGFsc28gcmVhZCBzb21lXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlO1xuICAgIGRlYnVnKCdsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyaycsIGRvUmVhZCk7XG4gIH1cblxuICAvLyBob3dldmVyLCBpZiB3ZSd2ZSBlbmRlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50LCBhbmQgaWYgd2UncmUgYWxyZWFkeVxuICAvLyByZWFkaW5nLCB0aGVuIGl0J3MgdW5uZWNlc3NhcnkuXG4gIGlmIChzdGF0ZS5lbmRlZCB8fCBzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZG9SZWFkID0gZmFsc2U7XG4gICAgZGVidWcoJ3JlYWRpbmcgb3IgZW5kZWQnLCBkb1JlYWQpO1xuICB9XG5cbiAgaWYgKGRvUmVhZCkge1xuICAgIGRlYnVnKCdkbyByZWFkJyk7XG4gICAgc3RhdGUucmVhZGluZyA9IHRydWU7XG4gICAgc3RhdGUuc3luYyA9IHRydWU7XG4gICAgLy8gaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgemVybywgdGhlbiB3ZSAqbmVlZCogYSByZWFkYWJsZSBldmVudC5cbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKVxuICAgICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvLyBjYWxsIGludGVybmFsIHJlYWQgbWV0aG9kXG4gICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKTtcbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7XG4gIH1cblxuICAvLyBJZiBfcmVhZCBwdXNoZWQgZGF0YSBzeW5jaHJvbm91c2x5LCB0aGVuIGByZWFkaW5nYCB3aWxsIGJlIGZhbHNlLFxuICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gIGlmIChkb1JlYWQgJiYgIXN0YXRlLnJlYWRpbmcpXG4gICAgbiA9IGhvd011Y2hUb1JlYWQobk9yaWcsIHN0YXRlKTtcblxuICB2YXIgcmV0O1xuICBpZiAobiA+IDApXG4gICAgcmV0ID0gZnJvbUxpc3Qobiwgc3RhdGUpO1xuICBlbHNlXG4gICAgcmV0ID0gbnVsbDtcblxuICBpZiAocmV0ID09PSBudWxsKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBuID0gMDtcbiAgfVxuXG4gIHN0YXRlLmxlbmd0aCAtPSBuO1xuXG4gIC8vIElmIHdlIGhhdmUgbm90aGluZyBpbiB0aGUgYnVmZmVyLCB0aGVuIHdlIHdhbnQgdG8ga25vd1xuICAvLyBhcyBzb29uIGFzIHdlICpkbyogZ2V0IHNvbWV0aGluZyBpbnRvIHRoZSBidWZmZXIuXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLmVuZGVkKVxuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICBpZiAobk9yaWcgIT09IG4gJiYgc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoID09PSAwKVxuICAgIGVuZFJlYWRhYmxlKHRoaXMpO1xuXG4gIGlmIChyZXQgIT09IG51bGwpXG4gICAgdGhpcy5lbWl0KCdkYXRhJywgcmV0KTtcblxuICByZXR1cm4gcmV0O1xufTtcblxuZnVuY3Rpb24gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuaykge1xuICB2YXIgZXIgPSBudWxsO1xuICBpZiAoIShCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSAmJlxuICAgICAgdHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJlxuICAgICAgY2h1bmsgIT09IG51bGwgJiZcbiAgICAgIGNodW5rICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgcmV0dXJuIGVyO1xufVxuXG5cbmZ1bmN0aW9uIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUuZW5kZWQpIHJldHVybjtcbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuXG4gIC8vIGVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBpZiAoc3RhdGUuc3luYylcbiAgICAgIHByb2Nlc3NOZXh0VGljayhlbWl0UmVhZGFibGVfLCBzdHJlYW0pO1xuICAgIGVsc2VcbiAgICAgIGVtaXRSZWFkYWJsZV8oc3RyZWFtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGVfKHN0cmVhbSkge1xuICBkZWJ1ZygnZW1pdCByZWFkYWJsZScpO1xuICBzdHJlYW0uZW1pdCgncmVhZGFibGUnKTtcbiAgZmxvdyhzdHJlYW0pO1xufVxuXG5cbi8vIGF0IHRoaXMgcG9pbnQsIHRoZSB1c2VyIGhhcyBwcmVzdW1hYmx5IHNlZW4gdGhlICdyZWFkYWJsZScgZXZlbnQsXG4vLyBhbmQgY2FsbGVkIHJlYWQoKSB0byBjb25zdW1lIHNvbWUgZGF0YS4gIHRoYXQgbWF5IGhhdmUgdHJpZ2dlcmVkXG4vLyBpbiB0dXJuIGFub3RoZXIgX3JlYWQobikgY2FsbCwgaW4gd2hpY2ggY2FzZSByZWFkaW5nID0gdHJ1ZSBpZlxuLy8gaXQncyBpbiBwcm9ncmVzcy5cbi8vIEhvd2V2ZXIsIGlmIHdlJ3JlIG5vdCBlbmRlZCwgb3IgcmVhZGluZywgYW5kIHRoZSBsZW5ndGggPCBod20sXG4vLyB0aGVuIGdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIG1vcmUgcHJlZW1wdGl2ZWx5LlxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWU7XG4gICAgcHJvY2Vzc05leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gIHdoaWxlICghc3RhdGUucmVhZGluZyAmJiAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiZcbiAgICAgICAgIHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkZWJ1ZygnbWF5YmVSZWFkTW9yZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgICBpZiAobGVuID09PSBzdGF0ZS5sZW5ndGgpXG4gICAgICAvLyBkaWRuJ3QgZ2V0IGFueSBkYXRhLCBzdG9wIHNwaW5uaW5nLlxuICAgICAgYnJlYWs7XG4gICAgZWxzZVxuICAgICAgbGVuID0gc3RhdGUubGVuZ3RoO1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2U7XG59XG5cbi8vIGFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24obikge1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKGRlc3QsIHBpcGVPcHRzKSB7XG4gIHZhciBzcmMgPSB0aGlzO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuXG4gIHN3aXRjaCAoc3RhdGUucGlwZXNDb3VudCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHN0YXRlLnBpcGVzID0gZGVzdDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTpcbiAgICAgIHN0YXRlLnBpcGVzID0gW3N0YXRlLnBpcGVzLCBkZXN0XTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBzdGF0ZS5waXBlcy5wdXNoKGRlc3QpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgc3RhdGUucGlwZXNDb3VudCArPSAxO1xuICBkZWJ1ZygncGlwZSBjb3VudD0lZCBvcHRzPSVqJywgc3RhdGUucGlwZXNDb3VudCwgcGlwZU9wdHMpO1xuXG4gIHZhciBkb0VuZCA9ICghcGlwZU9wdHMgfHwgcGlwZU9wdHMuZW5kICE9PSBmYWxzZSkgJiZcbiAgICAgICAgICAgICAgZGVzdCAhPT0gcHJvY2Vzcy5zdGRvdXQgJiZcbiAgICAgICAgICAgICAgZGVzdCAhPT0gcHJvY2Vzcy5zdGRlcnI7XG5cbiAgdmFyIGVuZEZuID0gZG9FbmQgPyBvbmVuZCA6IGNsZWFudXA7XG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKVxuICAgIHByb2Nlc3NOZXh0VGljayhlbmRGbik7XG4gIGVsc2VcbiAgICBzcmMub25jZSgnZW5kJywgZW5kRm4pO1xuXG4gIGRlc3Qub24oJ3VucGlwZScsIG9udW5waXBlKTtcbiAgZnVuY3Rpb24gb251bnBpcGUocmVhZGFibGUpIHtcbiAgICBkZWJ1Zygnb251bnBpcGUnKTtcbiAgICBpZiAocmVhZGFibGUgPT09IHNyYykge1xuICAgICAgY2xlYW51cCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGRlYnVnKCdvbmVuZCcpO1xuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuICAvLyB3aGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAvLyBoYW5kbGVyIGluIGZsb3coKSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgcmVwZWF0ZWRseSBpc1xuICAvLyB0b28gc2xvdy5cbiAgdmFyIG9uZHJhaW4gPSBwaXBlT25EcmFpbihzcmMpO1xuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gIHZhciBjbGVhbmVkVXAgPSBmYWxzZTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZygnY2xlYW51cCcpO1xuICAgIC8vIGNsZWFudXAgZXZlbnQgaGFuZGxlcnMgb25jZSB0aGUgcGlwZSBpcyBicm9rZW5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigndW5waXBlJywgb251bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgY2xlYW51cCk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcblxuICAgIGNsZWFuZWRVcCA9IHRydWU7XG5cbiAgICAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluICYmXG4gICAgICAgICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpXG4gICAgICBvbmRyYWluKCk7XG4gIH1cblxuICBzcmMub24oJ2RhdGEnLCBvbmRhdGEpO1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgdmFyIHJldCA9IGRlc3Qud3JpdGUoY2h1bmspO1xuICAgIGlmIChmYWxzZSA9PT0gcmV0KSB7XG4gICAgICAvLyBJZiB0aGUgdXNlciB1bnBpcGVkIGR1cmluZyBgZGVzdC53cml0ZSgpYCwgaXQgaXMgcG9zc2libGVcbiAgICAgIC8vIHRvIGdldCBzdHVjayBpbiBhIHBlcm1hbmVudGx5IHBhdXNlZCBzdGF0ZSBpZiB0aGF0IHdyaXRlXG4gICAgICAvLyBhbHNvIHJldHVybmVkIGZhbHNlLlxuICAgICAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEgJiZcbiAgICAgICAgICBzdGF0ZS5waXBlc1swXSA9PT0gZGVzdCAmJlxuICAgICAgICAgIHNyYy5saXN0ZW5lckNvdW50KCdkYXRhJykgPT09IDEgJiZcbiAgICAgICAgICAhY2xlYW5lZFVwKSB7XG4gICAgICAgIGRlYnVnKCdmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UnLCBzcmMuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbik7XG4gICAgICAgIHNyYy5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKys7XG4gICAgICB9XG4gICAgICBzcmMucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgZGVzdCBoYXMgYW4gZXJyb3IsIHRoZW4gc3RvcCBwaXBpbmcgaW50byBpdC5cbiAgLy8gaG93ZXZlciwgZG9uJ3Qgc3VwcHJlc3MgdGhlIHRocm93aW5nIGJlaGF2aW9yIGZvciB0aGlzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgZGVidWcoJ29uZXJyb3InLCBlcik7XG4gICAgdW5waXBlKCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBpZiAoRUVsaXN0ZW5lckNvdW50KGRlc3QsICdlcnJvcicpID09PSAwKVxuICAgICAgZGVzdC5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfVxuICAvLyBUaGlzIGlzIGEgYnJ1dGFsbHkgdWdseSBoYWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBlcnJvciBoYW5kbGVyXG4gIC8vIGlzIGF0dGFjaGVkIGJlZm9yZSBhbnkgdXNlcmxhbmQgb25lcy4gIE5FVkVSIERPIFRISVMuXG4gIGlmICghZGVzdC5fZXZlbnRzIHx8ICFkZXN0Ll9ldmVudHMuZXJyb3IpXG4gICAgZGVzdC5vbignZXJyb3InLCBvbmVycm9yKTtcbiAgZWxzZSBpZiAoaXNBcnJheShkZXN0Ll9ldmVudHMuZXJyb3IpKVxuICAgIGRlc3QuX2V2ZW50cy5lcnJvci51bnNoaWZ0KG9uZXJyb3IpO1xuICBlbHNlXG4gICAgZGVzdC5fZXZlbnRzLmVycm9yID0gW29uZXJyb3IsIGRlc3QuX2V2ZW50cy5lcnJvcl07XG5cblxuICAvLyBCb3RoIGNsb3NlIGFuZCBmaW5pc2ggc2hvdWxkIHRyaWdnZXIgdW5waXBlLCBidXQgb25seSBvbmNlLlxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2Nsb3NlJywgb25jbG9zZSk7XG4gIGZ1bmN0aW9uIG9uZmluaXNoKCkge1xuICAgIGRlYnVnKCdvbmZpbmlzaCcpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG5cbiAgZnVuY3Rpb24gdW5waXBlKCkge1xuICAgIGRlYnVnKCd1bnBpcGUnKTtcbiAgICBzcmMudW5waXBlKGRlc3QpO1xuICB9XG5cbiAgLy8gdGVsbCB0aGUgZGVzdCB0aGF0IGl0J3MgYmVpbmcgcGlwZWQgdG9cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKTtcblxuICAvLyBzdGFydCB0aGUgZmxvdyBpZiBpdCBoYXNuJ3QgYmVlbiBzdGFydGVkIGFscmVhZHkuXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpO1xuICAgIHNyYy5yZXN1bWUoKTtcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufTtcblxuZnVuY3Rpb24gcGlwZU9uRHJhaW4oc3JjKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGU7XG4gICAgZGVidWcoJ3BpcGVPbkRyYWluJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4pXG4gICAgICBzdGF0ZS5hd2FpdERyYWluLS07XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gPT09IDAgJiYgRUVsaXN0ZW5lckNvdW50KHNyYywgJ2RhdGEnKSkge1xuICAgICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgICBmbG93KHNyYyk7XG4gICAgfVxuICB9O1xufVxuXG5cblJlYWRhYmxlLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbihkZXN0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgLy8gaWYgd2UncmUgbm90IHBpcGluZyBhbnl3aGVyZSwgdGhlbiBkbyBub3RoaW5nLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMClcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBqdXN0IG9uZSBkZXN0aW5hdGlvbi4gIG1vc3QgY29tbW9uIGNhc2UuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSB7XG4gICAgLy8gcGFzc2VkIGluIG9uZSwgYnV0IGl0J3Mgbm90IHRoZSByaWdodCBvbmUuXG4gICAgaWYgKGRlc3QgJiYgZGVzdCAhPT0gc3RhdGUucGlwZXMpXG4gICAgICByZXR1cm4gdGhpcztcblxuICAgIGlmICghZGVzdClcbiAgICAgIGRlc3QgPSBzdGF0ZS5waXBlcztcblxuICAgIC8vIGdvdCBhIG1hdGNoLlxuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgaWYgKGRlc3QpXG4gICAgICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gc2xvdyBjYXNlLiBtdWx0aXBsZSBwaXBlIGRlc3RpbmF0aW9ucy5cblxuICBpZiAoIWRlc3QpIHtcbiAgICAvLyByZW1vdmUgYWxsLlxuICAgIHZhciBkZXN0cyA9IHN0YXRlLnBpcGVzO1xuICAgIHZhciBsZW4gPSBzdGF0ZS5waXBlc0NvdW50O1xuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgZGVzdHNbaV0uZW1pdCgndW5waXBlJywgdGhpcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB0cnkgdG8gZmluZCB0aGUgcmlnaHQgb25lLlxuICB2YXIgaSA9IGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpO1xuICBpZiAoaSA9PT0gLTEpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgc3RhdGUucGlwZXMuc3BsaWNlKGksIDEpO1xuICBzdGF0ZS5waXBlc0NvdW50IC09IDE7XG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKVxuICAgIHN0YXRlLnBpcGVzID0gc3RhdGUucGlwZXNbMF07XG5cbiAgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIHNldCB1cCBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBhc2tlZCBmb3Jcbi8vIEVuc3VyZSByZWFkYWJsZSBsaXN0ZW5lcnMgZXZlbnR1YWxseSBnZXQgc29tZXRoaW5nXG5SZWFkYWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbihldiwgZm4pIHtcbiAgdmFyIHJlcyA9IFN0cmVhbS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCBldiwgZm4pO1xuXG4gIC8vIElmIGxpc3RlbmluZyB0byBkYXRhLCBhbmQgaXQgaGFzIG5vdCBleHBsaWNpdGx5IGJlZW4gcGF1c2VkLFxuICAvLyB0aGVuIGNhbGwgcmVzdW1lIHRvIHN0YXJ0IHRoZSBmbG93IG9mIGRhdGEgb24gdGhlIG5leHQgdGljay5cbiAgaWYgKGV2ID09PSAnZGF0YScgJiYgZmFsc2UgIT09IHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZykge1xuICAgIHRoaXMucmVzdW1lKCk7XG4gIH1cblxuICBpZiAoZXYgPT09ICdyZWFkYWJsZScgJiYgdGhpcy5yZWFkYWJsZSkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKCFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSB0cnVlO1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgICAgIHByb2Nlc3NOZXh0VGljayhuUmVhZGluZ05leHRUaWNrLCB0aGlzKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBSZWFkYWJsZS5wcm90b3R5cGUub247XG5cbmZ1bmN0aW9uIG5SZWFkaW5nTmV4dFRpY2soc2VsZikge1xuICBkZWJ1ZygncmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwJyk7XG4gIHNlbGYucmVhZCgwKTtcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lJyk7XG4gICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgcmVzdW1lKHRoaXMsIHN0YXRlKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIHJlc3VtZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVzdW1lU2NoZWR1bGVkKSB7XG4gICAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBwcm9jZXNzTmV4dFRpY2socmVzdW1lXywgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lXyhzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZykge1xuICAgIGRlYnVnKCdyZXN1bWUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gIH1cblxuICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpO1xuICBmbG93KHN0cmVhbSk7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKVxuICAgIHN0cmVhbS5yZWFkKDApO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbigpIHtcbiAgZGVidWcoJ2NhbGwgcGF1c2UgZmxvd2luZz0laicsIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyk7XG4gIGlmIChmYWxzZSAhPT0gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3BhdXNlJyk7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0KCdwYXVzZScpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gZmxvdyhzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZmxvdycsIHN0YXRlLmZsb3dpbmcpO1xuICBpZiAoc3RhdGUuZmxvd2luZykge1xuICAgIGRvIHtcbiAgICAgIHZhciBjaHVuayA9IHN0cmVhbS5yZWFkKCk7XG4gICAgfSB3aGlsZSAobnVsbCAhPT0gY2h1bmsgJiYgc3RhdGUuZmxvd2luZyk7XG4gIH1cbn1cblxuLy8gd3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHBhdXNlZCA9IGZhbHNlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBlbmQnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKVxuICAgICAgICBzZWxmLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIHNlbGYucHVzaChudWxsKTtcbiAgfSk7XG5cbiAgc3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24oY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpXG4gICAgICBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspO1xuXG4gICAgLy8gZG9uJ3Qgc2tpcCBvdmVyIGZhbHN5IHZhbHVlcyBpbiBvYmplY3RNb2RlXG4gICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgJiYgKGNodW5rID09PSBudWxsIHx8IGNodW5rID09PSB1bmRlZmluZWQpKVxuICAgICAgcmV0dXJuO1xuICAgIGVsc2UgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmICghY2h1bmsgfHwgIWNodW5rLmxlbmd0aCkpXG4gICAgICByZXR1cm47XG5cbiAgICB2YXIgcmV0ID0gc2VsZi5wdXNoKGNodW5rKTtcbiAgICBpZiAoIXJldCkge1xuICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcHJveHkgYWxsIHRoZSBvdGhlciBtZXRob2RzLlxuICAvLyBpbXBvcnRhbnQgd2hlbiB3cmFwcGluZyBmaWx0ZXJzIGFuZCBkdXBsZXhlcy5cbiAgZm9yICh2YXIgaSBpbiBzdHJlYW0pIHtcbiAgICBpZiAodGhpc1tpXSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzdHJlYW1baV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNbaV0gPSBmdW5jdGlvbihtZXRob2QpIHsgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3RyZWFtW21ldGhvZF0uYXBwbHkoc3RyZWFtLCBhcmd1bWVudHMpO1xuICAgICAgfTsgfShpKTtcbiAgICB9XG4gIH1cblxuICAvLyBwcm94eSBjZXJ0YWluIGltcG9ydGFudCBldmVudHMuXG4gIHZhciBldmVudHMgPSBbJ2Vycm9yJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knLCAncGF1c2UnLCAncmVzdW1lJ107XG4gIGZvckVhY2goZXZlbnRzLCBmdW5jdGlvbihldikge1xuICAgIHN0cmVhbS5vbihldiwgc2VsZi5lbWl0LmJpbmQoc2VsZiwgZXYpKTtcbiAgfSk7XG5cbiAgLy8gd2hlbiB3ZSB0cnkgdG8gY29uc3VtZSBzb21lIG1vcmUgYnl0ZXMsIHNpbXBseSB1bnBhdXNlIHRoZVxuICAvLyB1bmRlcmx5aW5nIHN0cmVhbS5cbiAgc2VsZi5fcmVhZCA9IGZ1bmN0aW9uKG4pIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBfcmVhZCcsIG4pO1xuICAgIGlmIChwYXVzZWQpIHtcbiAgICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgICAgc3RyZWFtLnJlc3VtZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gc2VsZjtcbn07XG5cblxuLy8gZXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuUmVhZGFibGUuX2Zyb21MaXN0ID0gZnJvbUxpc3Q7XG5cbi8vIFBsdWNrIG9mZiBuIGJ5dGVzIGZyb20gYW4gYXJyYXkgb2YgYnVmZmVycy5cbi8vIExlbmd0aCBpcyB0aGUgY29tYmluZWQgbGVuZ3RocyBvZiBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIGxpc3QuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICB2YXIgbGlzdCA9IHN0YXRlLmJ1ZmZlcjtcbiAgdmFyIGxlbmd0aCA9IHN0YXRlLmxlbmd0aDtcbiAgdmFyIHN0cmluZ01vZGUgPSAhIXN0YXRlLmRlY29kZXI7XG4gIHZhciBvYmplY3RNb2RlID0gISFzdGF0ZS5vYmplY3RNb2RlO1xuICB2YXIgcmV0O1xuXG4gIC8vIG5vdGhpbmcgaW4gdGhlIGxpc3QsIGRlZmluaXRlbHkgZW1wdHkuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gbnVsbDtcblxuICBpZiAobGVuZ3RoID09PSAwKVxuICAgIHJldCA9IG51bGw7XG4gIGVsc2UgaWYgKG9iamVjdE1vZGUpXG4gICAgcmV0ID0gbGlzdC5zaGlmdCgpO1xuICBlbHNlIGlmICghbiB8fCBuID49IGxlbmd0aCkge1xuICAgIC8vIHJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgYXJyYXkuXG4gICAgaWYgKHN0cmluZ01vZGUpXG4gICAgICByZXQgPSBsaXN0LmpvaW4oJycpO1xuICAgIGVsc2UgaWYgKGxpc3QubGVuZ3RoID09PSAxKVxuICAgICAgcmV0ID0gbGlzdFswXTtcbiAgICBlbHNlXG4gICAgICByZXQgPSBCdWZmZXIuY29uY2F0KGxpc3QsIGxlbmd0aCk7XG4gICAgbGlzdC5sZW5ndGggPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQganVzdCBzb21lIG9mIGl0LlxuICAgIGlmIChuIDwgbGlzdFswXS5sZW5ndGgpIHtcbiAgICAgIC8vIGp1c3QgdGFrZSBhIHBhcnQgb2YgdGhlIGZpcnN0IGxpc3QgaXRlbS5cbiAgICAgIC8vIHNsaWNlIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzLlxuICAgICAgdmFyIGJ1ZiA9IGxpc3RbMF07XG4gICAgICByZXQgPSBidWYuc2xpY2UoMCwgbik7XG4gICAgICBsaXN0WzBdID0gYnVmLnNsaWNlKG4pO1xuICAgIH0gZWxzZSBpZiAobiA9PT0gbGlzdFswXS5sZW5ndGgpIHtcbiAgICAgIC8vIGZpcnN0IGxpc3QgaXMgYSBwZXJmZWN0IG1hdGNoXG4gICAgICByZXQgPSBsaXN0LnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbXBsZXggY2FzZS5cbiAgICAgIC8vIHdlIGhhdmUgZW5vdWdoIHRvIGNvdmVyIGl0LCBidXQgaXQgc3BhbnMgcGFzdCB0aGUgZmlyc3QgYnVmZmVyLlxuICAgICAgaWYgKHN0cmluZ01vZGUpXG4gICAgICAgIHJldCA9ICcnO1xuICAgICAgZWxzZVxuICAgICAgICByZXQgPSBuZXcgQnVmZmVyKG4pO1xuXG4gICAgICB2YXIgYyA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbCAmJiBjIDwgbjsgaSsrKSB7XG4gICAgICAgIHZhciBidWYgPSBsaXN0WzBdO1xuICAgICAgICB2YXIgY3B5ID0gTWF0aC5taW4obiAtIGMsIGJ1Zi5sZW5ndGgpO1xuXG4gICAgICAgIGlmIChzdHJpbmdNb2RlKVxuICAgICAgICAgIHJldCArPSBidWYuc2xpY2UoMCwgY3B5KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGJ1Zi5jb3B5KHJldCwgYywgMCwgY3B5KTtcblxuICAgICAgICBpZiAoY3B5IDwgYnVmLmxlbmd0aClcbiAgICAgICAgICBsaXN0WzBdID0gYnVmLnNsaWNlKGNweSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG5cbiAgICAgICAgYyArPSBjcHk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcblxuICAvLyBJZiB3ZSBnZXQgaGVyZSBiZWZvcmUgY29uc3VtaW5nIGFsbCB0aGUgYnl0ZXMsIHRoZW4gdGhhdCBpcyBhXG4gIC8vIGJ1ZyBpbiBub2RlLiAgU2hvdWxkIG5ldmVyIGhhcHBlbi5cbiAgaWYgKHN0YXRlLmxlbmd0aCA+IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdlbmRSZWFkYWJsZSBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO1xuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICBwcm9jZXNzTmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBvbmUgbGFzdCB1bnNoaWZ0LlxuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgc3RhdGUuZW5kRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvckVhY2ggKHhzLCBmKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZih4c1tpXSwgaSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5kZXhPZiAoeHMsIHgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoeHNbaV0gPT09IHgpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn1cbiIsInZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vdHJhbnNmb3JtJylcbiAgLCBpbmhlcml0cyAgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHNcbiAgLCB4dGVuZCAgICAgPSByZXF1aXJlKCd4dGVuZCcpXG5cbmZ1bmN0aW9uIERlc3Ryb3lhYmxlVHJhbnNmb3JtKG9wdHMpIHtcbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0cylcbiAgdGhpcy5fZGVzdHJveWVkID0gZmFsc2Vcbn1cblxuaW5oZXJpdHMoRGVzdHJveWFibGVUcmFuc2Zvcm0sIFRyYW5zZm9ybSlcblxuRGVzdHJveWFibGVUcmFuc2Zvcm0ucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbihlcnIpIHtcbiAgaWYgKHRoaXMuX2Rlc3Ryb3llZCkgcmV0dXJuXG4gIHRoaXMuX2Rlc3Ryb3llZCA9IHRydWVcbiAgXG4gIHZhciBzZWxmID0gdGhpc1xuICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgIGlmIChlcnIpXG4gICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgIHNlbGYuZW1pdCgnY2xvc2UnKVxuICB9KVxufVxuXG4vLyBhIG5vb3AgX3RyYW5zZm9ybSBmdW5jdGlvblxuZnVuY3Rpb24gbm9vcCAoY2h1bmssIGVuYywgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2sobnVsbCwgY2h1bmspXG59XG5cblxuLy8gY3JlYXRlIGEgbmV3IGV4cG9ydCBmdW5jdGlvbiwgdXNlZCBieSBib3RoIHRoZSBtYWluIGV4cG9ydCBhbmRcbi8vIHRoZSAuY3RvciBleHBvcnQsIGNvbnRhaW5zIGNvbW1vbiBsb2dpYyBmb3IgZGVhbGluZyB3aXRoIGFyZ3VtZW50c1xuZnVuY3Rpb24gdGhyb3VnaDIgKGNvbnN0cnVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24gKG9wdGlvbnMsIHRyYW5zZm9ybSwgZmx1c2gpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZmx1c2ggICAgID0gdHJhbnNmb3JtXG4gICAgICB0cmFuc2Zvcm0gPSBvcHRpb25zXG4gICAgICBvcHRpb25zICAgPSB7fVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHJhbnNmb3JtICE9ICdmdW5jdGlvbicpXG4gICAgICB0cmFuc2Zvcm0gPSBub29wXG5cbiAgICBpZiAodHlwZW9mIGZsdXNoICE9ICdmdW5jdGlvbicpXG4gICAgICBmbHVzaCA9IG51bGxcblxuICAgIHJldHVybiBjb25zdHJ1Y3Qob3B0aW9ucywgdHJhbnNmb3JtLCBmbHVzaClcbiAgfVxufVxuXG5cbi8vIG1haW4gZXhwb3J0LCBqdXN0IG1ha2UgbWUgYSB0cmFuc2Zvcm0gc3RyZWFtIVxubW9kdWxlLmV4cG9ydHMgPSB0aHJvdWdoMihmdW5jdGlvbiAob3B0aW9ucywgdHJhbnNmb3JtLCBmbHVzaCkge1xuICB2YXIgdDIgPSBuZXcgRGVzdHJveWFibGVUcmFuc2Zvcm0ob3B0aW9ucylcblxuICB0Mi5fdHJhbnNmb3JtID0gdHJhbnNmb3JtXG5cbiAgaWYgKGZsdXNoKVxuICAgIHQyLl9mbHVzaCA9IGZsdXNoXG5cbiAgcmV0dXJuIHQyXG59KVxuXG5cbi8vIG1ha2UgbWUgYSByZXVzYWJsZSBwcm90b3R5cGUgdGhhdCBJIGNhbiBgbmV3YCwgb3IgaW1wbGljaXRseSBgbmV3YFxuLy8gd2l0aCBhIGNvbnN0cnVjdG9yIGNhbGxcbm1vZHVsZS5leHBvcnRzLmN0b3IgPSB0aHJvdWdoMihmdW5jdGlvbiAob3B0aW9ucywgdHJhbnNmb3JtLCBmbHVzaCkge1xuICBmdW5jdGlvbiBUaHJvdWdoMiAob3ZlcnJpZGUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVGhyb3VnaDIpKVxuICAgICAgcmV0dXJuIG5ldyBUaHJvdWdoMihvdmVycmlkZSlcblxuICAgIHRoaXMub3B0aW9ucyA9IHh0ZW5kKG9wdGlvbnMsIG92ZXJyaWRlKVxuXG4gICAgRGVzdHJveWFibGVUcmFuc2Zvcm0uY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMpXG4gIH1cblxuICBpbmhlcml0cyhUaHJvdWdoMiwgRGVzdHJveWFibGVUcmFuc2Zvcm0pXG5cbiAgVGhyb3VnaDIucHJvdG90eXBlLl90cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cblxuICBpZiAoZmx1c2gpXG4gICAgVGhyb3VnaDIucHJvdG90eXBlLl9mbHVzaCA9IGZsdXNoXG5cbiAgcmV0dXJuIFRocm91Z2gyXG59KVxuXG5cbm1vZHVsZS5leHBvcnRzLm9iaiA9IHRocm91Z2gyKGZ1bmN0aW9uIChvcHRpb25zLCB0cmFuc2Zvcm0sIGZsdXNoKSB7XG4gIHZhciB0MiA9IG5ldyBEZXN0cm95YWJsZVRyYW5zZm9ybSh4dGVuZCh7IG9iamVjdE1vZGU6IHRydWUsIGhpZ2hXYXRlck1hcms6IDE2IH0sIG9wdGlvbnMpKVxuXG4gIHQyLl90cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cblxuICBpZiAoZmx1c2gpXG4gICAgdDIuX2ZsdXNoID0gZmx1c2hcblxuICByZXR1cm4gdDJcbn0pXG4iLCIndXNlIHN0cmljdCc7XG5cbi8qZ2xvYmFsIHdpbmRvdywgZ2xvYmFsKi9cblxudmFyIHJvb3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/XG4gICAgd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgP1xuICAgIGdsb2JhbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEluZGl2aWR1YWw7XG5cbmZ1bmN0aW9uIEluZGl2aWR1YWwoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgaW4gcm9vdCkge1xuICAgICAgICByZXR1cm4gcm9vdFtrZXldO1xuICAgIH1cblxuICAgIHJvb3Rba2V5XSA9IHZhbHVlO1xuXG4gICAgcmV0dXJuIHZhbHVlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgSW5kaXZpZHVhbCA9IHJlcXVpcmUoJy4vaW5kZXguanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPbmVWZXJzaW9uO1xuXG5mdW5jdGlvbiBPbmVWZXJzaW9uKG1vZHVsZU5hbWUsIHZlcnNpb24sIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciBrZXkgPSAnX19JTkRJVklEVUFMX09ORV9WRVJTSU9OXycgKyBtb2R1bGVOYW1lO1xuICAgIHZhciBlbmZvcmNlS2V5ID0ga2V5ICsgJ19FTkZPUkNFX1NJTkdMRVRPTic7XG5cbiAgICB2YXIgdmVyc2lvblZhbHVlID0gSW5kaXZpZHVhbChlbmZvcmNlS2V5LCB2ZXJzaW9uKTtcblxuICAgIGlmICh2ZXJzaW9uVmFsdWUgIT09IHZlcnNpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBoYXZlIG9uZSBjb3B5IG9mICcgK1xuICAgICAgICAgICAgbW9kdWxlTmFtZSArICcuXFxuJyArXG4gICAgICAgICAgICAnWW91IGFscmVhZHkgaGF2ZSB2ZXJzaW9uICcgKyB2ZXJzaW9uVmFsdWUgK1xuICAgICAgICAgICAgJyBpbnN0YWxsZWQuXFxuJyArXG4gICAgICAgICAgICAnVGhpcyBtZWFucyB5b3UgY2Fubm90IGluc3RhbGwgdmVyc2lvbiAnICsgdmVyc2lvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIEluZGl2aWR1YWwoa2V5LCBkZWZhdWx0VmFsdWUpO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcblxuZnVuY3Rpb24gaXNGdW5jdGlvbiAoZm4pIHtcbiAgdmFyIHN0cmluZyA9IHRvU3RyaW5nLmNhbGwoZm4pXG4gIHJldHVybiBzdHJpbmcgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXScgfHxcbiAgICAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIHN0cmluZyAhPT0gJ1tvYmplY3QgUmVnRXhwXScpIHx8XG4gICAgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgIC8vIElFOCBhbmQgYmVsb3dcbiAgICAgKGZuID09PSB3aW5kb3cuc2V0VGltZW91dCB8fFxuICAgICAgZm4gPT09IHdpbmRvdy5hbGVydCB8fFxuICAgICAgZm4gPT09IHdpbmRvdy5jb25maXJtIHx8XG4gICAgICBmbiA9PT0gd2luZG93LnByb21wdCkpXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNPYmplY3QoeCkge1xuXHRyZXR1cm4gdHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiYgeCAhPT0gbnVsbDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIlxuZnVuY3Rpb24gaXNQcm9wZXJ0eShzdHIpIHtcbiAgcmV0dXJuIC9eWyRBLVpcXF9hLXpcXHhhYVxceGI1XFx4YmFcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx1MDJjMVxcdTAyYzYtXFx1MDJkMVxcdTAyZTAtXFx1MDJlNFxcdTAyZWNcXHUwMmVlXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdhLVxcdTAzN2RcXHUwMzg2XFx1MDM4OC1cXHUwMzhhXFx1MDM4Y1xcdTAzOGUtXFx1MDNhMVxcdTAzYTMtXFx1MDNmNVxcdTAzZjctXFx1MDQ4MVxcdTA0OGEtXFx1MDUyN1xcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYxLVxcdTA1ODdcXHUwNWQwLVxcdTA1ZWFcXHUwNWYwLVxcdTA1ZjJcXHUwNjIwLVxcdTA2NGFcXHUwNjZlXFx1MDY2ZlxcdTA2NzEtXFx1MDZkM1xcdTA2ZDVcXHUwNmU1XFx1MDZlNlxcdTA2ZWVcXHUwNmVmXFx1MDZmYS1cXHUwNmZjXFx1MDZmZlxcdTA3MTBcXHUwNzEyLVxcdTA3MmZcXHUwNzRkLVxcdTA3YTVcXHUwN2IxXFx1MDdjYS1cXHUwN2VhXFx1MDdmNFxcdTA3ZjVcXHUwN2ZhXFx1MDgwMC1cXHUwODE1XFx1MDgxYVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDhhMFxcdTA4YTItXFx1MDhhY1xcdTA5MDQtXFx1MDkzOVxcdTA5M2RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTc3XFx1MDk3OS1cXHUwOTdmXFx1MDk4NS1cXHUwOThjXFx1MDk4ZlxcdTA5OTBcXHUwOTkzLVxcdTA5YThcXHUwOWFhLVxcdTA5YjBcXHUwOWIyXFx1MDliNi1cXHUwOWI5XFx1MDliZFxcdTA5Y2VcXHUwOWRjXFx1MDlkZFxcdTA5ZGYtXFx1MDllMVxcdTA5ZjBcXHUwOWYxXFx1MGEwNS1cXHUwYTBhXFx1MGEwZlxcdTBhMTBcXHUwYTEzLVxcdTBhMjhcXHUwYTJhLVxcdTBhMzBcXHUwYTMyXFx1MGEzM1xcdTBhMzVcXHUwYTM2XFx1MGEzOFxcdTBhMzlcXHUwYTU5LVxcdTBhNWNcXHUwYTVlXFx1MGE3Mi1cXHUwYTc0XFx1MGE4NS1cXHUwYThkXFx1MGE4Zi1cXHUwYTkxXFx1MGE5My1cXHUwYWE4XFx1MGFhYS1cXHUwYWIwXFx1MGFiMlxcdTBhYjNcXHUwYWI1LVxcdTBhYjlcXHUwYWJkXFx1MGFkMFxcdTBhZTBcXHUwYWUxXFx1MGIwNS1cXHUwYjBjXFx1MGIwZlxcdTBiMTBcXHUwYjEzLVxcdTBiMjhcXHUwYjJhLVxcdTBiMzBcXHUwYjMyXFx1MGIzM1xcdTBiMzUtXFx1MGIzOVxcdTBiM2RcXHUwYjVjXFx1MGI1ZFxcdTBiNWYtXFx1MGI2MVxcdTBiNzFcXHUwYjgzXFx1MGI4NS1cXHUwYjhhXFx1MGI4ZS1cXHUwYjkwXFx1MGI5Mi1cXHUwYjk1XFx1MGI5OVxcdTBiOWFcXHUwYjljXFx1MGI5ZVxcdTBiOWZcXHUwYmEzXFx1MGJhNFxcdTBiYTgtXFx1MGJhYVxcdTBiYWUtXFx1MGJiOVxcdTBiZDBcXHUwYzA1LVxcdTBjMGNcXHUwYzBlLVxcdTBjMTBcXHUwYzEyLVxcdTBjMjhcXHUwYzJhLVxcdTBjMzNcXHUwYzM1LVxcdTBjMzlcXHUwYzNkXFx1MGM1OFxcdTBjNTlcXHUwYzYwXFx1MGM2MVxcdTBjODUtXFx1MGM4Y1xcdTBjOGUtXFx1MGM5MFxcdTBjOTItXFx1MGNhOFxcdTBjYWEtXFx1MGNiM1xcdTBjYjUtXFx1MGNiOVxcdTBjYmRcXHUwY2RlXFx1MGNlMFxcdTBjZTFcXHUwY2YxXFx1MGNmMlxcdTBkMDUtXFx1MGQwY1xcdTBkMGUtXFx1MGQxMFxcdTBkMTItXFx1MGQzYVxcdTBkM2RcXHUwZDRlXFx1MGQ2MFxcdTBkNjFcXHUwZDdhLVxcdTBkN2ZcXHUwZDg1LVxcdTBkOTZcXHUwZDlhLVxcdTBkYjFcXHUwZGIzLVxcdTBkYmJcXHUwZGJkXFx1MGRjMC1cXHUwZGM2XFx1MGUwMS1cXHUwZTMwXFx1MGUzMlxcdTBlMzNcXHUwZTQwLVxcdTBlNDZcXHUwZTgxXFx1MGU4MlxcdTBlODRcXHUwZTg3XFx1MGU4OFxcdTBlOGFcXHUwZThkXFx1MGU5NC1cXHUwZTk3XFx1MGU5OS1cXHUwZTlmXFx1MGVhMS1cXHUwZWEzXFx1MGVhNVxcdTBlYTdcXHUwZWFhXFx1MGVhYlxcdTBlYWQtXFx1MGViMFxcdTBlYjJcXHUwZWIzXFx1MGViZFxcdTBlYzAtXFx1MGVjNFxcdTBlYzZcXHUwZWRjLVxcdTBlZGZcXHUwZjAwXFx1MGY0MC1cXHUwZjQ3XFx1MGY0OS1cXHUwZjZjXFx1MGY4OC1cXHUwZjhjXFx1MTAwMC1cXHUxMDJhXFx1MTAzZlxcdTEwNTAtXFx1MTA1NVxcdTEwNWEtXFx1MTA1ZFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNmUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MVxcdTEwOGVcXHUxMGEwLVxcdTEwYzVcXHUxMGM3XFx1MTBjZFxcdTEwZDAtXFx1MTBmYVxcdTEwZmMtXFx1MTI0OFxcdTEyNGEtXFx1MTI0ZFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVhLVxcdTEyNWRcXHUxMjYwLVxcdTEyODhcXHUxMjhhLVxcdTEyOGRcXHUxMjkwLVxcdTEyYjBcXHUxMmIyLVxcdTEyYjVcXHUxMmI4LVxcdTEyYmVcXHUxMmMwXFx1MTJjMi1cXHUxMmM1XFx1MTJjOC1cXHUxMmQ2XFx1MTJkOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVhXFx1MTM4MC1cXHUxMzhmXFx1MTNhMC1cXHUxM2Y0XFx1MTQwMS1cXHUxNjZjXFx1MTY2Zi1cXHUxNjdmXFx1MTY4MS1cXHUxNjlhXFx1MTZhMC1cXHUxNmVhXFx1MTZlZS1cXHUxNmYwXFx1MTcwMC1cXHUxNzBjXFx1MTcwZS1cXHUxNzExXFx1MTcyMC1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZjXFx1MTc2ZS1cXHUxNzcwXFx1MTc4MC1cXHUxN2IzXFx1MTdkN1xcdTE3ZGNcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4YThcXHUxOGFhXFx1MThiMC1cXHUxOGY1XFx1MTkwMC1cXHUxOTFjXFx1MTk1MC1cXHUxOTZkXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOWFiXFx1MTljMS1cXHUxOWM3XFx1MWEwMC1cXHUxYTE2XFx1MWEyMC1cXHUxYTU0XFx1MWFhN1xcdTFiMDUtXFx1MWIzM1xcdTFiNDUtXFx1MWI0YlxcdTFiODMtXFx1MWJhMFxcdTFiYWVcXHUxYmFmXFx1MWJiYS1cXHUxYmU1XFx1MWMwMC1cXHUxYzIzXFx1MWM0ZC1cXHUxYzRmXFx1MWM1YS1cXHUxYzdkXFx1MWNlOS1cXHUxY2VjXFx1MWNlZS1cXHUxY2YxXFx1MWNmNVxcdTFjZjZcXHUxZDAwLVxcdTFkYmZcXHUxZTAwLVxcdTFmMTVcXHUxZjE4LVxcdTFmMWRcXHUxZjIwLVxcdTFmNDVcXHUxZjQ4LVxcdTFmNGRcXHUxZjUwLVxcdTFmNTdcXHUxZjU5XFx1MWY1YlxcdTFmNWRcXHUxZjVmLVxcdTFmN2RcXHUxZjgwLVxcdTFmYjRcXHUxZmI2LVxcdTFmYmNcXHUxZmJlXFx1MWZjMi1cXHUxZmM0XFx1MWZjNi1cXHUxZmNjXFx1MWZkMC1cXHUxZmQzXFx1MWZkNi1cXHUxZmRiXFx1MWZlMC1cXHUxZmVjXFx1MWZmMi1cXHUxZmY0XFx1MWZmNi1cXHUxZmZjXFx1MjA3MVxcdTIwN2ZcXHUyMDkwLVxcdTIwOWNcXHUyMTAyXFx1MjEwN1xcdTIxMGEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMWRcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJhLVxcdTIxMmRcXHUyMTJmLVxcdTIxMzlcXHUyMTNjLVxcdTIxM2ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRlXFx1MjE2MC1cXHUyMTg4XFx1MmMwMC1cXHUyYzJlXFx1MmMzMC1cXHUyYzVlXFx1MmM2MC1cXHUyY2U0XFx1MmNlYi1cXHUyY2VlXFx1MmNmMlxcdTJjZjNcXHUyZDAwLVxcdTJkMjVcXHUyZDI3XFx1MmQyZFxcdTJkMzAtXFx1MmQ2N1xcdTJkNmZcXHUyZDgwLVxcdTJkOTZcXHUyZGEwLVxcdTJkYTZcXHUyZGE4LVxcdTJkYWVcXHUyZGIwLVxcdTJkYjZcXHUyZGI4LVxcdTJkYmVcXHUyZGMwLVxcdTJkYzZcXHUyZGM4LVxcdTJkY2VcXHUyZGQwLVxcdTJkZDZcXHUyZGQ4LVxcdTJkZGVcXHUyZTJmXFx1MzAwNS1cXHUzMDA3XFx1MzAyMS1cXHUzMDI5XFx1MzAzMS1cXHUzMDM1XFx1MzAzOC1cXHUzMDNjXFx1MzA0MS1cXHUzMDk2XFx1MzA5ZC1cXHUzMDlmXFx1MzBhMS1cXHUzMGZhXFx1MzBmYy1cXHUzMGZmXFx1MzEwNS1cXHUzMTJkXFx1MzEzMS1cXHUzMThlXFx1MzFhMC1cXHUzMWJhXFx1MzFmMC1cXHUzMWZmXFx1MzQwMC1cXHU0ZGI1XFx1NGUwMC1cXHU5ZmNjXFx1YTAwMC1cXHVhNDhjXFx1YTRkMC1cXHVhNGZkXFx1YTUwMC1cXHVhNjBjXFx1YTYxMC1cXHVhNjFmXFx1YTYyYVxcdWE2MmJcXHVhNjQwLVxcdWE2NmVcXHVhNjdmLVxcdWE2OTdcXHVhNmEwLVxcdWE2ZWZcXHVhNzE3LVxcdWE3MWZcXHVhNzIyLVxcdWE3ODhcXHVhNzhiLVxcdWE3OGVcXHVhNzkwLVxcdWE3OTNcXHVhN2EwLVxcdWE3YWFcXHVhN2Y4LVxcdWE4MDFcXHVhODAzLVxcdWE4MDVcXHVhODA3LVxcdWE4MGFcXHVhODBjLVxcdWE4MjJcXHVhODQwLVxcdWE4NzNcXHVhODgyLVxcdWE4YjNcXHVhOGYyLVxcdWE4ZjdcXHVhOGZiXFx1YTkwYS1cXHVhOTI1XFx1YTkzMC1cXHVhOTQ2XFx1YTk2MC1cXHVhOTdjXFx1YTk4NC1cXHVhOWIyXFx1YTljZlxcdWFhMDAtXFx1YWEyOFxcdWFhNDAtXFx1YWE0MlxcdWFhNDQtXFx1YWE0YlxcdWFhNjAtXFx1YWE3NlxcdWFhN2FcXHVhYTgwLVxcdWFhYWZcXHVhYWIxXFx1YWFiNVxcdWFhYjZcXHVhYWI5LVxcdWFhYmRcXHVhYWMwXFx1YWFjMlxcdWFhZGItXFx1YWFkZFxcdWFhZTAtXFx1YWFlYVxcdWFhZjItXFx1YWFmNFxcdWFiMDEtXFx1YWIwNlxcdWFiMDktXFx1YWIwZVxcdWFiMTEtXFx1YWIxNlxcdWFiMjAtXFx1YWIyNlxcdWFiMjgtXFx1YWIyZVxcdWFiYzAtXFx1YWJlMlxcdWFjMDAtXFx1ZDdhM1xcdWQ3YjAtXFx1ZDdjNlxcdWQ3Y2ItXFx1ZDdmYlxcdWY5MDAtXFx1ZmE2ZFxcdWZhNzAtXFx1ZmFkOVxcdWZiMDAtXFx1ZmIwNlxcdWZiMTMtXFx1ZmIxN1xcdWZiMWRcXHVmYjFmLVxcdWZiMjhcXHVmYjJhLVxcdWZiMzZcXHVmYjM4LVxcdWZiM2NcXHVmYjNlXFx1ZmI0MFxcdWZiNDFcXHVmYjQzXFx1ZmI0NFxcdWZiNDYtXFx1ZmJiMVxcdWZiZDMtXFx1ZmQzZFxcdWZkNTAtXFx1ZmQ4ZlxcdWZkOTItXFx1ZmRjN1xcdWZkZjAtXFx1ZmRmYlxcdWZlNzAtXFx1ZmU3NFxcdWZlNzYtXFx1ZmVmY1xcdWZmMjEtXFx1ZmYzYVxcdWZmNDEtXFx1ZmY1YVxcdWZmNjYtXFx1ZmZiZVxcdWZmYzItXFx1ZmZjN1xcdWZmY2EtXFx1ZmZjZlxcdWZmZDItXFx1ZmZkN1xcdWZmZGEtXFx1ZmZkY11bJEEtWlxcX2EtelxceGFhXFx4YjVcXHhiYVxceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhmOC1cXHUwMmMxXFx1MDJjNi1cXHUwMmQxXFx1MDJlMC1cXHUwMmU0XFx1MDJlY1xcdTAyZWVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN2EtXFx1MDM3ZFxcdTAzODZcXHUwMzg4LVxcdTAzOGFcXHUwMzhjXFx1MDM4ZS1cXHUwM2ExXFx1MDNhMy1cXHUwM2Y1XFx1MDNmNy1cXHUwNDgxXFx1MDQ4YS1cXHUwNTI3XFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1ZDAtXFx1MDVlYVxcdTA1ZjAtXFx1MDVmMlxcdTA2MjAtXFx1MDY0YVxcdTA2NmVcXHUwNjZmXFx1MDY3MS1cXHUwNmQzXFx1MDZkNVxcdTA2ZTVcXHUwNmU2XFx1MDZlZVxcdTA2ZWZcXHUwNmZhLVxcdTA2ZmNcXHUwNmZmXFx1MDcxMFxcdTA3MTItXFx1MDcyZlxcdTA3NGQtXFx1MDdhNVxcdTA3YjFcXHUwN2NhLVxcdTA3ZWFcXHUwN2Y0XFx1MDdmNVxcdTA3ZmFcXHUwODAwLVxcdTA4MTVcXHUwODFhXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwOGEwXFx1MDhhMi1cXHUwOGFjXFx1MDkwNC1cXHUwOTM5XFx1MDkzZFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5NzdcXHUwOTc5LVxcdTA5N2ZcXHUwOTg1LVxcdTA5OGNcXHUwOThmXFx1MDk5MFxcdTA5OTMtXFx1MDlhOFxcdTA5YWEtXFx1MDliMFxcdTA5YjJcXHUwOWI2LVxcdTA5YjlcXHUwOWJkXFx1MDljZVxcdTA5ZGNcXHUwOWRkXFx1MDlkZi1cXHUwOWUxXFx1MDlmMFxcdTA5ZjFcXHUwYTA1LVxcdTBhMGFcXHUwYTBmXFx1MGExMFxcdTBhMTMtXFx1MGEyOFxcdTBhMmEtXFx1MGEzMFxcdTBhMzJcXHUwYTMzXFx1MGEzNVxcdTBhMzZcXHUwYTM4XFx1MGEzOVxcdTBhNTktXFx1MGE1Y1xcdTBhNWVcXHUwYTcyLVxcdTBhNzRcXHUwYTg1LVxcdTBhOGRcXHUwYThmLVxcdTBhOTFcXHUwYTkzLVxcdTBhYThcXHUwYWFhLVxcdTBhYjBcXHUwYWIyXFx1MGFiM1xcdTBhYjUtXFx1MGFiOVxcdTBhYmRcXHUwYWQwXFx1MGFlMFxcdTBhZTFcXHUwYjA1LVxcdTBiMGNcXHUwYjBmXFx1MGIxMFxcdTBiMTMtXFx1MGIyOFxcdTBiMmEtXFx1MGIzMFxcdTBiMzJcXHUwYjMzXFx1MGIzNS1cXHUwYjM5XFx1MGIzZFxcdTBiNWNcXHUwYjVkXFx1MGI1Zi1cXHUwYjYxXFx1MGI3MVxcdTBiODNcXHUwYjg1LVxcdTBiOGFcXHUwYjhlLVxcdTBiOTBcXHUwYjkyLVxcdTBiOTVcXHUwYjk5XFx1MGI5YVxcdTBiOWNcXHUwYjllXFx1MGI5ZlxcdTBiYTNcXHUwYmE0XFx1MGJhOC1cXHUwYmFhXFx1MGJhZS1cXHUwYmI5XFx1MGJkMFxcdTBjMDUtXFx1MGMwY1xcdTBjMGUtXFx1MGMxMFxcdTBjMTItXFx1MGMyOFxcdTBjMmEtXFx1MGMzM1xcdTBjMzUtXFx1MGMzOVxcdTBjM2RcXHUwYzU4XFx1MGM1OVxcdTBjNjBcXHUwYzYxXFx1MGM4NS1cXHUwYzhjXFx1MGM4ZS1cXHUwYzkwXFx1MGM5Mi1cXHUwY2E4XFx1MGNhYS1cXHUwY2IzXFx1MGNiNS1cXHUwY2I5XFx1MGNiZFxcdTBjZGVcXHUwY2UwXFx1MGNlMVxcdTBjZjFcXHUwY2YyXFx1MGQwNS1cXHUwZDBjXFx1MGQwZS1cXHUwZDEwXFx1MGQxMi1cXHUwZDNhXFx1MGQzZFxcdTBkNGVcXHUwZDYwXFx1MGQ2MVxcdTBkN2EtXFx1MGQ3ZlxcdTBkODUtXFx1MGQ5NlxcdTBkOWEtXFx1MGRiMVxcdTBkYjMtXFx1MGRiYlxcdTBkYmRcXHUwZGMwLVxcdTBkYzZcXHUwZTAxLVxcdTBlMzBcXHUwZTMyXFx1MGUzM1xcdTBlNDAtXFx1MGU0NlxcdTBlODFcXHUwZTgyXFx1MGU4NFxcdTBlODdcXHUwZTg4XFx1MGU4YVxcdTBlOGRcXHUwZTk0LVxcdTBlOTdcXHUwZTk5LVxcdTBlOWZcXHUwZWExLVxcdTBlYTNcXHUwZWE1XFx1MGVhN1xcdTBlYWFcXHUwZWFiXFx1MGVhZC1cXHUwZWIwXFx1MGViMlxcdTBlYjNcXHUwZWJkXFx1MGVjMC1cXHUwZWM0XFx1MGVjNlxcdTBlZGMtXFx1MGVkZlxcdTBmMDBcXHUwZjQwLVxcdTBmNDdcXHUwZjQ5LVxcdTBmNmNcXHUwZjg4LVxcdTBmOGNcXHUxMDAwLVxcdTEwMmFcXHUxMDNmXFx1MTA1MC1cXHUxMDU1XFx1MTA1YS1cXHUxMDVkXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2ZS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4ZVxcdTEwYTAtXFx1MTBjNVxcdTEwYzdcXHUxMGNkXFx1MTBkMC1cXHUxMGZhXFx1MTBmYy1cXHUxMjQ4XFx1MTI0YS1cXHUxMjRkXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNWEtXFx1MTI1ZFxcdTEyNjAtXFx1MTI4OFxcdTEyOGEtXFx1MTI4ZFxcdTEyOTAtXFx1MTJiMFxcdTEyYjItXFx1MTJiNVxcdTEyYjgtXFx1MTJiZVxcdTEyYzBcXHUxMmMyLVxcdTEyYzVcXHUxMmM4LVxcdTEyZDZcXHUxMmQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNWFcXHUxMzgwLVxcdTEzOGZcXHUxM2EwLVxcdTEzZjRcXHUxNDAxLVxcdTE2NmNcXHUxNjZmLVxcdTE2N2ZcXHUxNjgxLVxcdTE2OWFcXHUxNmEwLVxcdTE2ZWFcXHUxNmVlLVxcdTE2ZjBcXHUxNzAwLVxcdTE3MGNcXHUxNzBlLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NmNcXHUxNzZlLVxcdTE3NzBcXHUxNzgwLVxcdTE3YjNcXHUxN2Q3XFx1MTdkY1xcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MThhOFxcdTE4YWFcXHUxOGIwLVxcdTE4ZjVcXHUxOTAwLVxcdTE5MWNcXHUxOTUwLVxcdTE5NmRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5YWJcXHUxOWMxLVxcdTE5YzdcXHUxYTAwLVxcdTFhMTZcXHUxYTIwLVxcdTFhNTRcXHUxYWE3XFx1MWIwNS1cXHUxYjMzXFx1MWI0NS1cXHUxYjRiXFx1MWI4My1cXHUxYmEwXFx1MWJhZVxcdTFiYWZcXHUxYmJhLVxcdTFiZTVcXHUxYzAwLVxcdTFjMjNcXHUxYzRkLVxcdTFjNGZcXHUxYzVhLVxcdTFjN2RcXHUxY2U5LVxcdTFjZWNcXHUxY2VlLVxcdTFjZjFcXHUxY2Y1XFx1MWNmNlxcdTFkMDAtXFx1MWRiZlxcdTFlMDAtXFx1MWYxNVxcdTFmMTgtXFx1MWYxZFxcdTFmMjAtXFx1MWY0NVxcdTFmNDgtXFx1MWY0ZFxcdTFmNTAtXFx1MWY1N1xcdTFmNTlcXHUxZjViXFx1MWY1ZFxcdTFmNWYtXFx1MWY3ZFxcdTFmODAtXFx1MWZiNFxcdTFmYjYtXFx1MWZiY1xcdTFmYmVcXHUxZmMyLVxcdTFmYzRcXHUxZmM2LVxcdTFmY2NcXHUxZmQwLVxcdTFmZDNcXHUxZmQ2LVxcdTFmZGJcXHUxZmUwLVxcdTFmZWNcXHUxZmYyLVxcdTFmZjRcXHUxZmY2LVxcdTFmZmNcXHUyMDcxXFx1MjA3ZlxcdTIwOTAtXFx1MjA5Y1xcdTIxMDJcXHUyMTA3XFx1MjEwYS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExZFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMmEtXFx1MjEyZFxcdTIxMmYtXFx1MjEzOVxcdTIxM2MtXFx1MjEzZlxcdTIxNDUtXFx1MjE0OVxcdTIxNGVcXHUyMTYwLVxcdTIxODhcXHUyYzAwLVxcdTJjMmVcXHUyYzMwLVxcdTJjNWVcXHUyYzYwLVxcdTJjZTRcXHUyY2ViLVxcdTJjZWVcXHUyY2YyXFx1MmNmM1xcdTJkMDAtXFx1MmQyNVxcdTJkMjdcXHUyZDJkXFx1MmQzMC1cXHUyZDY3XFx1MmQ2ZlxcdTJkODAtXFx1MmQ5NlxcdTJkYTAtXFx1MmRhNlxcdTJkYTgtXFx1MmRhZVxcdTJkYjAtXFx1MmRiNlxcdTJkYjgtXFx1MmRiZVxcdTJkYzAtXFx1MmRjNlxcdTJkYzgtXFx1MmRjZVxcdTJkZDAtXFx1MmRkNlxcdTJkZDgtXFx1MmRkZVxcdTJlMmZcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM2NcXHUzMDQxLVxcdTMwOTZcXHUzMDlkLVxcdTMwOWZcXHUzMGExLVxcdTMwZmFcXHUzMGZjLVxcdTMwZmZcXHUzMTA1LVxcdTMxMmRcXHUzMTMxLVxcdTMxOGVcXHUzMWEwLVxcdTMxYmFcXHUzMWYwLVxcdTMxZmZcXHUzNDAwLVxcdTRkYjVcXHU0ZTAwLVxcdTlmY2NcXHVhMDAwLVxcdWE0OGNcXHVhNGQwLVxcdWE0ZmRcXHVhNTAwLVxcdWE2MGNcXHVhNjEwLVxcdWE2MWZcXHVhNjJhXFx1YTYyYlxcdWE2NDAtXFx1YTY2ZVxcdWE2N2YtXFx1YTY5N1xcdWE2YTAtXFx1YTZlZlxcdWE3MTctXFx1YTcxZlxcdWE3MjItXFx1YTc4OFxcdWE3OGItXFx1YTc4ZVxcdWE3OTAtXFx1YTc5M1xcdWE3YTAtXFx1YTdhYVxcdWE3ZjgtXFx1YTgwMVxcdWE4MDMtXFx1YTgwNVxcdWE4MDctXFx1YTgwYVxcdWE4MGMtXFx1YTgyMlxcdWE4NDAtXFx1YTg3M1xcdWE4ODItXFx1YThiM1xcdWE4ZjItXFx1YThmN1xcdWE4ZmJcXHVhOTBhLVxcdWE5MjVcXHVhOTMwLVxcdWE5NDZcXHVhOTYwLVxcdWE5N2NcXHVhOTg0LVxcdWE5YjJcXHVhOWNmXFx1YWEwMC1cXHVhYTI4XFx1YWE0MC1cXHVhYTQyXFx1YWE0NC1cXHVhYTRiXFx1YWE2MC1cXHVhYTc2XFx1YWE3YVxcdWFhODAtXFx1YWFhZlxcdWFhYjFcXHVhYWI1XFx1YWFiNlxcdWFhYjktXFx1YWFiZFxcdWFhYzBcXHVhYWMyXFx1YWFkYi1cXHVhYWRkXFx1YWFlMC1cXHVhYWVhXFx1YWFmMi1cXHVhYWY0XFx1YWIwMS1cXHVhYjA2XFx1YWIwOS1cXHVhYjBlXFx1YWIxMS1cXHVhYjE2XFx1YWIyMC1cXHVhYjI2XFx1YWIyOC1cXHVhYjJlXFx1YWJjMC1cXHVhYmUyXFx1YWMwMC1cXHVkN2EzXFx1ZDdiMC1cXHVkN2M2XFx1ZDdjYi1cXHVkN2ZiXFx1ZjkwMC1cXHVmYTZkXFx1ZmE3MC1cXHVmYWQ5XFx1ZmIwMC1cXHVmYjA2XFx1ZmIxMy1cXHVmYjE3XFx1ZmIxZFxcdWZiMWYtXFx1ZmIyOFxcdWZiMmEtXFx1ZmIzNlxcdWZiMzgtXFx1ZmIzY1xcdWZiM2VcXHVmYjQwXFx1ZmI0MVxcdWZiNDNcXHVmYjQ0XFx1ZmI0Ni1cXHVmYmIxXFx1ZmJkMy1cXHVmZDNkXFx1ZmQ1MC1cXHVmZDhmXFx1ZmQ5Mi1cXHVmZGM3XFx1ZmRmMC1cXHVmZGZiXFx1ZmU3MC1cXHVmZTc0XFx1ZmU3Ni1cXHVmZWZjXFx1ZmYyMS1cXHVmZjNhXFx1ZmY0MS1cXHVmZjVhXFx1ZmY2Ni1cXHVmZmJlXFx1ZmZjMi1cXHVmZmM3XFx1ZmZjYS1cXHVmZmNmXFx1ZmZkMi1cXHVmZmQ3XFx1ZmZkYS1cXHVmZmRjMC05XFx1MDMwMC1cXHUwMzZmXFx1MDQ4My1cXHUwNDg3XFx1MDU5MS1cXHUwNWJkXFx1MDViZlxcdTA1YzFcXHUwNWMyXFx1MDVjNFxcdTA1YzVcXHUwNWM3XFx1MDYxMC1cXHUwNjFhXFx1MDY0Yi1cXHUwNjY5XFx1MDY3MFxcdTA2ZDYtXFx1MDZkY1xcdTA2ZGYtXFx1MDZlNFxcdTA2ZTdcXHUwNmU4XFx1MDZlYS1cXHUwNmVkXFx1MDZmMC1cXHUwNmY5XFx1MDcxMVxcdTA3MzAtXFx1MDc0YVxcdTA3YTYtXFx1MDdiMFxcdTA3YzAtXFx1MDdjOVxcdTA3ZWItXFx1MDdmM1xcdTA4MTYtXFx1MDgxOVxcdTA4MWItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyZFxcdTA4NTktXFx1MDg1YlxcdTA4ZTQtXFx1MDhmZVxcdTA5MDAtXFx1MDkwM1xcdTA5M2EtXFx1MDkzY1xcdTA5M2UtXFx1MDk0ZlxcdTA5NTEtXFx1MDk1N1xcdTA5NjJcXHUwOTYzXFx1MDk2Ni1cXHUwOTZmXFx1MDk4MS1cXHUwOTgzXFx1MDliY1xcdTA5YmUtXFx1MDljNFxcdTA5YzdcXHUwOWM4XFx1MDljYi1cXHUwOWNkXFx1MDlkN1xcdTA5ZTJcXHUwOWUzXFx1MDllNi1cXHUwOWVmXFx1MGEwMS1cXHUwYTAzXFx1MGEzY1xcdTBhM2UtXFx1MGE0MlxcdTBhNDdcXHUwYTQ4XFx1MGE0Yi1cXHUwYTRkXFx1MGE1MVxcdTBhNjYtXFx1MGE3MVxcdTBhNzVcXHUwYTgxLVxcdTBhODNcXHUwYWJjXFx1MGFiZS1cXHUwYWM1XFx1MGFjNy1cXHUwYWM5XFx1MGFjYi1cXHUwYWNkXFx1MGFlMlxcdTBhZTNcXHUwYWU2LVxcdTBhZWZcXHUwYjAxLVxcdTBiMDNcXHUwYjNjXFx1MGIzZS1cXHUwYjQ0XFx1MGI0N1xcdTBiNDhcXHUwYjRiLVxcdTBiNGRcXHUwYjU2XFx1MGI1N1xcdTBiNjJcXHUwYjYzXFx1MGI2Ni1cXHUwYjZmXFx1MGI4MlxcdTBiYmUtXFx1MGJjMlxcdTBiYzYtXFx1MGJjOFxcdTBiY2EtXFx1MGJjZFxcdTBiZDdcXHUwYmU2LVxcdTBiZWZcXHUwYzAxLVxcdTBjMDNcXHUwYzNlLVxcdTBjNDRcXHUwYzQ2LVxcdTBjNDhcXHUwYzRhLVxcdTBjNGRcXHUwYzU1XFx1MGM1NlxcdTBjNjJcXHUwYzYzXFx1MGM2Ni1cXHUwYzZmXFx1MGM4MlxcdTBjODNcXHUwY2JjXFx1MGNiZS1cXHUwY2M0XFx1MGNjNi1cXHUwY2M4XFx1MGNjYS1cXHUwY2NkXFx1MGNkNVxcdTBjZDZcXHUwY2UyXFx1MGNlM1xcdTBjZTYtXFx1MGNlZlxcdTBkMDJcXHUwZDAzXFx1MGQzZS1cXHUwZDQ0XFx1MGQ0Ni1cXHUwZDQ4XFx1MGQ0YS1cXHUwZDRkXFx1MGQ1N1xcdTBkNjJcXHUwZDYzXFx1MGQ2Ni1cXHUwZDZmXFx1MGQ4MlxcdTBkODNcXHUwZGNhXFx1MGRjZi1cXHUwZGQ0XFx1MGRkNlxcdTBkZDgtXFx1MGRkZlxcdTBkZjJcXHUwZGYzXFx1MGUzMVxcdTBlMzQtXFx1MGUzYVxcdTBlNDctXFx1MGU0ZVxcdTBlNTAtXFx1MGU1OVxcdTBlYjFcXHUwZWI0LVxcdTBlYjlcXHUwZWJiXFx1MGViY1xcdTBlYzgtXFx1MGVjZFxcdTBlZDAtXFx1MGVkOVxcdTBmMThcXHUwZjE5XFx1MGYyMC1cXHUwZjI5XFx1MGYzNVxcdTBmMzdcXHUwZjM5XFx1MGYzZVxcdTBmM2ZcXHUwZjcxLVxcdTBmODRcXHUwZjg2XFx1MGY4N1xcdTBmOGQtXFx1MGY5N1xcdTBmOTktXFx1MGZiY1xcdTBmYzZcXHUxMDJiLVxcdTEwM2VcXHUxMDQwLVxcdTEwNDlcXHUxMDU2LVxcdTEwNTlcXHUxMDVlLVxcdTEwNjBcXHUxMDYyLVxcdTEwNjRcXHUxMDY3LVxcdTEwNmRcXHUxMDcxLVxcdTEwNzRcXHUxMDgyLVxcdTEwOGRcXHUxMDhmLVxcdTEwOWRcXHUxMzVkLVxcdTEzNWZcXHUxNzEyLVxcdTE3MTRcXHUxNzMyLVxcdTE3MzRcXHUxNzUyXFx1MTc1M1xcdTE3NzJcXHUxNzczXFx1MTdiNC1cXHUxN2QzXFx1MTdkZFxcdTE3ZTAtXFx1MTdlOVxcdTE4MGItXFx1MTgwZFxcdTE4MTAtXFx1MTgxOVxcdTE4YTlcXHUxOTIwLVxcdTE5MmJcXHUxOTMwLVxcdTE5M2JcXHUxOTQ2LVxcdTE5NGZcXHUxOWIwLVxcdTE5YzBcXHUxOWM4XFx1MTljOVxcdTE5ZDAtXFx1MTlkOVxcdTFhMTctXFx1MWExYlxcdTFhNTUtXFx1MWE1ZVxcdTFhNjAtXFx1MWE3Y1xcdTFhN2YtXFx1MWE4OVxcdTFhOTAtXFx1MWE5OVxcdTFiMDAtXFx1MWIwNFxcdTFiMzQtXFx1MWI0NFxcdTFiNTAtXFx1MWI1OVxcdTFiNmItXFx1MWI3M1xcdTFiODAtXFx1MWI4MlxcdTFiYTEtXFx1MWJhZFxcdTFiYjAtXFx1MWJiOVxcdTFiZTYtXFx1MWJmM1xcdTFjMjQtXFx1MWMzN1xcdTFjNDAtXFx1MWM0OVxcdTFjNTAtXFx1MWM1OVxcdTFjZDAtXFx1MWNkMlxcdTFjZDQtXFx1MWNlOFxcdTFjZWRcXHUxY2YyLVxcdTFjZjRcXHUxZGMwLVxcdTFkZTZcXHUxZGZjLVxcdTFkZmZcXHUyMDBjXFx1MjAwZFxcdTIwM2ZcXHUyMDQwXFx1MjA1NFxcdTIwZDAtXFx1MjBkY1xcdTIwZTFcXHUyMGU1LVxcdTIwZjBcXHUyY2VmLVxcdTJjZjFcXHUyZDdmXFx1MmRlMC1cXHUyZGZmXFx1MzAyYS1cXHUzMDJmXFx1MzA5OVxcdTMwOWFcXHVhNjIwLVxcdWE2MjlcXHVhNjZmXFx1YTY3NC1cXHVhNjdkXFx1YTY5ZlxcdWE2ZjBcXHVhNmYxXFx1YTgwMlxcdWE4MDZcXHVhODBiXFx1YTgyMy1cXHVhODI3XFx1YTg4MFxcdWE4ODFcXHVhOGI0LVxcdWE4YzRcXHVhOGQwLVxcdWE4ZDlcXHVhOGUwLVxcdWE4ZjFcXHVhOTAwLVxcdWE5MDlcXHVhOTI2LVxcdWE5MmRcXHVhOTQ3LVxcdWE5NTNcXHVhOTgwLVxcdWE5ODNcXHVhOWIzLVxcdWE5YzBcXHVhOWQwLVxcdWE5ZDlcXHVhYTI5LVxcdWFhMzZcXHVhYTQzXFx1YWE0Y1xcdWFhNGRcXHVhYTUwLVxcdWFhNTlcXHVhYTdiXFx1YWFiMFxcdWFhYjItXFx1YWFiNFxcdWFhYjdcXHVhYWI4XFx1YWFiZVxcdWFhYmZcXHVhYWMxXFx1YWFlYi1cXHVhYWVmXFx1YWFmNVxcdWFhZjZcXHVhYmUzLVxcdWFiZWFcXHVhYmVjXFx1YWJlZFxcdWFiZjAtXFx1YWJmOVxcdWZiMWVcXHVmZTAwLVxcdWZlMGZcXHVmZTIwLVxcdWZlMjZcXHVmZTMzXFx1ZmUzNFxcdWZlNGQtXFx1ZmU0ZlxcdWZmMTAtXFx1ZmYxOVxcdWZmM2ZdKiQvLnRlc3Qoc3RyKVxufVxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3BlcnR5IiwibW9kdWxlLmV4cG9ydHMgICAgICA9IGlzVHlwZWRBcnJheVxuaXNUeXBlZEFycmF5LnN0cmljdCA9IGlzU3RyaWN0VHlwZWRBcnJheVxuaXNUeXBlZEFycmF5Lmxvb3NlICA9IGlzTG9vc2VUeXBlZEFycmF5XG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcbnZhciBuYW1lcyA9IHtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJzogdHJ1ZVxuICAsICdbb2JqZWN0IEludDE2QXJyYXldJzogdHJ1ZVxuICAsICdbb2JqZWN0IEludDMyQXJyYXldJzogdHJ1ZVxuICAsICdbb2JqZWN0IFVpbnQ4QXJyYXldJzogdHJ1ZVxuICAsICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSc6IHRydWVcbiAgLCAnW29iamVjdCBVaW50MTZBcnJheV0nOiB0cnVlXG4gICwgJ1tvYmplY3QgVWludDMyQXJyYXldJzogdHJ1ZVxuICAsICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nOiB0cnVlXG4gICwgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSc6IHRydWVcbn1cblxuZnVuY3Rpb24gaXNUeXBlZEFycmF5KGFycikge1xuICByZXR1cm4gKFxuICAgICAgIGlzU3RyaWN0VHlwZWRBcnJheShhcnIpXG4gICAgfHwgaXNMb29zZVR5cGVkQXJyYXkoYXJyKVxuICApXG59XG5cbmZ1bmN0aW9uIGlzU3RyaWN0VHlwZWRBcnJheShhcnIpIHtcbiAgcmV0dXJuIChcbiAgICAgICBhcnIgaW5zdGFuY2VvZiBJbnQ4QXJyYXlcbiAgICB8fCBhcnIgaW5zdGFuY2VvZiBJbnQxNkFycmF5XG4gICAgfHwgYXJyIGluc3RhbmNlb2YgSW50MzJBcnJheVxuICAgIHx8IGFyciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcbiAgICB8fCBhcnIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheVxuICAgIHx8IGFyciBpbnN0YW5jZW9mIFVpbnQxNkFycmF5XG4gICAgfHwgYXJyIGluc3RhbmNlb2YgVWludDMyQXJyYXlcbiAgICB8fCBhcnIgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXlcbiAgICB8fCBhcnIgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXlcbiAgKVxufVxuXG5mdW5jdGlvbiBpc0xvb3NlVHlwZWRBcnJheShhcnIpIHtcbiAgcmV0dXJuIG5hbWVzW3RvU3RyaW5nLmNhbGwoYXJyKV1cbn1cbiIsInZhciB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbScpXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuXG52YXIgRGVjb2RlciA9IGZ1bmN0aW9uIChvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEZWNvZGVyKSkgcmV0dXJuIG5ldyBEZWNvZGVyKG9wdHMpXG4gIHN0cmVhbS5UcmFuc2Zvcm0uY2FsbCh0aGlzKVxuXG4gIHRoaXMuX21pc3NpbmcgPSAwXG4gIHRoaXMuX21lc3NhZ2UgPSBudWxsXG4gIHRoaXMuX2xpbWl0ID0gb3B0cyAmJiBvcHRzLmxpbWl0IHx8IDBcbiAgdGhpcy5fcHJlZml4ID0gbmV3IEJ1ZmZlcih0aGlzLl9saW1pdCA/IHZhcmludC5lbmNvZGluZ0xlbmd0aCh0aGlzLl9saW1pdCkgOiAxMDApXG4gIHRoaXMuX3B0ciA9IDBcbn1cblxudXRpbC5pbmhlcml0cyhEZWNvZGVyLCBzdHJlYW0uVHJhbnNmb3JtKVxuXG5EZWNvZGVyLnByb3RvdHlwZS5fcHVzaCA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gIHRoaXMuX3B0ciA9IDBcbiAgdGhpcy5fbWlzc2luZyA9IDBcbiAgdGhpcy5fbWVzc2FnZSA9IG51bGxcbiAgdGhpcy5wdXNoKG1lc3NhZ2UpXG59XG5cbkRlY29kZXIucHJvdG90eXBlLl9wYXJzZUxlbmd0aCA9IGZ1bmN0aW9uIChkYXRhLCBvZmZzZXQpIHtcbiAgZm9yIChvZmZzZXQ7IG9mZnNldCA8IGRhdGEubGVuZ3RoOyBvZmZzZXQrKykge1xuICAgIGlmICh0aGlzLl9wdHIgPj0gdGhpcy5fcHJlZml4Lmxlbmd0aCkgcmV0dXJuIHRoaXMuX3ByZWZpeEVycm9yKGRhdGEpXG4gICAgdGhpcy5fcHJlZml4W3RoaXMuX3B0cisrXSA9IGRhdGFbb2Zmc2V0XVxuICAgIGlmICghKGRhdGFbb2Zmc2V0XSAmIDB4ODApKSB7XG4gICAgICB0aGlzLl9taXNzaW5nID0gdmFyaW50LmRlY29kZSh0aGlzLl9wcmVmaXgpXG4gICAgICBpZiAodGhpcy5fbGltaXQgJiYgdGhpcy5fbWlzc2luZyA+IHRoaXMuX2xpbWl0KSByZXR1cm4gdGhpcy5fcHJlZml4RXJyb3IoZGF0YSlcbiAgICAgIHRoaXMuX3B0ciA9IDBcbiAgICAgIHJldHVybiBvZmZzZXQgKyAxXG4gICAgfVxuICB9XG4gIHJldHVybiBkYXRhLmxlbmd0aFxufVxuXG5EZWNvZGVyLnByb3RvdHlwZS5fcHJlZml4RXJyb3IgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdNZXNzYWdlIGlzIGxhcmdlciB0aGFuIG1heCBsZW5ndGgnKSlcbiAgcmV0dXJuIGRhdGEubGVuZ3RoXG59XG5cbkRlY29kZXIucHJvdG90eXBlLl9wYXJzZU1lc3NhZ2UgPSBmdW5jdGlvbiAoZGF0YSwgb2Zmc2V0KSB7XG4gIHZhciBmcmVlID0gZGF0YS5sZW5ndGggLSBvZmZzZXRcbiAgdmFyIG1pc3NpbmcgPSB0aGlzLl9taXNzaW5nXG5cbiAgaWYgKCF0aGlzLl9tZXNzYWdlKSB7XG4gICAgaWYgKG1pc3NpbmcgPD0gZnJlZSkgeyAvLyBmYXN0IHRyYWNrIC0gbm8gY29weVxuICAgICAgdGhpcy5fcHVzaChkYXRhLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgbWlzc2luZykpXG4gICAgICByZXR1cm4gb2Zmc2V0ICsgbWlzc2luZ1xuICAgIH1cbiAgICB0aGlzLl9tZXNzYWdlID0gbmV3IEJ1ZmZlcihtaXNzaW5nKVxuICB9XG5cbiAgLy8gVE9ETzogYWRkIG9wdC1pbiBcInBhcnRpYWwgbW9kZVwiIHRvIGNvbXBsZXRlbHkgYXZvaWQgY29weXNcbiAgZGF0YS5jb3B5KHRoaXMuX21lc3NhZ2UsIHRoaXMuX3B0ciwgb2Zmc2V0LCBvZmZzZXQgKyBtaXNzaW5nKVxuXG4gIGlmIChtaXNzaW5nIDw9IGZyZWUpIHtcbiAgICB0aGlzLl9wdXNoKHRoaXMuX21lc3NhZ2UpXG4gICAgcmV0dXJuIG9mZnNldCArIG1pc3NpbmdcbiAgfVxuXG4gIHRoaXMuX21pc3NpbmcgLT0gZnJlZVxuICB0aGlzLl9wdHIgKz0gZnJlZVxuXG4gIHJldHVybiBkYXRhLmxlbmd0aFxufVxuXG5EZWNvZGVyLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGRhdGEsIGVuYywgY2IpIHtcbiAgdmFyIG9mZnNldCA9IDBcblxuICB3aGlsZSAob2Zmc2V0IDwgZGF0YS5sZW5ndGgpIHtcbiAgICBpZiAodGhpcy5fbWlzc2luZykgb2Zmc2V0ID0gdGhpcy5fcGFyc2VNZXNzYWdlKGRhdGEsIG9mZnNldClcbiAgICBlbHNlIG9mZnNldCA9IHRoaXMuX3BhcnNlTGVuZ3RoKGRhdGEsIG9mZnNldClcbiAgfVxuXG4gIGNiKClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEZWNvZGVyXG4iLCJ2YXIgdmFyaW50ID0gcmVxdWlyZSgndmFyaW50JylcbnZhciBzdHJlYW0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKVxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJylcblxudmFyIHBvb2wgPSBuZXcgQnVmZmVyKDEwICogMTAyNClcbnZhciB1c2VkID0gMFxuXG52YXIgRW5jb2RlciA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEVuY29kZXIpKSByZXR1cm4gbmV3IEVuY29kZXIoKVxuICBzdHJlYW0uVHJhbnNmb3JtLmNhbGwodGhpcylcbn1cblxudXRpbC5pbmhlcml0cyhFbmNvZGVyLCBzdHJlYW0uVHJhbnNmb3JtKVxuXG5FbmNvZGVyLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGRhdGEsIGVuYywgY2IpIHtcbiAgdmFyaW50LmVuY29kZShkYXRhLmxlbmd0aCwgcG9vbCwgdXNlZClcbiAgdXNlZCArPSB2YXJpbnQuZW5jb2RlLmJ5dGVzXG5cbiAgdGhpcy5wdXNoKHBvb2wuc2xpY2UodXNlZCAtIHZhcmludC5lbmNvZGUuYnl0ZXMsIHVzZWQpKVxuICB0aGlzLnB1c2goZGF0YSlcblxuICBpZiAocG9vbC5sZW5ndGggLSB1c2VkIDwgMTAwKSB7XG4gICAgcG9vbCA9IG5ldyBCdWZmZXIoMTAgKiAxMDI0KVxuICAgIHVzZWQgPSAwXG4gIH1cblxuICBjYigpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gRW5jb2RlclxuIiwiZXhwb3J0cy5lbmNvZGUgPSByZXF1aXJlKCcuL2VuY29kZScpXG5leHBvcnRzLmRlY29kZSA9IHJlcXVpcmUoJy4vZGVjb2RlJylcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFkYWJsZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBwcm9jZXNzTmV4dFRpY2sgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuUmVhZGFibGUuUmVhZGFibGVTdGF0ZSA9IFJlYWRhYmxlU3RhdGU7XG5cbnZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEVFbGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJzKHR5cGUpLmxlbmd0aDtcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgU3RyZWFtO1xuKGZ1bmN0aW9uICgpe3RyeXtcbiAgU3RyZWFtID0gcmVxdWlyZSgnc3QnICsgJ3JlYW0nKTtcbn1jYXRjaChfKXt9ZmluYWxseXtcbiAgaWYgKCFTdHJlYW0pXG4gICAgU3RyZWFtID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xufX0oKSlcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGRlYnVnVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBkZWJ1ZztcbmlmIChkZWJ1Z1V0aWwgJiYgZGVidWdVdGlsLmRlYnVnbG9nKSB7XG4gIGRlYnVnID0gZGVidWdVdGlsLmRlYnVnbG9nKCdzdHJlYW0nKTtcbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24gKCkge307XG59XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIFN0cmluZ0RlY29kZXI7XG5cbnV0aWwuaW5oZXJpdHMoUmVhZGFibGUsIFN0cmVhbSk7XG5cbnZhciBEdXBsZXg7XG5mdW5jdGlvbiBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIG9iamVjdCBzdHJlYW0gZmxhZy4gVXNlZCB0byBtYWtlIHJlYWQobikgaWdub3JlIG4gYW5kIHRvXG4gIC8vIG1ha2UgYWxsIHRoZSBidWZmZXIgbWVyZ2luZyBhbmQgbGVuZ3RoIGNoZWNrcyBnbyBhd2F5XG4gIHRoaXMub2JqZWN0TW9kZSA9ICEhb3B0aW9ucy5vYmplY3RNb2RlO1xuXG4gIGlmIChzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXgpXG4gICAgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGU7XG5cbiAgLy8gdGhlIHBvaW50IGF0IHdoaWNoIGl0IHN0b3BzIGNhbGxpbmcgX3JlYWQoKSB0byBmaWxsIHRoZSBidWZmZXJcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyBcImRvbid0IGNhbGwgX3JlYWQgcHJlZW1wdGl2ZWx5IGV2ZXJcIlxuICB2YXIgaHdtID0gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrO1xuICB2YXIgZGVmYXVsdEh3bSA9IHRoaXMub2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSAoaHdtIHx8IGh3bSA9PT0gMCkgPyBod20gOiBkZWZhdWx0SHdtO1xuXG4gIC8vIGNhc3QgdG8gaW50cy5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gfn50aGlzLmhpZ2hXYXRlck1hcms7XG5cbiAgdGhpcy5idWZmZXIgPSBbXTtcbiAgdGhpcy5sZW5ndGggPSAwO1xuICB0aGlzLnBpcGVzID0gbnVsbDtcbiAgdGhpcy5waXBlc0NvdW50ID0gMDtcbiAgdGhpcy5mbG93aW5nID0gbnVsbDtcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICB0aGlzLmVuZEVtaXR0ZWQgPSBmYWxzZTtcbiAgdGhpcy5yZWFkaW5nID0gZmFsc2U7XG5cbiAgLy8gYSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gd2hlbmV2ZXIgd2UgcmV0dXJuIG51bGwsIHRoZW4gd2Ugc2V0IGEgZmxhZyB0byBzYXlcbiAgLy8gdGhhdCB3ZSdyZSBhd2FpdGluZyBhICdyZWFkYWJsZScgZXZlbnQgZW1pc3Npb24uXG4gIHRoaXMubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGVMaXN0ZW5pbmcgPSBmYWxzZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyB3aGVuIHBpcGluZywgd2Ugb25seSBjYXJlIGFib3V0ICdyZWFkYWJsZScgZXZlbnRzIHRoYXQgaGFwcGVuXG4gIC8vIGFmdGVyIHJlYWQoKWluZyBhbGwgdGhlIGJ5dGVzIGFuZCBub3QgZ2V0dGluZyBhbnkgcHVzaGJhY2suXG4gIHRoaXMucmFuT3V0ID0gZmFsc2U7XG5cbiAgLy8gdGhlIG51bWJlciBvZiB3cml0ZXJzIHRoYXQgYXJlIGF3YWl0aW5nIGEgZHJhaW4gZXZlbnQgaW4gLnBpcGUoKXNcbiAgdGhpcy5hd2FpdERyYWluID0gMDtcblxuICAvLyBpZiB0cnVlLCBhIG1heWJlUmVhZE1vcmUgaGFzIGJlZW4gc2NoZWR1bGVkXG4gIHRoaXMucmVhZGluZ01vcmUgPSBmYWxzZTtcblxuICB0aGlzLmRlY29kZXIgPSBudWxsO1xuICB0aGlzLmVuY29kaW5nID0gbnVsbDtcbiAgaWYgKG9wdGlvbnMuZW5jb2RpbmcpIHtcbiAgICBpZiAoIVN0cmluZ0RlY29kZXIpXG4gICAgICBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKTtcbiAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZztcbiAgfVxufVxuXG52YXIgRHVwbGV4O1xuZnVuY3Rpb24gUmVhZGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpXG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZShvcHRpb25zKTtcblxuICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUob3B0aW9ucywgdGhpcyk7XG5cbiAgLy8gbGVnYWN5XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuXG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLnJlYWQgPT09ICdmdW5jdGlvbicpXG4gICAgdGhpcy5fcmVhZCA9IG9wdGlvbnMucmVhZDtcblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuLy8gTWFudWFsbHkgc2hvdmUgc29tZXRoaW5nIGludG8gdGhlIHJlYWQoKSBidWZmZXIuXG4vLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiB0aGUgaGlnaFdhdGVyTWFyayBoYXMgbm90IGJlZW4gaGl0IHlldCxcbi8vIHNpbWlsYXIgdG8gaG93IFdyaXRhYmxlLndyaXRlKCkgcmV0dXJucyB0cnVlIGlmIHlvdSBzaG91bGRcbi8vIHdyaXRlKCkgc29tZSBtb3JlLlxuUmVhZGFibGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gZW5jb2RpbmcgfHwgc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuICAgIGlmIChlbmNvZGluZyAhPT0gc3RhdGUuZW5jb2RpbmcpIHtcbiAgICAgIGNodW5rID0gbmV3IEJ1ZmZlcihjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgZW5jb2RpbmcgPSAnJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBmYWxzZSk7XG59O1xuXG4vLyBVbnNoaWZ0IHNob3VsZCAqYWx3YXlzKiBiZSBzb21ldGhpbmcgZGlyZWN0bHkgb3V0IG9mIHJlYWQoKVxuUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbihjaHVuaykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssICcnLCB0cnVlKTtcbn07XG5cblJlYWRhYmxlLnByb3RvdHlwZS5pc1BhdXNlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID09PSBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBhZGRUb0Zyb250KSB7XG4gIHZhciBlciA9IGNodW5rSW52YWxpZChzdGF0ZSwgY2h1bmspO1xuICBpZiAoZXIpIHtcbiAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIH0gZWxzZSBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKTtcbiAgfSBlbHNlIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoc3RhdGUuZW5kZWQgJiYgIWFkZFRvRnJvbnQpIHtcbiAgICAgIHZhciBlID0gbmV3IEVycm9yKCdzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRicpO1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZSk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5lbmRFbWl0dGVkICYmIGFkZFRvRnJvbnQpIHtcbiAgICAgIHZhciBlID0gbmV3IEVycm9yKCdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcpO1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFhZGRUb0Zyb250ICYmICFlbmNvZGluZylcbiAgICAgICAgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcblxuICAgICAgaWYgKCFhZGRUb0Zyb250KVxuICAgICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG5cbiAgICAgIC8vIGlmIHdlIHdhbnQgdGhlIGRhdGEgbm93LCBqdXN0IGVtaXQgaXQuXG4gICAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLnN5bmMpIHtcbiAgICAgICAgc3RyZWFtLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIHN0cmVhbS5yZWFkKDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXBkYXRlIHRoZSBidWZmZXIgaW5mby5cbiAgICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgICAgICBpZiAoYWRkVG9Gcm9udClcbiAgICAgICAgICBzdGF0ZS5idWZmZXIudW5zaGlmdChjaHVuayk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG5cbiAgICAgICAgaWYgKHN0YXRlLm5lZWRSZWFkYWJsZSlcbiAgICAgICAgICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbiAgICAgIH1cblxuICAgICAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIWFkZFRvRnJvbnQpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gbmVlZE1vcmVEYXRhKHN0YXRlKTtcbn1cblxuXG4vLyBpZiBpdCdzIHBhc3QgdGhlIGhpZ2ggd2F0ZXIgbWFyaywgd2UgY2FuIHB1c2ggaW4gc29tZSBtb3JlLlxuLy8gQWxzbywgaWYgd2UgaGF2ZSBubyBkYXRhIHlldCwgd2UgY2FuIHN0YW5kIHNvbWVcbi8vIG1vcmUgYnl0ZXMuICBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIGh3bT0wLFxuLy8gc3VjaCBhcyB0aGUgcmVwbC4gIEFsc28sIGlmIHRoZSBwdXNoKCkgdHJpZ2dlcmVkIGFcbi8vIHJlYWRhYmxlIGV2ZW50LCBhbmQgdGhlIHVzZXIgY2FsbGVkIHJlYWQobGFyZ2VOdW1iZXIpIHN1Y2ggdGhhdFxuLy8gbmVlZFJlYWRhYmxlIHdhcyBzZXQsIHRoZW4gd2Ugb3VnaHQgdG8gcHVzaCBtb3JlLCBzbyB0aGF0IGFub3RoZXJcbi8vICdyZWFkYWJsZScgZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQuXG5mdW5jdGlvbiBuZWVkTW9yZURhdGEoc3RhdGUpIHtcbiAgcmV0dXJuICFzdGF0ZS5lbmRlZCAmJlxuICAgICAgICAgKHN0YXRlLm5lZWRSZWFkYWJsZSB8fFxuICAgICAgICAgIHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHxcbiAgICAgICAgICBzdGF0ZS5sZW5ndGggPT09IDApO1xufVxuXG4vLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblJlYWRhYmxlLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uKGVuYykge1xuICBpZiAoIVN0cmluZ0RlY29kZXIpXG4gICAgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYyk7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgPSBlbmM7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gRG9uJ3QgcmFpc2UgdGhlIGh3bSA+IDhNQlxudmFyIE1BWF9IV00gPSAweDgwMDAwMDtcbmZ1bmN0aW9uIGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pIHtcbiAgaWYgKG4gPj0gTUFYX0hXTSkge1xuICAgIG4gPSBNQVhfSFdNO1xuICB9IGVsc2Uge1xuICAgIC8vIEdldCB0aGUgbmV4dCBoaWdoZXN0IHBvd2VyIG9mIDJcbiAgICBuLS07XG4gICAgbiB8PSBuID4+PiAxO1xuICAgIG4gfD0gbiA+Pj4gMjtcbiAgICBuIHw9IG4gPj4+IDQ7XG4gICAgbiB8PSBuID4+PiA4O1xuICAgIG4gfD0gbiA+Pj4gMTY7XG4gICAgbisrO1xuICB9XG4gIHJldHVybiBuO1xufVxuXG5mdW5jdGlvbiBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpXG4gICAgcmV0dXJuIDA7XG5cbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpXG4gICAgcmV0dXJuIG4gPT09IDAgPyAwIDogMTtcblxuICBpZiAobiA9PT0gbnVsbCB8fCBpc05hTihuKSkge1xuICAgIC8vIG9ubHkgZmxvdyBvbmUgYnVmZmVyIGF0IGEgdGltZVxuICAgIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmJ1ZmZlci5sZW5ndGgpXG4gICAgICByZXR1cm4gc3RhdGUuYnVmZmVyWzBdLmxlbmd0aDtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICB9XG5cbiAgaWYgKG4gPD0gMClcbiAgICByZXR1cm4gMDtcblxuICAvLyBJZiB3ZSdyZSBhc2tpbmcgZm9yIG1vcmUgdGhhbiB0aGUgdGFyZ2V0IGJ1ZmZlciBsZXZlbCxcbiAgLy8gdGhlbiByYWlzZSB0aGUgd2F0ZXIgbWFyay4gIEJ1bXAgdXAgdG8gdGhlIG5leHQgaGlnaGVzdFxuICAvLyBwb3dlciBvZiAyLCB0byBwcmV2ZW50IGluY3JlYXNpbmcgaXQgZXhjZXNzaXZlbHkgaW4gdGlueVxuICAvLyBhbW91bnRzLlxuICBpZiAobiA+IHN0YXRlLmhpZ2hXYXRlck1hcmspXG4gICAgc3RhdGUuaGlnaFdhdGVyTWFyayA9IGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pO1xuXG4gIC8vIGRvbid0IGhhdmUgdGhhdCBtdWNoLiAgcmV0dXJuIG51bGwsIHVubGVzcyB3ZSd2ZSBlbmRlZC5cbiAgaWYgKG4gPiBzdGF0ZS5sZW5ndGgpIHtcbiAgICBpZiAoIXN0YXRlLmVuZGVkKSB7XG4gICAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdGF0ZS5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG47XG59XG5cbi8vIHlvdSBjYW4gb3ZlcnJpZGUgZWl0aGVyIHRoaXMgbWV0aG9kLCBvciB0aGUgYXN5bmMgX3JlYWQobikgYmVsb3cuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uKG4pIHtcbiAgZGVidWcoJ3JlYWQnLCBuKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIG5PcmlnID0gbjtcblxuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPiAwKVxuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuXG4gIC8vIGlmIHdlJ3JlIGRvaW5nIHJlYWQoMCkgdG8gdHJpZ2dlciBhIHJlYWRhYmxlIGV2ZW50LCBidXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGEgYnVuY2ggb2YgZGF0YSBpbiB0aGUgYnVmZmVyLCB0aGVuIGp1c3QgdHJpZ2dlclxuICAvLyB0aGUgJ3JlYWRhYmxlJyBldmVudCBhbmQgbW92ZSBvbi5cbiAgaWYgKG4gPT09IDAgJiZcbiAgICAgIHN0YXRlLm5lZWRSZWFkYWJsZSAmJlxuICAgICAgKHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmVuZGVkKSkge1xuICAgIGRlYnVnKCdyZWFkOiBlbWl0UmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKTtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKVxuICAgICAgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgZWxzZVxuICAgICAgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbiA9IGhvd011Y2hUb1JlYWQobiwgc3RhdGUpO1xuXG4gIC8vIGlmIHdlJ3ZlIGVuZGVkLCBhbmQgd2UncmUgbm93IGNsZWFyLCB0aGVuIGZpbmlzaCBpdCB1cC5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUuZW5kZWQpIHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKVxuICAgICAgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgdmFyIGRvUmVhZCA9IHN0YXRlLm5lZWRSZWFkYWJsZTtcbiAgZGVidWcoJ25lZWQgcmVhZGFibGUnLCBkb1JlYWQpO1xuXG4gIC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwIHx8IHN0YXRlLmxlbmd0aCAtIG4gPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZG9SZWFkID0gdHJ1ZTtcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpO1xuICB9XG5cbiAgLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZykge1xuICAgIGRvUmVhZCA9IGZhbHNlO1xuICAgIGRlYnVnKCdyZWFkaW5nIG9yIGVuZGVkJywgZG9SZWFkKTtcbiAgfVxuXG4gIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpO1xuICAgIHN0YXRlLnJlYWRpbmcgPSB0cnVlO1xuICAgIHN0YXRlLnN5bmMgPSB0cnVlO1xuICAgIC8vIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMClcbiAgICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgLy8gY2FsbCBpbnRlcm5hbCByZWFkIG1ldGhvZFxuICAgIHRoaXMuX3JlYWQoc3RhdGUuaGlnaFdhdGVyTWFyayk7XG4gICAgc3RhdGUuc3luYyA9IGZhbHNlO1xuICB9XG5cbiAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgLy8gYW5kIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IG11Y2ggZGF0YSB3ZSBjYW4gcmV0dXJuIHRvIHRoZSB1c2VyLlxuICBpZiAoZG9SZWFkICYmICFzdGF0ZS5yZWFkaW5nKVxuICAgIG4gPSBob3dNdWNoVG9SZWFkKG5PcmlnLCBzdGF0ZSk7XG5cbiAgdmFyIHJldDtcbiAgaWYgKG4gPiAwKVxuICAgIHJldCA9IGZyb21MaXN0KG4sIHN0YXRlKTtcbiAgZWxzZVxuICAgIHJldCA9IG51bGw7XG5cbiAgaWYgKHJldCA9PT0gbnVsbCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgbiA9IDA7XG4gIH1cblxuICBzdGF0ZS5sZW5ndGggLT0gbjtcblxuICAvLyBJZiB3ZSBoYXZlIG5vdGhpbmcgaW4gdGhlIGJ1ZmZlciwgdGhlbiB3ZSB3YW50IHRvIGtub3dcbiAgLy8gYXMgc29vbiBhcyB3ZSAqZG8qIGdldCBzb21ldGhpbmcgaW50byB0aGUgYnVmZmVyLlxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmICFzdGF0ZS5lbmRlZClcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gIC8vIElmIHdlIHRyaWVkIHRvIHJlYWQoKSBwYXN0IHRoZSBFT0YsIHRoZW4gZW1pdCBlbmQgb24gdGhlIG5leHQgdGljay5cbiAgaWYgKG5PcmlnICE9PSBuICYmIHN0YXRlLmVuZGVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMClcbiAgICBlbmRSZWFkYWJsZSh0aGlzKTtcblxuICBpZiAocmV0ICE9PSBudWxsKVxuICAgIHRoaXMuZW1pdCgnZGF0YScsIHJldCk7XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIGNodW5rSW52YWxpZChzdGF0ZSwgY2h1bmspIHtcbiAgdmFyIGVyID0gbnVsbDtcbiAgaWYgKCEoQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkgJiZcbiAgICAgIHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiZcbiAgICAgIGNodW5rICE9PSBudWxsICYmXG4gICAgICBjaHVuayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAhc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGVyID0gbmV3IFR5cGVFcnJvcignSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuaycpO1xuICB9XG4gIHJldHVybiBlcjtcbn1cblxuXG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm47XG4gIGlmIChzdGF0ZS5kZWNvZGVyKSB7XG4gICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG4gICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcblxuICAvLyBlbWl0ICdyZWFkYWJsZScgbm93IHRvIG1ha2Ugc3VyZSBpdCBnZXRzIHBpY2tlZCB1cC5cbiAgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG59XG5cbi8vIERvbid0IGVtaXQgcmVhZGFibGUgcmlnaHQgYXdheSBpbiBzeW5jIG1vZGUsIGJlY2F1c2UgdGhpcyBjYW4gdHJpZ2dlclxuLy8gYW5vdGhlciByZWFkKCkgY2FsbCA9PiBzdGFjayBvdmVyZmxvdy4gIFRoaXMgd2F5LCBpdCBtaWdodCB0cmlnZ2VyXG4vLyBhIG5leHRUaWNrIHJlY3Vyc2lvbiB3YXJuaW5nLCBidXQgdGhhdCdzIG5vdCBzbyBiYWQuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLmZsb3dpbmcpO1xuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgaWYgKHN0YXRlLnN5bmMpXG4gICAgICBwcm9jZXNzTmV4dFRpY2soZW1pdFJlYWRhYmxlXywgc3RyZWFtKTtcbiAgICBlbHNlXG4gICAgICBlbWl0UmVhZGFibGVfKHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgZGVidWcoJ2VtaXQgcmVhZGFibGUnKTtcbiAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJyk7XG4gIGZsb3coc3RyZWFtKTtcbn1cblxuXG4vLyBhdCB0aGlzIHBvaW50LCB0aGUgdXNlciBoYXMgcHJlc3VtYWJseSBzZWVuIHRoZSAncmVhZGFibGUnIGV2ZW50LFxuLy8gYW5kIGNhbGxlZCByZWFkKCkgdG8gY29uc3VtZSBzb21lIGRhdGEuICB0aGF0IG1heSBoYXZlIHRyaWdnZXJlZFxuLy8gaW4gdHVybiBhbm90aGVyIF9yZWFkKG4pIGNhbGwsIGluIHdoaWNoIGNhc2UgcmVhZGluZyA9IHRydWUgaWZcbi8vIGl0J3MgaW4gcHJvZ3Jlc3MuXG4vLyBIb3dldmVyLCBpZiB3ZSdyZSBub3QgZW5kZWQsIG9yIHJlYWRpbmcsIGFuZCB0aGUgbGVuZ3RoIDwgaHdtLFxuLy8gdGhlbiBnbyBhaGVhZCBhbmQgdHJ5IHRvIHJlYWQgc29tZSBtb3JlIHByZWVtcHRpdmVseS5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmdNb3JlKSB7XG4gICAgc3RhdGUucmVhZGluZ01vcmUgPSB0cnVlO1xuICAgIHByb2Nlc3NOZXh0VGljayhtYXliZVJlYWRNb3JlXywgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZV8oc3RyZWFtLCBzdGF0ZSkge1xuICB2YXIgbGVuID0gc3RhdGUubGVuZ3RoO1xuICB3aGlsZSAoIXN0YXRlLnJlYWRpbmcgJiYgIXN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLmVuZGVkICYmXG4gICAgICAgICBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgaWYgKGxlbiA9PT0gc3RhdGUubGVuZ3RoKVxuICAgICAgLy8gZGlkbid0IGdldCBhbnkgZGF0YSwgc3RvcCBzcGlubmluZy5cbiAgICAgIGJyZWFrO1xuICAgIGVsc2VcbiAgICAgIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgfVxuICBzdGF0ZS5yZWFkaW5nTW9yZSA9IGZhbHNlO1xufVxuXG4vLyBhYnN0cmFjdCBtZXRob2QuICB0byBiZSBvdmVycmlkZGVuIGluIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyBjYWxsIGNiKGVyLCBkYXRhKSB3aGVyZSBkYXRhIGlzIDw9IG4gaW4gbGVuZ3RoLlxuLy8gZm9yIHZpcnR1YWwgKG5vbi1zdHJpbmcsIG5vbi1idWZmZXIpIHN0cmVhbXMsIFwibGVuZ3RoXCIgaXMgc29tZXdoYXRcbi8vIGFyYml0cmFyeSwgYW5kIHBlcmhhcHMgbm90IHZlcnkgbWVhbmluZ2Z1bC5cblJlYWRhYmxlLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uKG4pIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBwaXBlT3B0cykge1xuICB2YXIgc3JjID0gdGhpcztcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBzd2l0Y2ggKHN0YXRlLnBpcGVzQ291bnQpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGF0ZS5waXBlcyA9IGRlc3Q7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICBzdGF0ZS5waXBlcyA9IFtzdGF0ZS5waXBlcywgZGVzdF07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3RhdGUucGlwZXMucHVzaChkZXN0KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHN0YXRlLnBpcGVzQ291bnQgKz0gMTtcbiAgZGVidWcoJ3BpcGUgY291bnQ9JWQgb3B0cz0laicsIHN0YXRlLnBpcGVzQ291bnQsIHBpcGVPcHRzKTtcblxuICB2YXIgZG9FbmQgPSAoIXBpcGVPcHRzIHx8IHBpcGVPcHRzLmVuZCAhPT0gZmFsc2UpICYmXG4gICAgICAgICAgICAgIGRlc3QgIT09IHByb2Nlc3Muc3Rkb3V0ICYmXG4gICAgICAgICAgICAgIGRlc3QgIT09IHByb2Nlc3Muc3RkZXJyO1xuXG4gIHZhciBlbmRGbiA9IGRvRW5kID8gb25lbmQgOiBjbGVhbnVwO1xuICBpZiAoc3RhdGUuZW5kRW1pdHRlZClcbiAgICBwcm9jZXNzTmV4dFRpY2soZW5kRm4pO1xuICBlbHNlXG4gICAgc3JjLm9uY2UoJ2VuZCcsIGVuZEZuKTtcblxuICBkZXN0Lm9uKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gIGZ1bmN0aW9uIG9udW5waXBlKHJlYWRhYmxlKSB7XG4gICAgZGVidWcoJ29udW5waXBlJyk7XG4gICAgaWYgKHJlYWRhYmxlID09PSBzcmMpIHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBkZWJ1Zygnb25lbmQnKTtcbiAgICBkZXN0LmVuZCgpO1xuICB9XG5cbiAgLy8gd2hlbiB0aGUgZGVzdCBkcmFpbnMsIGl0IHJlZHVjZXMgdGhlIGF3YWl0RHJhaW4gY291bnRlclxuICAvLyBvbiB0aGUgc291cmNlLiAgVGhpcyB3b3VsZCBiZSBtb3JlIGVsZWdhbnQgd2l0aCBhIC5vbmNlKClcbiAgLy8gaGFuZGxlciBpbiBmbG93KCksIGJ1dCBhZGRpbmcgYW5kIHJlbW92aW5nIHJlcGVhdGVkbHkgaXNcbiAgLy8gdG9vIHNsb3cuXG4gIHZhciBvbmRyYWluID0gcGlwZU9uRHJhaW4oc3JjKTtcbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICB2YXIgY2xlYW5lZFVwID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgZGVidWcoJ2NsZWFudXAnKTtcbiAgICAvLyBjbGVhbnVwIGV2ZW50IGhhbmRsZXJzIG9uY2UgdGhlIHBpcGUgaXMgYnJva2VuXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ3VucGlwZScsIG9udW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIGNsZWFudXApO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uZGF0YSk7XG5cbiAgICBjbGVhbmVkVXAgPSB0cnVlO1xuXG4gICAgLy8gaWYgdGhlIHJlYWRlciBpcyB3YWl0aW5nIGZvciBhIGRyYWluIGV2ZW50IGZyb20gdGhpc1xuICAgIC8vIHNwZWNpZmljIHdyaXRlciwgdGhlbiBpdCB3b3VsZCBjYXVzZSBpdCB0byBuZXZlciBzdGFydFxuICAgIC8vIGZsb3dpbmcgYWdhaW4uXG4gICAgLy8gU28sIGlmIHRoaXMgaXMgYXdhaXRpbmcgYSBkcmFpbiwgdGhlbiB3ZSBqdXN0IGNhbGwgaXQgbm93LlxuICAgIC8vIElmIHdlIGRvbid0IGtub3csIHRoZW4gYXNzdW1lIHRoYXQgd2UgYXJlIHdhaXRpbmcgZm9yIG9uZS5cbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbiAmJlxuICAgICAgICAoIWRlc3QuX3dyaXRhYmxlU3RhdGUgfHwgZGVzdC5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pKVxuICAgICAgb25kcmFpbigpO1xuICB9XG5cbiAgc3JjLm9uKCdkYXRhJywgb25kYXRhKTtcbiAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7XG4gICAgZGVidWcoJ29uZGF0YScpO1xuICAgIHZhciByZXQgPSBkZXN0LndyaXRlKGNodW5rKTtcbiAgICBpZiAoZmFsc2UgPT09IHJldCkge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgdW5waXBlZCBkdXJpbmcgYGRlc3Qud3JpdGUoKWAsIGl0IGlzIHBvc3NpYmxlXG4gICAgICAvLyB0byBnZXQgc3R1Y2sgaW4gYSBwZXJtYW5lbnRseSBwYXVzZWQgc3RhdGUgaWYgdGhhdCB3cml0ZVxuICAgICAgLy8gYWxzbyByZXR1cm5lZCBmYWxzZS5cbiAgICAgIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxICYmXG4gICAgICAgICAgc3RhdGUucGlwZXNbMF0gPT09IGRlc3QgJiZcbiAgICAgICAgICBzcmMubGlzdGVuZXJDb3VudCgnZGF0YScpID09PSAxICYmXG4gICAgICAgICAgIWNsZWFuZWRVcCkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgc3JjLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4pO1xuICAgICAgICBzcmMuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbisrO1xuICAgICAgfVxuICAgICAgc3JjLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIGRlc3QgaGFzIGFuIGVycm9yLCB0aGVuIHN0b3AgcGlwaW5nIGludG8gaXQuXG4gIC8vIGhvd2V2ZXIsIGRvbid0IHN1cHByZXNzIHRoZSB0aHJvd2luZyBiZWhhdmlvciBmb3IgdGhpcy5cbiAgZnVuY3Rpb24gb25lcnJvcihlcikge1xuICAgIGRlYnVnKCdvbmVycm9yJywgZXIpO1xuICAgIHVucGlwZSgpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgaWYgKEVFbGlzdGVuZXJDb3VudChkZXN0LCAnZXJyb3InKSA9PT0gMClcbiAgICAgIGRlc3QuZW1pdCgnZXJyb3InLCBlcik7XG4gIH1cbiAgLy8gVGhpcyBpcyBhIGJydXRhbGx5IHVnbHkgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlclxuICAvLyBpcyBhdHRhY2hlZCBiZWZvcmUgYW55IHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLlxuICBpZiAoIWRlc3QuX2V2ZW50cyB8fCAhZGVzdC5fZXZlbnRzLmVycm9yKVxuICAgIGRlc3Qub24oJ2Vycm9yJywgb25lcnJvcik7XG4gIGVsc2UgaWYgKGlzQXJyYXkoZGVzdC5fZXZlbnRzLmVycm9yKSlcbiAgICBkZXN0Ll9ldmVudHMuZXJyb3IudW5zaGlmdChvbmVycm9yKTtcbiAgZWxzZVxuICAgIGRlc3QuX2V2ZW50cy5lcnJvciA9IFtvbmVycm9yLCBkZXN0Ll9ldmVudHMuZXJyb3JdO1xuXG5cbiAgLy8gQm90aCBjbG9zZSBhbmQgZmluaXNoIHNob3VsZCB0cmlnZ2VyIHVucGlwZSwgYnV0IG9ubHkgb25jZS5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdjbG9zZScsIG9uY2xvc2UpO1xuICBmdW5jdGlvbiBvbmZpbmlzaCgpIHtcbiAgICBkZWJ1Zygnb25maW5pc2gnKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpO1xuXG4gIGZ1bmN0aW9uIHVucGlwZSgpIHtcbiAgICBkZWJ1ZygndW5waXBlJyk7XG4gICAgc3JjLnVucGlwZShkZXN0KTtcbiAgfVxuXG4gIC8vIHRlbGwgdGhlIGRlc3QgdGhhdCBpdCdzIGJlaW5nIHBpcGVkIHRvXG4gIGRlc3QuZW1pdCgncGlwZScsIHNyYyk7XG5cbiAgLy8gc3RhcnQgdGhlIGZsb3cgaWYgaXQgaGFzbid0IGJlZW4gc3RhcnRlZCBhbHJlYWR5LlxuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGlwZSByZXN1bWUnKTtcbiAgICBzcmMucmVzdW1lKCk7XG4gIH1cblxuICByZXR1cm4gZGVzdDtcbn07XG5cbmZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YXRlID0gc3JjLl9yZWFkYWJsZVN0YXRlO1xuICAgIGRlYnVnKCdwaXBlT25EcmFpbicsIHN0YXRlLmF3YWl0RHJhaW4pO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluKVxuICAgICAgc3RhdGUuYXdhaXREcmFpbi0tO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluID09PSAwICYmIEVFbGlzdGVuZXJDb3VudChzcmMsICdkYXRhJykpIHtcbiAgICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgICAgZmxvdyhzcmMpO1xuICAgIH1cbiAgfTtcbn1cblxuXG5SZWFkYWJsZS5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24oZGVzdCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuXG4gIC8vIGlmIHdlJ3JlIG5vdCBwaXBpbmcgYW55d2hlcmUsIHRoZW4gZG8gbm90aGluZy5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDApXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8ganVzdCBvbmUgZGVzdGluYXRpb24uICBtb3N0IGNvbW1vbiBjYXNlLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSkge1xuICAgIC8vIHBhc3NlZCBpbiBvbmUsIGJ1dCBpdCdzIG5vdCB0aGUgcmlnaHQgb25lLlxuICAgIGlmIChkZXN0ICYmIGRlc3QgIT09IHN0YXRlLnBpcGVzKVxuICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAoIWRlc3QpXG4gICAgICBkZXN0ID0gc3RhdGUucGlwZXM7XG5cbiAgICAvLyBnb3QgYSBtYXRjaC5cbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIGlmIChkZXN0KVxuICAgICAgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHNsb3cgY2FzZS4gbXVsdGlwbGUgcGlwZSBkZXN0aW5hdGlvbnMuXG5cbiAgaWYgKCFkZXN0KSB7XG4gICAgLy8gcmVtb3ZlIGFsbC5cbiAgICB2YXIgZGVzdHMgPSBzdGF0ZS5waXBlcztcbiAgICB2YXIgbGVuID0gc3RhdGUucGlwZXNDb3VudDtcbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICAgIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGZpbmQgdGhlIHJpZ2h0IG9uZS5cbiAgdmFyIGkgPSBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KTtcbiAgaWYgKGkgPT09IC0xKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIHN0YXRlLnBpcGVzLnNwbGljZShpLCAxKTtcbiAgc3RhdGUucGlwZXNDb3VudCAtPSAxO1xuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSlcbiAgICBzdGF0ZS5waXBlcyA9IHN0YXRlLnBpcGVzWzBdO1xuXG4gIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBzZXQgdXAgZGF0YSBldmVudHMgaWYgdGhleSBhcmUgYXNrZWQgZm9yXG4vLyBFbnN1cmUgcmVhZGFibGUgbGlzdGVuZXJzIGV2ZW50dWFsbHkgZ2V0IHNvbWV0aGluZ1xuUmVhZGFibGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKTtcblxuICAvLyBJZiBsaXN0ZW5pbmcgdG8gZGF0YSwgYW5kIGl0IGhhcyBub3QgZXhwbGljaXRseSBiZWVuIHBhdXNlZCxcbiAgLy8gdGhlbiBjYWxsIHJlc3VtZSB0byBzdGFydCB0aGUgZmxvdyBvZiBkYXRhIG9uIHRoZSBuZXh0IHRpY2suXG4gIGlmIChldiA9PT0gJ2RhdGEnICYmIGZhbHNlICE9PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpIHtcbiAgICB0aGlzLnJlc3VtZSgpO1xuICB9XG5cbiAgaWYgKGV2ID09PSAncmVhZGFibGUnICYmIHRoaXMucmVhZGFibGUpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICghc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcpIHtcbiAgICAgIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIGlmICghc3RhdGUucmVhZGluZykge1xuICAgICAgICBwcm9jZXNzTmV4dFRpY2soblJlYWRpbmdOZXh0VGljaywgdGhpcyk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxlbmd0aCkge1xuICAgICAgICBlbWl0UmVhZGFibGUodGhpcywgc3RhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uO1xuXG5mdW5jdGlvbiBuUmVhZGluZ05leHRUaWNrKHNlbGYpIHtcbiAgZGVidWcoJ3JlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCcpO1xuICBzZWxmLnJlYWQoMCk7XG59XG5cbi8vIHBhdXNlKCkgYW5kIHJlc3VtZSgpIGFyZSByZW1uYW50cyBvZiB0aGUgbGVnYWN5IHJlYWRhYmxlIHN0cmVhbSBBUElcbi8vIElmIHRoZSB1c2VyIHVzZXMgdGhlbSwgdGhlbiBzd2l0Y2ggaW50byBvbGQgbW9kZS5cblJlYWRhYmxlLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZScpO1xuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgIHJlc3VtZSh0aGlzLCBzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiByZXN1bWUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlc3VtZVNjaGVkdWxlZCkge1xuICAgIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IHRydWU7XG4gICAgcHJvY2Vzc05leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICB9XG5cbiAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gZmFsc2U7XG4gIHN0cmVhbS5lbWl0KCdyZXN1bWUnKTtcbiAgZmxvdyhzdHJlYW0pO1xuICBpZiAoc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUucmVhZGluZylcbiAgICBzdHJlYW0ucmVhZCgwKTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdjYWxsIHBhdXNlIGZsb3dpbmc9JWonLCB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpO1xuICBpZiAoZmFsc2UgIT09IHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwYXVzZScpO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgncGF1c2UnKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGZsb3coc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2Zsb3cnLCBzdGF0ZS5mbG93aW5nKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgY2h1bmsgPSBzdHJlYW0ucmVhZCgpO1xuICAgIH0gd2hpbGUgKG51bGwgIT09IGNodW5rICYmIHN0YXRlLmZsb3dpbmcpO1xuICB9XG59XG5cbi8vIHdyYXAgYW4gb2xkLXN0eWxlIHN0cmVhbSBhcyB0aGUgYXN5bmMgZGF0YSBzb3VyY2UuXG4vLyBUaGlzIGlzICpub3QqIHBhcnQgb2YgdGhlIHJlYWRhYmxlIHN0cmVhbSBpbnRlcmZhY2UuXG4vLyBJdCBpcyBhbiB1Z2x5IHVuZm9ydHVuYXRlIG1lc3Mgb2YgaGlzdG9yeS5cblJlYWRhYmxlLnByb3RvdHlwZS53cmFwID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBwYXVzZWQgPSBmYWxzZTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgZW5kJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIXN0YXRlLmVuZGVkKSB7XG4gICAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aClcbiAgICAgICAgc2VsZi5wdXNoKGNodW5rKTtcbiAgICB9XG5cbiAgICBzZWxmLnB1c2gobnVsbCk7XG4gIH0pO1xuXG4gIHN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uKGNodW5rKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgZGF0YScpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyKVxuICAgICAgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcblxuICAgIC8vIGRvbid0IHNraXAgb3ZlciBmYWxzeSB2YWx1ZXMgaW4gb2JqZWN0TW9kZVxuICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlICYmIChjaHVuayA9PT0gbnVsbCB8fCBjaHVuayA9PT0gdW5kZWZpbmVkKSlcbiAgICAgIHJldHVybjtcbiAgICBlbHNlIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiAoIWNodW5rIHx8ICFjaHVuay5sZW5ndGgpKVxuICAgICAgcmV0dXJuO1xuXG4gICAgdmFyIHJldCA9IHNlbGYucHVzaChjaHVuayk7XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHByb3h5IGFsbCB0aGUgb3RoZXIgbWV0aG9kcy5cbiAgLy8gaW1wb3J0YW50IHdoZW4gd3JhcHBpbmcgZmlsdGVycyBhbmQgZHVwbGV4ZXMuXG4gIGZvciAodmFyIGkgaW4gc3RyZWFtKSB7XG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gZnVuY3Rpb24obWV0aG9kKSB7IHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbVttZXRob2RdLmFwcGx5KHN0cmVhbSwgYXJndW1lbnRzKTtcbiAgICAgIH07IH0oaSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJveHkgY2VydGFpbiBpbXBvcnRhbnQgZXZlbnRzLlxuICB2YXIgZXZlbnRzID0gWydlcnJvcicsICdjbG9zZScsICdkZXN0cm95JywgJ3BhdXNlJywgJ3Jlc3VtZSddO1xuICBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24oZXYpIHtcbiAgICBzdHJlYW0ub24oZXYsIHNlbGYuZW1pdC5iaW5kKHNlbGYsIGV2KSk7XG4gIH0pO1xuXG4gIC8vIHdoZW4gd2UgdHJ5IHRvIGNvbnN1bWUgc29tZSBtb3JlIGJ5dGVzLCBzaW1wbHkgdW5wYXVzZSB0aGVcbiAgLy8gdW5kZXJseWluZyBzdHJlYW0uXG4gIHNlbGYuX3JlYWQgPSBmdW5jdGlvbihuKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgX3JlYWQnLCBuKTtcbiAgICBpZiAocGF1c2VkKSB7XG4gICAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICAgIHN0cmVhbS5yZXN1bWUoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHNlbGY7XG59O1xuXG5cbi8vIGV4cG9zZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS5cblJlYWRhYmxlLl9mcm9tTGlzdCA9IGZyb21MaXN0O1xuXG4vLyBQbHVjayBvZmYgbiBieXRlcyBmcm9tIGFuIGFycmF5IG9mIGJ1ZmZlcnMuXG4vLyBMZW5ndGggaXMgdGhlIGNvbWJpbmVkIGxlbmd0aHMgb2YgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBsaXN0LlxuZnVuY3Rpb24gZnJvbUxpc3Qobiwgc3RhdGUpIHtcbiAgdmFyIGxpc3QgPSBzdGF0ZS5idWZmZXI7XG4gIHZhciBsZW5ndGggPSBzdGF0ZS5sZW5ndGg7XG4gIHZhciBzdHJpbmdNb2RlID0gISFzdGF0ZS5kZWNvZGVyO1xuICB2YXIgb2JqZWN0TW9kZSA9ICEhc3RhdGUub2JqZWN0TW9kZTtcbiAgdmFyIHJldDtcblxuICAvLyBub3RoaW5nIGluIHRoZSBsaXN0LCBkZWZpbml0ZWx5IGVtcHR5LlxuICBpZiAobGlzdC5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgaWYgKGxlbmd0aCA9PT0gMClcbiAgICByZXQgPSBudWxsO1xuICBlbHNlIGlmIChvYmplY3RNb2RlKVxuICAgIHJldCA9IGxpc3Quc2hpZnQoKTtcbiAgZWxzZSBpZiAoIW4gfHwgbiA+PSBsZW5ndGgpIHtcbiAgICAvLyByZWFkIGl0IGFsbCwgdHJ1bmNhdGUgdGhlIGFycmF5LlxuICAgIGlmIChzdHJpbmdNb2RlKVxuICAgICAgcmV0ID0gbGlzdC5qb2luKCcnKTtcbiAgICBlbHNlIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgIHJldCA9IGxpc3RbMF07XG4gICAgZWxzZVxuICAgICAgcmV0ID0gQnVmZmVyLmNvbmNhdChsaXN0LCBsZW5ndGgpO1xuICAgIGxpc3QubGVuZ3RoID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyByZWFkIGp1c3Qgc29tZSBvZiBpdC5cbiAgICBpZiAobiA8IGxpc3RbMF0ubGVuZ3RoKSB7XG4gICAgICAvLyBqdXN0IHRha2UgYSBwYXJ0IG9mIHRoZSBmaXJzdCBsaXN0IGl0ZW0uXG4gICAgICAvLyBzbGljZSBpcyB0aGUgc2FtZSBmb3IgYnVmZmVycyBhbmQgc3RyaW5ncy5cbiAgICAgIHZhciBidWYgPSBsaXN0WzBdO1xuICAgICAgcmV0ID0gYnVmLnNsaWNlKDAsIG4pO1xuICAgICAgbGlzdFswXSA9IGJ1Zi5zbGljZShuKTtcbiAgICB9IGVsc2UgaWYgKG4gPT09IGxpc3RbMF0ubGVuZ3RoKSB7XG4gICAgICAvLyBmaXJzdCBsaXN0IGlzIGEgcGVyZmVjdCBtYXRjaFxuICAgICAgcmV0ID0gbGlzdC5zaGlmdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb21wbGV4IGNhc2UuXG4gICAgICAvLyB3ZSBoYXZlIGVub3VnaCB0byBjb3ZlciBpdCwgYnV0IGl0IHNwYW5zIHBhc3QgdGhlIGZpcnN0IGJ1ZmZlci5cbiAgICAgIGlmIChzdHJpbmdNb2RlKVxuICAgICAgICByZXQgPSAnJztcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0ID0gbmV3IEJ1ZmZlcihuKTtcblxuICAgICAgdmFyIGMgPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGwgJiYgYyA8IG47IGkrKykge1xuICAgICAgICB2YXIgYnVmID0gbGlzdFswXTtcbiAgICAgICAgdmFyIGNweSA9IE1hdGgubWluKG4gLSBjLCBidWYubGVuZ3RoKTtcblxuICAgICAgICBpZiAoc3RyaW5nTW9kZSlcbiAgICAgICAgICByZXQgKz0gYnVmLnNsaWNlKDAsIGNweSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBidWYuY29weShyZXQsIGMsIDAsIGNweSk7XG5cbiAgICAgICAgaWYgKGNweSA8IGJ1Zi5sZW5ndGgpXG4gICAgICAgICAgbGlzdFswXSA9IGJ1Zi5zbGljZShjcHkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgbGlzdC5zaGlmdCgpO1xuXG4gICAgICAgIGMgKz0gY3B5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG5cbiAgLy8gSWYgd2UgZ2V0IGhlcmUgYmVmb3JlIGNvbnN1bWluZyBhbGwgdGhlIGJ5dGVzLCB0aGVuIHRoYXQgaXMgYVxuICAvLyBidWcgaW4gbm9kZS4gIFNob3VsZCBuZXZlciBoYXBwZW4uXG4gIGlmIChzdGF0ZS5sZW5ndGggPiAwKVxuICAgIHRocm93IG5ldyBFcnJvcignZW5kUmVhZGFibGUgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTtcblxuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gICAgcHJvY2Vzc05leHRUaWNrKGVuZFJlYWRhYmxlTlQsIHN0YXRlLCBzdHJlYW0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlTlQoc3RhdGUsIHN0cmVhbSkge1xuICAvLyBDaGVjayB0aGF0IHdlIGRpZG4ndCBnZXQgb25lIGxhc3QgdW5zaGlmdC5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIHN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5yZWFkYWJsZSA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdlbmQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JFYWNoICh4cywgZikge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGYoeHNbaV0sIGkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YgKHhzLCB4KSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKHhzW2ldID09PSB4KSByZXR1cm4gaTtcbiAgfVxuICByZXR1cm4gLTE7XG59XG4iLCJ2YXIgZW5jb2RpbmdzID0gcmVxdWlyZSgnLi9saWIvZW5jb2RpbmdzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29kZWM7XG5cbmZ1bmN0aW9uIENvZGVjKG9wdHMpe1xuICB0aGlzLm9wdHMgPSBvcHRzIHx8IHt9O1xuICB0aGlzLmVuY29kaW5ncyA9IGVuY29kaW5ncztcbn1cblxuQ29kZWMucHJvdG90eXBlLl9lbmNvZGluZyA9IGZ1bmN0aW9uKGVuY29kaW5nKXtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PSAnc3RyaW5nJykgZW5jb2RpbmcgPSBlbmNvZGluZ3NbZW5jb2RpbmddO1xuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9IGVuY29kaW5ncy5pZDtcbiAgcmV0dXJuIGVuY29kaW5nO1xufTtcblxuQ29kZWMucHJvdG90eXBlLl9rZXlFbmNvZGluZyA9IGZ1bmN0aW9uKG9wdHMsIGJhdGNoT3B0cyl7XG4gIHJldHVybiB0aGlzLl9lbmNvZGluZyhiYXRjaE9wdHMgJiYgYmF0Y2hPcHRzLmtleUVuY29kaW5nXG4gICAgfHwgb3B0cyAmJiBvcHRzLmtleUVuY29kaW5nXG4gICAgfHwgdGhpcy5vcHRzLmtleUVuY29kaW5nKTtcbn07XG5cbkNvZGVjLnByb3RvdHlwZS5fdmFsdWVFbmNvZGluZyA9IGZ1bmN0aW9uKG9wdHMsIGJhdGNoT3B0cyl7XG4gIHJldHVybiB0aGlzLl9lbmNvZGluZyhcbiAgICBiYXRjaE9wdHMgJiYgKGJhdGNoT3B0cy52YWx1ZUVuY29kaW5nIHx8IGJhdGNoT3B0cy5lbmNvZGluZylcbiAgICB8fCBvcHRzICYmIChvcHRzLnZhbHVlRW5jb2RpbmcgfHwgb3B0cy5lbmNvZGluZylcbiAgICB8fCAodGhpcy5vcHRzLnZhbHVlRW5jb2RpbmcgfHwgdGhpcy5vcHRzLmVuY29kaW5nKSk7XG59O1xuXG5Db2RlYy5wcm90b3R5cGUuZW5jb2RlS2V5ID0gZnVuY3Rpb24oa2V5LCBvcHRzLCBiYXRjaE9wdHMpe1xuICByZXR1cm4gdGhpcy5fa2V5RW5jb2Rpbmcob3B0cywgYmF0Y2hPcHRzKS5lbmNvZGUoa2V5KTtcbn07XG5cbkNvZGVjLnByb3RvdHlwZS5lbmNvZGVWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRzLCBiYXRjaE9wdHMpe1xuICByZXR1cm4gdGhpcy5fdmFsdWVFbmNvZGluZyhvcHRzLCBiYXRjaE9wdHMpLmVuY29kZSh2YWx1ZSk7XG59O1xuXG5Db2RlYy5wcm90b3R5cGUuZGVjb2RlS2V5ID0gZnVuY3Rpb24oa2V5LCBvcHRzKXtcbiAgcmV0dXJuIHRoaXMuX2tleUVuY29kaW5nKG9wdHMpLmRlY29kZShrZXkpO1xufTtcblxuQ29kZWMucHJvdG90eXBlLmRlY29kZVZhbHVlID0gZnVuY3Rpb24odmFsdWUsIG9wdHMpe1xuICByZXR1cm4gdGhpcy5fdmFsdWVFbmNvZGluZyhvcHRzKS5kZWNvZGUodmFsdWUpO1xufTtcblxuQ29kZWMucHJvdG90eXBlLmVuY29kZUJhdGNoID0gZnVuY3Rpb24ob3BzLCBvcHRzKXtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHJldHVybiBvcHMubWFwKGZ1bmN0aW9uKF9vcCl7XG4gICAgdmFyIG9wID0ge1xuICAgICAgdHlwZTogX29wLnR5cGUsXG4gICAgICBrZXk6IHNlbGYuZW5jb2RlS2V5KF9vcC5rZXksIG9wdHMsIF9vcClcbiAgICB9O1xuICAgIGlmIChzZWxmLmtleUFzQnVmZmVyKG9wdHMsIF9vcCkpIG9wLmtleUVuY29kaW5nID0gJ2JpbmFyeSc7XG4gICAgaWYgKF9vcC5wcmVmaXgpIG9wLnByZWZpeCA9IF9vcC5wcmVmaXg7XG4gICAgaWYgKCd2YWx1ZScgaW4gX29wKSB7XG4gICAgICBvcC52YWx1ZSA9IHNlbGYuZW5jb2RlVmFsdWUoX29wLnZhbHVlLCBvcHRzLCBfb3ApO1xuICAgICAgaWYgKHNlbGYudmFsdWVBc0J1ZmZlcihvcHRzLCBfb3ApKSBvcC52YWx1ZUVuY29kaW5nID0gJ2JpbmFyeSc7XG4gICAgfVxuICAgIHJldHVybiBvcDtcbiAgfSk7XG59O1xuXG52YXIgbHRndEtleXMgPSBbJ2x0JywgJ2d0JywgJ2x0ZScsICdndGUnLCAnc3RhcnQnLCAnZW5kJ107XG5cbkNvZGVjLnByb3RvdHlwZS5lbmNvZGVMdGd0ID0gZnVuY3Rpb24obHRndCl7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHJldCA9IHt9O1xuICBPYmplY3Qua2V5cyhsdGd0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7XG4gICAgcmV0W2tleV0gPSBsdGd0S2V5cy5pbmRleE9mKGtleSkgPiAtMVxuICAgICAgPyBzZWxmLmVuY29kZUtleShsdGd0W2tleV0sIGx0Z3QpXG4gICAgICA6IGx0Z3Rba2V5XVxuICB9KTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbkNvZGVjLnByb3RvdHlwZS5jcmVhdGVTdHJlYW1EZWNvZGVyID0gZnVuY3Rpb24ob3B0cyl7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBpZiAob3B0cy5rZXlzICYmIG9wdHMudmFsdWVzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBzZWxmLmRlY29kZUtleShrZXksIG9wdHMpLFxuICAgICAgICB2YWx1ZTogc2VsZi5kZWNvZGVWYWx1ZSh2YWx1ZSwgb3B0cylcbiAgICAgIH07XG4gICAgfTtcbiAgfSBlbHNlIGlmIChvcHRzLmtleXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gc2VsZi5kZWNvZGVLZXkoa2V5LCBvcHRzKTtcbiAgICB9OyBcbiAgfSBlbHNlIGlmIChvcHRzLnZhbHVlcykge1xuICAgIHJldHVybiBmdW5jdGlvbihfLCB2YWx1ZSl7XG4gICAgICByZXR1cm4gc2VsZi5kZWNvZGVWYWx1ZSh2YWx1ZSwgb3B0cyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbigpe307XG4gIH1cbn07XG5cbkNvZGVjLnByb3RvdHlwZS5rZXlBc0J1ZmZlciA9IGZ1bmN0aW9uKG9wdHMpe1xuICByZXR1cm4gdGhpcy5fa2V5RW5jb2Rpbmcob3B0cykuYnVmZmVyO1xufTtcblxuQ29kZWMucHJvdG90eXBlLnZhbHVlQXNCdWZmZXIgPSBmdW5jdGlvbihvcHRzKXtcbiAgcmV0dXJuIHRoaXMuX3ZhbHVlRW5jb2Rpbmcob3B0cykuYnVmZmVyO1xufTtcblxuIiwiXG5leHBvcnRzLnV0ZjggPSBleHBvcnRzWyd1dGYtOCddID0ge1xuICBlbmNvZGU6IGZ1bmN0aW9uKGRhdGEpe1xuICAgIHJldHVybiBpc0JpbmFyeShkYXRhKVxuICAgICAgPyBkYXRhXG4gICAgICA6IFN0cmluZyhkYXRhKTtcbiAgfSxcbiAgZGVjb2RlOiBpZGVudGl0eSxcbiAgYnVmZmVyOiBmYWxzZSxcbiAgdHlwZTogJ3V0ZjgnXG59O1xuXG5leHBvcnRzLmpzb24gPSB7XG4gIGVuY29kZTogSlNPTi5zdHJpbmdpZnksXG4gIGRlY29kZTogSlNPTi5wYXJzZSxcbiAgYnVmZmVyOiBmYWxzZSxcbiAgdHlwZTogJ2pzb24nXG59O1xuXG5leHBvcnRzLmJpbmFyeSA9IHtcbiAgZW5jb2RlOiBmdW5jdGlvbihkYXRhKXtcbiAgICByZXR1cm4gaXNCaW5hcnkoZGF0YSlcbiAgICAgID8gZGF0YVxuICAgICAgOiBuZXcgQnVmZmVyKGRhdGEpOyAgICAgIFxuICB9LFxuICBkZWNvZGU6IGlkZW50aXR5LFxuICBidWZmZXI6IHRydWUsXG4gIHR5cGU6ICdiaW5hcnknXG59O1xuXG5leHBvcnRzLmlkID0ge1xuICBlbmNvZGU6IGZ1bmN0aW9uKGRhdGEpe1xuICAgIHJldHVybiBkYXRhO1xuICB9LFxuICBkZWNvZGU6IGZ1bmN0aW9uKGRhdGEpe1xuICAgIHJldHVybiBkYXRhO1xuICB9LFxuICBidWZmZXI6IGZhbHNlLFxuICB0eXBlOiAnaWQnXG59O1xuXG52YXIgYnVmZmVyRW5jb2RpbmdzID0gW1xuICAnaGV4JyxcbiAgJ2FzY2lpJyxcbiAgJ2Jhc2U2NCcsXG4gICd1Y3MyJyxcbiAgJ3Vjcy0yJyxcbiAgJ3V0ZjE2bGUnLFxuICAndXRmLTE2bGUnXG5dO1xuXG5idWZmZXJFbmNvZGluZ3MuZm9yRWFjaChmdW5jdGlvbih0eXBlKXtcbiAgZXhwb3J0c1t0eXBlXSA9IHtcbiAgICBlbmNvZGU6IGZ1bmN0aW9uKGRhdGEpe1xuICAgICAgcmV0dXJuIGlzQmluYXJ5KGRhdGEpXG4gICAgICAgID8gZGF0YVxuICAgICAgICA6IG5ldyBCdWZmZXIoZGF0YSwgdHlwZSk7XG4gICAgfSxcbiAgICBkZWNvZGU6IGZ1bmN0aW9uKGJ1ZmZlcil7XG4gICAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKHR5cGUpO1xuICAgIH0sXG4gICAgYnVmZmVyOiB0cnVlLFxuICAgIHR5cGU6IHR5cGVcbiAgfTtcbn0pO1xuXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSl7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gaXNCaW5hcnkoZGF0YSl7XG4gIHJldHVybiBkYXRhID09PSB1bmRlZmluZWRcbiAgICB8fCBkYXRhID09PSBudWxsXG4gICAgfHwgQnVmZmVyLmlzQnVmZmVyKGRhdGEpO1xufVxuXG4iLCJ2YXIgbXV0ZXhpZnkgPSByZXF1aXJlKCdtdXRleGlmeScpXG5cbnZhciBlbnVtZXJhdG9yID0gZnVuY3Rpb24gKGRiLCBvcHRzKSB7XG4gIGlmICghb3B0cykgb3B0cyA9IHt9XG5cbiAgdmFyIHNlcCA9IG9wdHMuc2VwIHx8ICchJ1xuICB2YXIgcHJlZml4ID0gb3B0cy5wcmVmaXggPyBzZXAgKyBvcHRzLnByZWZpeCArIHNlcCA6ICcnXG4gIHZhciBrZXlQcmVmaXggPSBwcmVmaXggKyBzZXBcblxuICB2YXIgY291bnQgPSAwXG4gIHZhciBsb2NrID0gbXV0ZXhpZnkoKVxuXG4gIHZhciBnZXRDb3VudCA9IGZ1bmN0aW9uIChjYikge1xuICAgIGlmIChjb3VudCkgcmV0dXJuIGNiKG51bGwsIGNvdW50KVxuICAgIGRiLmdldChrZXlQcmVmaXgsIHt2YWx1ZUVuY29kaW5nOiAndXRmLTgnfSwgZnVuY3Rpb24gKGVyciwgY250KSB7XG4gICAgICBpZiAoZXJyICYmICFlcnIubm90Rm91bmQpIHJldHVybiBjYihlcnIpXG4gICAgICBjb3VudCA9IE51bWJlcihjbnQgfHwgMClcbiAgICAgIGNiKG51bGwsIGNvdW50KVxuICAgIH0pXG4gIH1cblxuICB2YXIgaW5zZXJ0ID0gZnVuY3Rpb24gKHByZXZDb3VudCwga2V5LCBjYikge1xuICAgIGxvY2soZnVuY3Rpb24gKHJlbGVhc2UpIHtcbiAgICAgIHZhciBpbmMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZ2V0Q291bnQoZnVuY3Rpb24oZXJyLCBjbnQpIHtcbiAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVsZWFzZShjYiwgZXJyKVxuXG4gICAgICAgICAgdmFyIGJhdGNoID0gW3tcbiAgICAgICAgICAgIHR5cGU6ICdwdXQnLFxuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICB2YWx1ZUVuY29kaW5nOiAndXRmLTgnLFxuICAgICAgICAgICAgdmFsdWU6IGNvdW50LnRvU3RyaW5nKClcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICB0eXBlOiAncHV0JyxcbiAgICAgICAgICAgIGtleToga2V5UHJlZml4LFxuICAgICAgICAgICAgdmFsdWVFbmNvZGluZzogJ3V0Zi04JyxcbiAgICAgICAgICAgIHZhbHVlOiAoY291bnQgKyAxKS50b1N0cmluZygpXG4gICAgICAgICAgfV1cblxuICAgICAgICAgIGRiLmJhdGNoKGJhdGNoLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVsZWFzZShjYiwgZXJyKVxuICAgICAgICAgICAgY291bnQrK1xuICAgICAgICAgICAgcmVsZWFzZShjYiwgbnVsbCwgY291bnQgLSAxKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2Q291bnQgPT09IGNvdW50KSByZXR1cm4gaW5jKClcblxuICAgICAgZGIuZ2V0KGtleSwge3ZhbHVlRW5jb2Rpbmc6ICd1dGYtOCd9LCBmdW5jdGlvbiAoZXJyLCBudW0pIHtcbiAgICAgICAgaWYgKGVyciAmJiAhZXJyLm5vdEZvdW5kKSByZXR1cm4gcmVsZWFzZShjYiwgZXJyKVxuICAgICAgICBpZiAobnVtKSByZXR1cm4gcmVsZWFzZShjYiwgbnVsbCwgTnVtYmVyKG51bSkpXG4gICAgICAgIGluYygpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgY2IpIHtcbiAgICBpZiAoIWtleSkgdGhyb3cgbmV3IEVycm9yKCdrZXkgaXMgcmVxdWlyZWQnKVxuXG4gICAga2V5ID0ga2V5UHJlZml4ICsga2V5XG5cbiAgICBkYi5nZXQoa2V5LCB7dmFsdWVFbmNvZGluZzogJ3V0Zi04J30sIGZ1bmN0aW9uIChlcnIsIG51bSkge1xuICAgICAgaWYgKGVyciAmJiAhZXJyLm5vdEZvdW5kKSByZXR1cm4gY2IoZXJyKVxuICAgICAgaWYgKG51bSkgcmV0dXJuIGNiKG51bGwsIE51bWJlcihudW0pKVxuICAgICAgaW5zZXJ0KGNvdW50LCBrZXksIGNiKVxuICAgIH0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlbnVtZXJhdG9yXG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNSBMZXZlbFVQIGNvbnRyaWJ1dG9yc1xuICogU2VlIGxpc3QgYXQgPGh0dHBzOi8vZ2l0aHViLmNvbS9ydmFnZy9ub2RlLWxldmVsdXAjY29udHJpYnV0aW5nPlxuICogTUlUIExpY2Vuc2VcbiAqIDxodHRwczovL2dpdGh1Yi5jb20vcnZhZ2cvbm9kZS1sZXZlbHVwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQ+XG4gKi9cblxudmFyIGNyZWF0ZUVycm9yICAgPSByZXF1aXJlKCdlcnJubycpLmNyZWF0ZVxuICAsIExldmVsVVBFcnJvciAgPSBjcmVhdGVFcnJvcignTGV2ZWxVUEVycm9yJylcbiAgLCBOb3RGb3VuZEVycm9yID0gY3JlYXRlRXJyb3IoJ05vdEZvdW5kRXJyb3InLCBMZXZlbFVQRXJyb3IpXG5cbk5vdEZvdW5kRXJyb3IucHJvdG90eXBlLm5vdEZvdW5kID0gdHJ1ZVxuTm90Rm91bmRFcnJvci5wcm90b3R5cGUuc3RhdHVzICAgPSA0MDRcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTGV2ZWxVUEVycm9yICAgICAgICA6IExldmVsVVBFcnJvclxuICAsIEluaXRpYWxpemF0aW9uRXJyb3IgOiBjcmVhdGVFcnJvcignSW5pdGlhbGl6YXRpb25FcnJvcicsIExldmVsVVBFcnJvcilcbiAgLCBPcGVuRXJyb3IgICAgICAgICAgIDogY3JlYXRlRXJyb3IoJ09wZW5FcnJvcicsIExldmVsVVBFcnJvcilcbiAgLCBSZWFkRXJyb3IgICAgICAgICAgIDogY3JlYXRlRXJyb3IoJ1JlYWRFcnJvcicsIExldmVsVVBFcnJvcilcbiAgLCBXcml0ZUVycm9yICAgICAgICAgIDogY3JlYXRlRXJyb3IoJ1dyaXRlRXJyb3InLCBMZXZlbFVQRXJyb3IpXG4gICwgTm90Rm91bmRFcnJvciAgICAgICA6IE5vdEZvdW5kRXJyb3JcbiAgLCBFbmNvZGluZ0Vycm9yICAgICAgIDogY3JlYXRlRXJyb3IoJ0VuY29kaW5nRXJyb3InLCBMZXZlbFVQRXJyb3IpXG59XG4iLCJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xudmFyIFJlYWRhYmxlID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuUmVhZGFibGU7XG52YXIgZXh0ZW5kID0gcmVxdWlyZSgneHRlbmQnKTtcbnZhciBFbmNvZGluZ0Vycm9yID0gcmVxdWlyZSgnbGV2ZWwtZXJyb3JzJykuRW5jb2RpbmdFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFkU3RyZWFtO1xuaW5oZXJpdHMoUmVhZFN0cmVhbSwgUmVhZGFibGUpO1xuXG5mdW5jdGlvbiBSZWFkU3RyZWFtKGl0ZXJhdG9yLCBvcHRpb25zKXtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRTdHJlYW0pKSByZXR1cm4gbmV3IFJlYWRTdHJlYW0oaXRlcmF0b3IsIG9wdGlvbnMpO1xuICBSZWFkYWJsZS5jYWxsKHRoaXMsIGV4dGVuZChvcHRpb25zLCB7XG4gICAgb2JqZWN0TW9kZTogdHJ1ZVxuICB9KSk7XG4gIHRoaXMuX2l0ZXJhdG9yID0gaXRlcmF0b3I7XG4gIHRoaXMuX2Rlc3Ryb3llZCA9IGZhbHNlO1xuICB0aGlzLl9kZWNvZGVyID0gbnVsbDtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWNvZGVyKSB0aGlzLl9kZWNvZGVyID0gb3B0aW9ucy5kZWNvZGVyO1xuICB0aGlzLm9uKCdlbmQnLCB0aGlzLl9jbGVhbnVwLmJpbmQodGhpcykpO1xufVxuXG5SZWFkU3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uKCl7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgaWYgKHRoaXMuX2Rlc3Ryb3llZCkgcmV0dXJuO1xuXG4gIHRoaXMuX2l0ZXJhdG9yLm5leHQoZnVuY3Rpb24oZXJyLCBrZXksIHZhbHVlKXtcbiAgICBpZiAoc2VsZi5fZGVzdHJveWVkKSByZXR1cm47XG4gICAgaWYgKGVycikgcmV0dXJuIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZWxmLnB1c2gobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghc2VsZi5fZGVjb2RlcikgcmV0dXJuIHNlbGYucHVzaCh7IGtleToga2V5LCB2YWx1ZTogdmFsdWUgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHNlbGYuX2RlY29kZXIoa2V5LCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFbmNvZGluZ0Vycm9yKGVycikpO1xuICAgICAgICBzZWxmLnB1c2gobnVsbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlbGYucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9KTtcbn07XG5cblJlYWRTdHJlYW0ucHJvdG90eXBlLmRlc3Ryb3kgPVxuUmVhZFN0cmVhbS5wcm90b3R5cGUuX2NsZWFudXAgPSBmdW5jdGlvbigpe1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmICh0aGlzLl9kZXN0cm95ZWQpIHJldHVybjtcbiAgdGhpcy5fZGVzdHJveWVkID0gdHJ1ZTtcblxuICB0aGlzLl9pdGVyYXRvci5lbmQoZnVuY3Rpb24oZXJyKXtcbiAgICBpZiAoZXJyKSByZXR1cm4gc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgc2VsZi5lbWl0KCdjbG9zZScpO1xuICB9KTtcbn07XG5cbiIsInZhciBsZXhpbnQgPSByZXF1aXJlKCdsZXhpY29ncmFwaGljLWludGVnZXInKVxudmFyIGNvbGxlY3QgPSByZXF1aXJlKCdzdHJlYW0tY29sbGVjdG9yJylcbnZhciB0aHJvdWdoID0gcmVxdWlyZSgndGhyb3VnaDInKVxudmFyIGZyb20gPSByZXF1aXJlKCdmcm9tMicpXG52YXIgcHVtcCA9IHJlcXVpcmUoJ3B1bXAnKVxuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHt9XG5cbnZhciBMb2dzID0gZnVuY3Rpb24gKGRiLCBvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBMb2dzKSkgcmV0dXJuIG5ldyBMb2dzKGRiLCBvcHRzKVxuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuXG4gIHRoaXMuZGIgPSBkYlxuICB0aGlzLnNlcCA9IG9wdHMuc2VwYXJhdG9yIHx8IG9wdHMuc2VwIHx8ICchJ1xuICB0aGlzLnByZWZpeCA9IG9wdHMucHJlZml4ID8gdGhpcy5zZXAgKyBvcHRzLnByZWZpeCArIHRoaXMuc2VwIDogJydcbiAgdGhpcy52YWx1ZUVuY29kaW5nID0gb3B0cy52YWx1ZUVuY29kaW5nXG59XG5cbkxvZ3MucHJvdG90eXBlLmtleSA9IGZ1bmN0aW9uIChsb2csIHNlcSkge1xuICByZXR1cm4gdGhpcy5wcmVmaXggKyBsb2cgKyB0aGlzLnNlcCArIChzZXEgPT09IC0xID8gJ1xceGZmJyA6IGxleGludC5wYWNrKHNlcSwgJ2hleCcpKVxufVxuXG5Mb2dzLnByb3RvdHlwZS5saXN0ID0gZnVuY3Rpb24gKGNiKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIHZhciBwcmV2ID0gdGhpcy5wcmVmaXhcbiAgdmFyIHJzID0gZnJvbS5vYmooZnVuY3Rpb24gKHNpemUsIGNiKSB7XG4gICAgY29sbGVjdChzZWxmLmRiLmNyZWF0ZUtleVN0cmVhbSh7Z3Q6IHByZXYsIGxpbWl0OiAxfSksIGZ1bmN0aW9uIChlcnIsIGtleXMpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBpZiAoIWtleXMubGVuZ3RoKSByZXR1cm4gY2IobnVsbCwgbnVsbClcbiAgICAgIHZhciBsb2cgPSBrZXlzWzBdLnNsaWNlKDAsIGtleXNbMF0ubGFzdEluZGV4T2Yoc2VsZi5zZXApKVxuICAgICAgcHJldiA9IHNlbGYua2V5KGxvZywgLTEpXG4gICAgICBjYihudWxsLCBsb2cpXG4gICAgfSlcbiAgfSlcblxuICByZXR1cm4gY29sbGVjdChycywgY2IpXG59XG5cbkxvZ3MucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChsb2csIHNlcSwgY2IpIHtcbiAgdGhpcy5kYi5nZXQodGhpcy5rZXkobG9nLCBzZXEpLCB7dmFsdWVFbmNvZGluZzogdGhpcy52YWx1ZUVuY29kaW5nfSwgY2IpXG59XG5cbkxvZ3MucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChsb2csIHNlcSwgdmFsdWUsIGNiKSB7XG4gIHRoaXMuZGIucHV0KHRoaXMua2V5KGxvZywgc2VxKSwgdmFsdWUsIHt2YWx1ZUVuY29kaW5nOiB0aGlzLnZhbHVlRW5jb2Rpbmd9LCBjYilcbn1cblxuTG9ncy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKGxvZywgdmFsdWUsIGNiKSB7XG4gIGlmICghY2IpIGNiID0gbm9vcFxuICB2YXIgc2VsZiA9IHRoaXNcblxuICB0aGlzLmhlYWQobG9nLCBmdW5jdGlvbiAoZXJyLCBzZXEpIHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHNlbGYucHV0KGxvZywgc2VxICsgMSwgdmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBjYihudWxsLCBzZXEgKyAxKVxuICAgIH0pXG4gIH0pXG59XG5cbkxvZ3MucHJvdG90eXBlLmhlYWQgPSBmdW5jdGlvbiAobG9nLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXNcblxuICB2YXIga2V5cyA9IHRoaXMuZGIuY3JlYXRlS2V5U3RyZWFtKHtcbiAgICBndDogdGhpcy5rZXkobG9nLCAwKSxcbiAgICBsdDogdGhpcy5rZXkobG9nLCAtMSksXG4gICAgcmV2ZXJzZTogdHJ1ZSxcbiAgICBsaW1pdDogMVxuICB9KVxuXG4gIGNvbGxlY3Qoa2V5cywgZnVuY3Rpb24gKGVyciwgaGVhZCkge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY2IobnVsbCwgaGVhZC5sZW5ndGggPyBsZXhpbnQudW5wYWNrKGhlYWRbMF0uc2xpY2UoaGVhZFswXS5sYXN0SW5kZXhPZihzZWxmLnNlcCkgKyAxKSwgJ2hleCcpIDogMClcbiAgfSlcbn1cblxuTG9ncy5wcm90b3R5cGUuY3JlYXRlVmFsdWVTdHJlYW0gPSBmdW5jdGlvbiAobG9nLCBvcHRzKSB7XG4gIGlmICghb3B0cykgb3B0cyA9IHt9XG4gIHJldHVybiB0aGlzLmRiLmNyZWF0ZVZhbHVlU3RyZWFtKHtcbiAgICBndDogdGhpcy5rZXkobG9nLCBvcHRzLnNpbmNlIHx8IDApLFxuICAgIGx0OiB0aGlzLmtleShsb2csIG9wdHMudW50aWwgfHwgLTEpLFxuICAgIHZhbHVlRW5jb2Rpbmc6IHRoaXMudmFsdWVFbmNvZGluZyxcbiAgICByZXZlcnNlOiBvcHRzLnJldmVyc2VcbiAgfSlcbn1cblxuTG9ncy5wcm90b3R5cGUuY3JlYXRlUmVhZFN0cmVhbSA9IGZ1bmN0aW9uIChsb2csIG9wdHMpIHtcbiAgaWYgKCFvcHRzKSBvcHRzID0ge31cblxuICB2YXIgc2VsZiA9IHRoaXNcblxuICB2YXIgcnMgPSB0aGlzLmRiLmNyZWF0ZVJlYWRTdHJlYW0oe1xuICAgIGd0OiB0aGlzLmtleShsb2csIG9wdHMuc2luY2UgfHwgMCksXG4gICAgbHQ6IHRoaXMua2V5KGxvZywgb3B0cy51bnRpbCB8fCAtMSksXG4gICAgdmFsdWVFbmNvZGluZzogdGhpcy52YWx1ZUVuY29kaW5nLFxuICAgIHJldmVyc2U6IG9wdHMucmV2ZXJzZVxuICB9KVxuXG4gIHZhciBmb3JtYXQgPSB0aHJvdWdoLm9iaihmdW5jdGlvbiAoZGF0YSwgZW5jLCBjYikge1xuICAgIHZhciBrZXkgPSBkYXRhLmtleVxuICAgIHZhciBsb2cgPSBrZXkuc2xpY2UoMCwga2V5Lmxhc3RJbmRleE9mKHNlbGYuc2VwKSlcbiAgICB2YXIgc2VxID0gbGV4aW50LnVucGFjayhrZXkuc2xpY2UobG9nLmxlbmd0aCArIDEpLCAnaGV4JylcbiAgICBjYihudWxsLCB7bG9nOiBsb2csIHNlcTogc2VxLCB2YWx1ZTogZGF0YS52YWx1ZX0pXG4gIH0pXG5cbiAgcmV0dXJuIHB1bXAocnMsIGZvcm1hdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBMb2dzXG4iLCJ2YXIgUmVhZGFibGUgPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5SZWFkYWJsZVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZyb20yXG5cbmZyb20yLmN0b3IgPSBjdG9yXG5mcm9tMi5vYmogPSBvYmpcblxudmFyIFByb3RvID0gY3RvcigpXG5cbmZ1bmN0aW9uIHRvRnVuY3Rpb24obGlzdCkge1xuICBsaXN0ID0gbGlzdC5zbGljZSgpXG4gIHJldHVybiBmdW5jdGlvbiAoXywgY2IpIHtcbiAgICBjYihudWxsLCBsaXN0Lmxlbmd0aCA/IGxpc3Quc2hpZnQoKSA6IG51bGwpXG4gIH1cbn1cblxuZnVuY3Rpb24gZnJvbTIob3B0cywgcmVhZCkge1xuICBpZiAodHlwZW9mIG9wdHMgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkob3B0cykpIHtcbiAgICByZWFkID0gb3B0c1xuICAgIG9wdHMgPSB7fVxuICB9XG4gIFxuICBpZiAoQXJyYXkuaXNBcnJheShyZWFkKSkgcmVhZCA9IHRvRnVuY3Rpb24ocmVhZClcblxuICB2YXIgcnMgPSBuZXcgUHJvdG8ob3B0cylcbiAgcnMuX2Zyb20gPSByZWFkXG4gIHJldHVybiByc1xufVxuXG5mdW5jdGlvbiBjdG9yKG9wdHMsIHJlYWQpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVhZCA9IG9wdHNcbiAgICBvcHRzID0ge31cbiAgfVxuXG4gIG9wdHMgPSBkZWZhdWx0cyhvcHRzKVxuXG4gIGluaGVyaXRzKENsYXNzLCBSZWFkYWJsZSlcbiAgZnVuY3Rpb24gQ2xhc3Mob3ZlcnJpZGUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2xhc3MpKSByZXR1cm4gbmV3IENsYXNzKG92ZXJyaWRlKVxuICAgIHRoaXMuX3JlYWRpbmcgPSBmYWxzZVxuICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2VcbiAgICBSZWFkYWJsZS5jYWxsKHRoaXMsIG92ZXJyaWRlIHx8IG9wdHMpXG4gIH1cblxuICBDbGFzcy5wcm90b3R5cGUuX2Zyb20gPSByZWFkXG4gIENsYXNzLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uKHNpemUpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXNcblxuICAgIGlmICh0aGlzLl9yZWFkaW5nIHx8IHRoaXMuZGVzdHJveWVkKSByZXR1cm5cbiAgICB0aGlzLl9yZWFkaW5nID0gdHJ1ZVxuICAgIHRoaXMuX2Zyb20oc2l6ZSwgY2hlY2spXG4gICAgZnVuY3Rpb24gY2hlY2soZXJyLCBkYXRhKSB7XG4gICAgICBpZiAoc2VsZi5kZXN0cm95ZWQpIHJldHVyblxuICAgICAgaWYgKGVycikgcmV0dXJuIHNlbGYuZGVzdHJveShlcnIpXG4gICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHNlbGYucHVzaChudWxsKVxuICAgICAgc2VsZi5fcmVhZGluZyA9IGZhbHNlXG4gICAgICBpZiAoc2VsZi5wdXNoKGRhdGEpKSBzZWxmLl9yZWFkKClcbiAgICB9XG4gIH1cblxuICBDbGFzcy5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKGVycikge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlXG5cbiAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKGVycikgc2VsZi5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIHNlbGYuZW1pdCgnY2xvc2UnKVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gQ2xhc3Ncbn1cblxuZnVuY3Rpb24gb2JqKG9wdHMsIHJlYWQpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nIHx8IEFycmF5LmlzQXJyYXkob3B0cykpIHtcbiAgICByZWFkID0gb3B0c1xuICAgIG9wdHMgPSB7fVxuICB9XG5cbiAgb3B0cyA9IGRlZmF1bHRzKG9wdHMpXG4gIG9wdHMub2JqZWN0TW9kZSA9IHRydWVcbiAgb3B0cy5oaWdoV2F0ZXJNYXJrID0gMTZcblxuICByZXR1cm4gZnJvbTIob3B0cywgcmVhZClcbn1cblxuZnVuY3Rpb24gZGVmYXVsdHMob3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fVxuICByZXR1cm4gb3B0c1xufVxuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTUgTGV2ZWxVUCBjb250cmlidXRvcnNcbiAqIFNlZSBsaXN0IGF0IDxodHRwczovL2dpdGh1Yi5jb20vbGV2ZWwvbGV2ZWx1cCNjb250cmlidXRpbmc+XG4gKiBNSVQgTGljZW5zZVxuICogPGh0dHBzOi8vZ2l0aHViLmNvbS9sZXZlbC9sZXZlbHVwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQ+XG4gKi9cblxudmFyIHV0aWwgICAgICAgICAgPSByZXF1aXJlKCcuL3V0aWwnKVxuICAsIFdyaXRlRXJyb3IgICAgPSByZXF1aXJlKCdsZXZlbC1lcnJvcnMnKS5Xcml0ZUVycm9yXG5cbiAgLCBnZXRPcHRpb25zICAgID0gdXRpbC5nZXRPcHRpb25zXG4gICwgZGlzcGF0Y2hFcnJvciA9IHV0aWwuZGlzcGF0Y2hFcnJvclxuXG5mdW5jdGlvbiBCYXRjaCAobGV2ZWx1cCwgY29kZWMpIHtcbiAgdGhpcy5fbGV2ZWx1cCA9IGxldmVsdXBcbiAgdGhpcy5fY29kZWMgPSBjb2RlY1xuICB0aGlzLmJhdGNoID0gbGV2ZWx1cC5kYi5iYXRjaCgpXG4gIHRoaXMub3BzID0gW11cbiAgdGhpcy5sZW5ndGggPSAwXG59XG5cbkJhdGNoLnByb3RvdHlwZS5wdXQgPSBmdW5jdGlvbiAoa2V5XywgdmFsdWVfLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbnMpXG5cbiAgdmFyIGtleSAgID0gdGhpcy5fY29kZWMuZW5jb2RlS2V5KGtleV8sIG9wdGlvbnMpXG4gICAgLCB2YWx1ZSA9IHRoaXMuX2NvZGVjLmVuY29kZVZhbHVlKHZhbHVlXywgb3B0aW9ucylcblxuICB0cnkge1xuICAgIHRoaXMuYmF0Y2gucHV0KGtleSwgdmFsdWUpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgV3JpdGVFcnJvcihlKVxuICB9XG4gIHRoaXMub3BzLnB1c2goeyB0eXBlIDogJ3B1dCcsIGtleSA6IGtleSwgdmFsdWUgOiB2YWx1ZSB9KVxuICB0aGlzLmxlbmd0aCsrXG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuQmF0Y2gucHJvdG90eXBlLmRlbCA9IGZ1bmN0aW9uIChrZXlfLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbnMpXG5cbiAgdmFyIGtleSA9IHRoaXMuX2NvZGVjLmVuY29kZUtleShrZXlfLCBvcHRpb25zKVxuXG4gIHRyeSB7XG4gICAgdGhpcy5iYXRjaC5kZWwoa2V5KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgV3JpdGVFcnJvcihlcnIpXG4gIH1cbiAgdGhpcy5vcHMucHVzaCh7IHR5cGUgOiAnZGVsJywga2V5IDoga2V5IH0pXG4gIHRoaXMubGVuZ3RoKytcblxuICByZXR1cm4gdGhpc1xufVxuXG5CYXRjaC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgdGhpcy5iYXRjaC5jbGVhcigpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBXcml0ZUVycm9yKGVycilcbiAgfVxuXG4gIHRoaXMub3BzID0gW11cbiAgdGhpcy5sZW5ndGggPSAwXG4gIHJldHVybiB0aGlzXG59XG5cbkJhdGNoLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB2YXIgbGV2ZWx1cCA9IHRoaXMuX2xldmVsdXBcbiAgICAsIG9wcyAgICAgPSB0aGlzLm9wc1xuXG4gIHRyeSB7XG4gICAgdGhpcy5iYXRjaC53cml0ZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hFcnJvcihsZXZlbHVwLCBuZXcgV3JpdGVFcnJvcihlcnIpLCBjYWxsYmFjaylcbiAgICAgIGxldmVsdXAuZW1pdCgnYmF0Y2gnLCBvcHMpXG4gICAgICBpZiAoY2FsbGJhY2spXG4gICAgICAgIGNhbGxiYWNrKClcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgV3JpdGVFcnJvcihlcnIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYXRjaFxuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTUgTGV2ZWxVUCBjb250cmlidXRvcnNcbiAqIFNlZSBsaXN0IGF0IDxodHRwczovL2dpdGh1Yi5jb20vbGV2ZWwvbGV2ZWx1cCNjb250cmlidXRpbmc+XG4gKiBNSVQgTGljZW5zZVxuICogPGh0dHBzOi8vZ2l0aHViLmNvbS9sZXZlbC9sZXZlbHVwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQ+XG4gKi9cblxudmFyIEV2ZW50RW1pdHRlciAgICAgICAgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXJcbiAgLCBpbmhlcml0cyAgICAgICAgICAgID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzXG4gICwgZGVwcmVjYXRlICAgICAgICAgICA9IHJlcXVpcmUoJ3V0aWwnKS5kZXByZWNhdGVcbiAgLCBleHRlbmQgICAgICAgICAgICAgID0gcmVxdWlyZSgneHRlbmQnKVxuICAsIHByciAgICAgICAgICAgICAgICAgPSByZXF1aXJlKCdwcnInKVxuICAsIERlZmVycmVkTGV2ZWxET1dOICAgPSByZXF1aXJlKCdkZWZlcnJlZC1sZXZlbGRvd24nKVxuICAsIEl0ZXJhdG9yU3RyZWFtICAgICAgPSByZXF1aXJlKCdsZXZlbC1pdGVyYXRvci1zdHJlYW0nKVxuXG4gICwgZXJyb3JzICAgICAgICAgICAgICA9IHJlcXVpcmUoJ2xldmVsLWVycm9ycycpXG4gICwgV3JpdGVFcnJvciAgICAgICAgICA9IGVycm9ycy5Xcml0ZUVycm9yXG4gICwgUmVhZEVycm9yICAgICAgICAgICA9IGVycm9ycy5SZWFkRXJyb3JcbiAgLCBOb3RGb3VuZEVycm9yICAgICAgID0gZXJyb3JzLk5vdEZvdW5kRXJyb3JcbiAgLCBPcGVuRXJyb3IgICAgICAgICAgID0gZXJyb3JzLk9wZW5FcnJvclxuICAsIEVuY29kaW5nRXJyb3IgICAgICAgPSBlcnJvcnMuRW5jb2RpbmdFcnJvclxuICAsIEluaXRpYWxpemF0aW9uRXJyb3IgPSBlcnJvcnMuSW5pdGlhbGl6YXRpb25FcnJvclxuXG4gICwgdXRpbCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vdXRpbCcpXG4gICwgQmF0Y2ggICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vYmF0Y2gnKVxuICAsIENvZGVjICAgICAgICAgICAgICAgPSByZXF1aXJlKCdsZXZlbC1jb2RlYycpXG5cbiAgLCBnZXRPcHRpb25zICAgICAgICAgID0gdXRpbC5nZXRPcHRpb25zXG4gICwgZGVmYXVsdE9wdGlvbnMgICAgICA9IHV0aWwuZGVmYXVsdE9wdGlvbnNcbiAgLCBnZXRMZXZlbERPV04gICAgICAgID0gdXRpbC5nZXRMZXZlbERPV05cbiAgLCBkaXNwYXRjaEVycm9yICAgICAgID0gdXRpbC5kaXNwYXRjaEVycm9yXG4gICwgaXNEZWZpbmVkICAgICAgICAgICA9IHV0aWwuaXNEZWZpbmVkXG5cbmZ1bmN0aW9uIGdldENhbGxiYWNrIChvcHRpb25zLCBjYWxsYmFjaykge1xuICByZXR1cm4gdHlwZW9mIG9wdGlvbnMgPT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMgOiBjYWxsYmFja1xufVxuXG4vLyBQb3NzaWJsZSBMZXZlbFVQI19zdGF0dXMgdmFsdWVzOlxuLy8gIC0gJ25ldycgICAgIC0gbmV3bHkgY3JlYXRlZCwgbm90IG9wZW5lZCBvciBjbG9zZWRcbi8vICAtICdvcGVuaW5nJyAtIHdhaXRpbmcgZm9yIHRoZSBkYXRhYmFzZSB0byBiZSBvcGVuZWQsIHBvc3Qgb3BlbigpXG4vLyAgLSAnb3BlbicgICAgLSBzdWNjZXNzZnVsbHkgb3BlbmVkIHRoZSBkYXRhYmFzZSwgYXZhaWxhYmxlIGZvciB1c2Vcbi8vICAtICdjbG9zaW5nJyAtIHdhaXRpbmcgZm9yIHRoZSBkYXRhYmFzZSB0byBiZSBjbG9zZWQsIHBvc3QgY2xvc2UoKVxuLy8gIC0gJ2Nsb3NlZCcgIC0gZGF0YWJhc2UgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNsb3NlZCwgc2hvdWxkIG5vdCBiZVxuLy8gICAgICAgICAgICAgICAgIHVzZWQgZXhjZXB0IGZvciBhbm90aGVyIG9wZW4oKSBvcGVyYXRpb25cblxuZnVuY3Rpb24gTGV2ZWxVUCAobG9jYXRpb24sIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBMZXZlbFVQKSlcbiAgICByZXR1cm4gbmV3IExldmVsVVAobG9jYXRpb24sIG9wdGlvbnMsIGNhbGxiYWNrKVxuXG4gIHZhciBlcnJvclxuXG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpXG4gIHRoaXMuc2V0TWF4TGlzdGVuZXJzKEluZmluaXR5KVxuXG4gIGlmICh0eXBlb2YgbG9jYXRpb24gPT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PSAnb2JqZWN0JyA/IG9wdGlvbnMgOiB7fVxuICAgIG9wdGlvbnMuZGIgPSBsb2NhdGlvblxuICAgIGxvY2F0aW9uID0gbnVsbFxuICB9IGVsc2UgaWYgKHR5cGVvZiBsb2NhdGlvbiA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgbG9jYXRpb24uZGIgPT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdGlvbnMgPSBsb2NhdGlvblxuICAgIGxvY2F0aW9uID0gbnVsbFxuICB9XG5cblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgID0ge31cbiAgfVxuXG4gIGlmICgoIW9wdGlvbnMgfHwgdHlwZW9mIG9wdGlvbnMuZGIgIT0gJ2Z1bmN0aW9uJykgJiYgdHlwZW9mIGxvY2F0aW9uICE9ICdzdHJpbmcnKSB7XG4gICAgZXJyb3IgPSBuZXcgSW5pdGlhbGl6YXRpb25FcnJvcihcbiAgICAgICAgJ011c3QgcHJvdmlkZSBhIGxvY2F0aW9uIGZvciB0aGUgZGF0YWJhc2UnKVxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWxsYmFjayhlcnJvcilcbiAgICAgIH0pXG4gICAgfVxuICAgIHRocm93IGVycm9yXG4gIH1cblxuICBvcHRpb25zICAgICAgPSBnZXRPcHRpb25zKG9wdGlvbnMpXG4gIHRoaXMub3B0aW9ucyA9IGV4dGVuZChkZWZhdWx0T3B0aW9ucywgb3B0aW9ucylcbiAgdGhpcy5fY29kZWMgPSBuZXcgQ29kZWModGhpcy5vcHRpb25zKVxuICB0aGlzLl9zdGF0dXMgPSAnbmV3J1xuICAvLyBzZXQgdGhpcy5sb2NhdGlvbiBhcyBlbnVtZXJhYmxlIGJ1dCBub3QgY29uZmlndXJhYmxlIG9yIHdyaXRhYmxlXG4gIHBycih0aGlzLCAnbG9jYXRpb24nLCBsb2NhdGlvbiwgJ2UnKVxuXG4gIHRoaXMub3BlbihjYWxsYmFjaylcbn1cblxuaW5oZXJpdHMoTGV2ZWxVUCwgRXZlbnRFbWl0dGVyKVxuXG5MZXZlbFVQLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICAgICwgZGJGYWN0b3J5XG4gICAgLCBkYlxuXG4gIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgaWYgKGNhbGxiYWNrKVxuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7IGNhbGxiYWNrKG51bGwsIHNlbGYpIH0pXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGlmICh0aGlzLl9pc09wZW5pbmcoKSkge1xuICAgIHJldHVybiBjYWxsYmFjayAmJiB0aGlzLm9uY2UoXG4gICAgICAgICdvcGVuJ1xuICAgICAgLCBmdW5jdGlvbiAoKSB7IGNhbGxiYWNrKG51bGwsIHNlbGYpIH1cbiAgICApXG4gIH1cblxuICB0aGlzLmVtaXQoJ29wZW5pbmcnKVxuXG4gIHRoaXMuX3N0YXR1cyA9ICdvcGVuaW5nJ1xuICB0aGlzLmRiICAgICAgPSBuZXcgRGVmZXJyZWRMZXZlbERPV04odGhpcy5sb2NhdGlvbilcbiAgZGJGYWN0b3J5ICAgID0gdGhpcy5vcHRpb25zLmRiIHx8IGdldExldmVsRE9XTigpXG4gIGRiICAgICAgICAgICA9IGRiRmFjdG9yeSh0aGlzLmxvY2F0aW9uKVxuXG4gIGRiLm9wZW4odGhpcy5vcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgcmV0dXJuIGRpc3BhdGNoRXJyb3Ioc2VsZiwgbmV3IE9wZW5FcnJvcihlcnIpLCBjYWxsYmFjaylcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5kYi5zZXREYihkYilcbiAgICAgIHNlbGYuZGIgPSBkYlxuICAgICAgc2VsZi5fc3RhdHVzID0gJ29wZW4nXG4gICAgICBpZiAoY2FsbGJhY2spXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHNlbGYpXG4gICAgICBzZWxmLmVtaXQoJ29wZW4nKVxuICAgICAgc2VsZi5lbWl0KCdyZWFkeScpXG4gICAgfVxuICB9KVxufVxuXG5MZXZlbFVQLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB2YXIgc2VsZiA9IHRoaXNcblxuICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgIHRoaXMuX3N0YXR1cyA9ICdjbG9zaW5nJ1xuICAgIHRoaXMuZGIuY2xvc2UoZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fc3RhdHVzID0gJ2Nsb3NlZCdcbiAgICAgIHNlbGYuZW1pdCgnY2xvc2VkJylcbiAgICAgIGlmIChjYWxsYmFjaylcbiAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKVxuICAgIH0pXG4gICAgdGhpcy5lbWl0KCdjbG9zaW5nJylcbiAgICB0aGlzLmRiID0gbmV3IERlZmVycmVkTGV2ZWxET1dOKHRoaXMubG9jYXRpb24pXG4gIH0gZWxzZSBpZiAodGhpcy5fc3RhdHVzID09ICdjbG9zZWQnICYmIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2spXG4gIH0gZWxzZSBpZiAodGhpcy5fc3RhdHVzID09ICdjbG9zaW5nJyAmJiBjYWxsYmFjaykge1xuICAgIHRoaXMub25jZSgnY2xvc2VkJywgY2FsbGJhY2spXG4gIH0gZWxzZSBpZiAodGhpcy5faXNPcGVuaW5nKCkpIHtcbiAgICB0aGlzLm9uY2UoJ29wZW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLmNsb3NlKGNhbGxiYWNrKVxuICAgIH0pXG4gIH1cbn1cblxuTGV2ZWxVUC5wcm90b3R5cGUuaXNPcGVuID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fc3RhdHVzID09ICdvcGVuJ1xufVxuXG5MZXZlbFVQLnByb3RvdHlwZS5faXNPcGVuaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fc3RhdHVzID09ICdvcGVuaW5nJ1xufVxuXG5MZXZlbFVQLnByb3RvdHlwZS5pc0Nsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICgvXmNsb3MvKS50ZXN0KHRoaXMuX3N0YXR1cylcbn1cblxuZnVuY3Rpb24gbWF5YmVFcnJvcihkYiwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgaWYgKCFkYi5faXNPcGVuaW5nKCkgJiYgIWRiLmlzT3BlbigpKSB7XG4gICAgZGlzcGF0Y2hFcnJvcihcbiAgICAgICAgZGJcbiAgICAgICwgbmV3IFJlYWRFcnJvcignRGF0YWJhc2UgaXMgbm90IG9wZW4nKVxuICAgICAgLCBjYWxsYmFja1xuICAgIClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlRXJyb3IgKGRiLCBtZXNzYWdlLCBjYWxsYmFjaykge1xuICBkaXNwYXRjaEVycm9yKFxuICAgICAgZGJcbiAgICAgLCBuZXcgV3JpdGVFcnJvcihtZXNzYWdlKVxuICAgICAsIGNhbGxiYWNrXG4gIClcbn1cblxuZnVuY3Rpb24gcmVhZEVycm9yIChkYiwgbWVzc2FnZSwgY2FsbGJhY2spIHtcbiAgZGlzcGF0Y2hFcnJvcihcbiAgICAgIGRiXG4gICAgICwgbmV3IFJlYWRFcnJvcihtZXNzYWdlKVxuICAgICAsIGNhbGxiYWNrXG4gIClcbn1cblxuXG5MZXZlbFVQLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5Xywgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gICAgLCBrZXlcblxuICBjYWxsYmFjayA9IGdldENhbGxiYWNrKG9wdGlvbnMsIGNhbGxiYWNrKVxuXG4gIGlmIChtYXliZUVycm9yKHRoaXMsIG9wdGlvbnMsIGNhbGxiYWNrKSlcbiAgICByZXR1cm5cblxuICBpZiAoa2V5XyA9PT0gbnVsbCB8fCBrZXlfID09PSB1bmRlZmluZWQgfHwgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIGNhbGxiYWNrKVxuICAgIHJldHVybiByZWFkRXJyb3IodGhpc1xuICAgICAgLCAnZ2V0KCkgcmVxdWlyZXMga2V5IGFuZCBjYWxsYmFjayBhcmd1bWVudHMnLCBjYWxsYmFjaylcblxuICBvcHRpb25zID0gdXRpbC5nZXRPcHRpb25zKG9wdGlvbnMpXG4gIGtleSA9IHRoaXMuX2NvZGVjLmVuY29kZUtleShrZXlfLCBvcHRpb25zKVxuXG4gIG9wdGlvbnMuYXNCdWZmZXIgPSB0aGlzLl9jb2RlYy52YWx1ZUFzQnVmZmVyKG9wdGlvbnMpXG5cbiAgdGhpcy5kYi5nZXQoa2V5LCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyLCB2YWx1ZSkge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGlmICgoL25vdGZvdW5kL2kpLnRlc3QoZXJyKSB8fCBlcnIubm90Rm91bmQpIHtcbiAgICAgICAgZXJyID0gbmV3IE5vdEZvdW5kRXJyb3IoXG4gICAgICAgICAgICAnS2V5IG5vdCBmb3VuZCBpbiBkYXRhYmFzZSBbJyArIGtleV8gKyAnXScsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVyciA9IG5ldyBSZWFkRXJyb3IoZXJyKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRpc3BhdGNoRXJyb3Ioc2VsZiwgZXJyLCBjYWxsYmFjaylcbiAgICB9XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWx1ZSA9IHNlbGYuX2NvZGVjLmRlY29kZVZhbHVlKHZhbHVlLCBvcHRpb25zKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVuY29kaW5nRXJyb3IoZSkpXG4gICAgICB9XG4gICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSlcbiAgICB9XG4gIH0pXG59XG5cbkxldmVsVVAucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChrZXlfLCB2YWx1ZV8sIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICAgICwga2V5XG4gICAgLCB2YWx1ZVxuXG4gIGNhbGxiYWNrID0gZ2V0Q2FsbGJhY2sob3B0aW9ucywgY2FsbGJhY2spXG5cbiAgaWYgKGtleV8gPT09IG51bGwgfHwga2V5XyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiB3cml0ZUVycm9yKHRoaXMsICdwdXQoKSByZXF1aXJlcyBhIGtleSBhcmd1bWVudCcsIGNhbGxiYWNrKVxuXG4gIGlmIChtYXliZUVycm9yKHRoaXMsIG9wdGlvbnMsIGNhbGxiYWNrKSlcbiAgICByZXR1cm5cblxuICBvcHRpb25zID0gZ2V0T3B0aW9ucyhvcHRpb25zKVxuICBrZXkgICAgID0gdGhpcy5fY29kZWMuZW5jb2RlS2V5KGtleV8sIG9wdGlvbnMpXG4gIHZhbHVlICAgPSB0aGlzLl9jb2RlYy5lbmNvZGVWYWx1ZSh2YWx1ZV8sIG9wdGlvbnMpXG5cbiAgdGhpcy5kYi5wdXQoa2V5LCB2YWx1ZSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaEVycm9yKHNlbGYsIG5ldyBXcml0ZUVycm9yKGVyciksIGNhbGxiYWNrKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZWxmLmVtaXQoJ3B1dCcsIGtleV8sIHZhbHVlXylcbiAgICAgIGlmIChjYWxsYmFjaylcbiAgICAgICAgY2FsbGJhY2soKVxuICAgIH1cbiAgfSlcbn1cblxuTGV2ZWxVUC5wcm90b3R5cGUuZGVsID0gZnVuY3Rpb24gKGtleV8sIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICAgICwga2V5XG5cbiAgY2FsbGJhY2sgPSBnZXRDYWxsYmFjayhvcHRpb25zLCBjYWxsYmFjaylcblxuICBpZiAoa2V5XyA9PT0gbnVsbCB8fCBrZXlfID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHdyaXRlRXJyb3IodGhpcywgJ2RlbCgpIHJlcXVpcmVzIGEga2V5IGFyZ3VtZW50JywgY2FsbGJhY2spXG5cbiAgaWYgKG1heWJlRXJyb3IodGhpcywgb3B0aW9ucywgY2FsbGJhY2spKVxuICAgIHJldHVyblxuXG4gIG9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbnMpXG4gIGtleSAgICAgPSB0aGlzLl9jb2RlYy5lbmNvZGVLZXkoa2V5Xywgb3B0aW9ucylcblxuICB0aGlzLmRiLmRlbChrZXksIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hFcnJvcihzZWxmLCBuZXcgV3JpdGVFcnJvcihlcnIpLCBjYWxsYmFjaylcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5lbWl0KCdkZWwnLCBrZXlfKVxuICAgICAgaWYgKGNhbGxiYWNrKVxuICAgICAgICBjYWxsYmFjaygpXG4gICAgfVxuICB9KVxufVxuXG5MZXZlbFVQLnByb3RvdHlwZS5iYXRjaCA9IGZ1bmN0aW9uIChhcnJfLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgICAsIGtleUVuY1xuICAgICwgdmFsdWVFbmNcbiAgICAsIGFyclxuXG4gIGlmICghYXJndW1lbnRzLmxlbmd0aClcbiAgICByZXR1cm4gbmV3IEJhdGNoKHRoaXMsIHRoaXMuX2NvZGVjKVxuXG4gIGNhbGxiYWNrID0gZ2V0Q2FsbGJhY2sob3B0aW9ucywgY2FsbGJhY2spXG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycl8pKVxuICAgIHJldHVybiB3cml0ZUVycm9yKHRoaXMsICdiYXRjaCgpIHJlcXVpcmVzIGFuIGFycmF5IGFyZ3VtZW50JywgY2FsbGJhY2spXG5cbiAgaWYgKG1heWJlRXJyb3IodGhpcywgb3B0aW9ucywgY2FsbGJhY2spKVxuICAgIHJldHVyblxuXG4gIG9wdGlvbnMgID0gZ2V0T3B0aW9ucyhvcHRpb25zKVxuICBhcnIgICAgICA9IHNlbGYuX2NvZGVjLmVuY29kZUJhdGNoKGFycl8sIG9wdGlvbnMpXG4gIGFyciAgICAgID0gYXJyLm1hcChmdW5jdGlvbiAob3ApIHtcbiAgICBpZiAoIW9wLnR5cGUgJiYgb3Aua2V5ICE9PSB1bmRlZmluZWQgJiYgb3AudmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgIG9wLnR5cGUgPSAncHV0J1xuICAgIHJldHVybiBvcFxuICB9KVxuXG4gIHRoaXMuZGIuYmF0Y2goYXJyLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgcmV0dXJuIGRpc3BhdGNoRXJyb3Ioc2VsZiwgbmV3IFdyaXRlRXJyb3IoZXJyKSwgY2FsbGJhY2spXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYuZW1pdCgnYmF0Y2gnLCBhcnJfKVxuICAgICAgaWYgKGNhbGxiYWNrKVxuICAgICAgICBjYWxsYmFjaygpXG4gICAgfVxuICB9KVxufVxuXG5MZXZlbFVQLnByb3RvdHlwZS5hcHByb3hpbWF0ZVNpemUgPSBkZXByZWNhdGUoZnVuY3Rpb24gKHN0YXJ0XywgZW5kXywgb3B0aW9ucywgY2FsbGJhY2spIHsgICBcbiAgdmFyIHNlbGYgPSB0aGlzICAgIFxuICAgICwgc3RhcnQgICAgXG4gICAgLCBlbmQgICAgXG4gICBcbiAgY2FsbGJhY2sgPSBnZXRDYWxsYmFjayhvcHRpb25zLCBjYWxsYmFjaykgICAgXG4gICBcbiAgb3B0aW9ucyA9IGdldE9wdGlvbnMob3B0aW9ucykgICAgXG4gICBcbiAgaWYgKHN0YXJ0XyA9PT0gbnVsbCB8fCBzdGFydF8gPT09IHVuZGVmaW5lZCAgICBcbiAgICAgICAgfHwgZW5kXyA9PT0gbnVsbCB8fCBlbmRfID09PSB1bmRlZmluZWQgfHwgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIGNhbGxiYWNrKSAgICBcbiAgICByZXR1cm4gcmVhZEVycm9yKHRoaXMsICdhcHByb3hpbWF0ZVNpemUoKSByZXF1aXJlcyBzdGFydCwgZW5kIGFuZCBjYWxsYmFjayBhcmd1bWVudHMnLCBjYWxsYmFjaykgICBcbiAgIFxuICBzdGFydCA9IHRoaXMuX2NvZGVjLmVuY29kZUtleShzdGFydF8sIG9wdGlvbnMpICAgXG4gIGVuZCAgID0gdGhpcy5fY29kZWMuZW5jb2RlS2V5KGVuZF8sIG9wdGlvbnMpICAgXG4gICBcbiAgdGhpcy5kYi5hcHByb3hpbWF0ZVNpemUoc3RhcnQsIGVuZCwgZnVuY3Rpb24gKGVyciwgc2l6ZSkgeyAgIFxuICAgIGlmIChlcnIpIHsgICBcbiAgICAgIHJldHVybiBkaXNwYXRjaEVycm9yKHNlbGYsIG5ldyBPcGVuRXJyb3IoZXJyKSwgY2FsbGJhY2spICAgXG4gICAgfSBlbHNlIGlmIChjYWxsYmFjaykgeyAgIFxuICAgICAgY2FsbGJhY2sobnVsbCwgc2l6ZSkgICBcbiAgICB9ICAgIFxuICB9KSAgIFxufSwgJ2RiLmFwcHJveGltYXRlU2l6ZSgpIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYi5kYi5hcHByb3hpbWF0ZVNpemUoKSBpbnN0ZWFkJylcblxuTGV2ZWxVUC5wcm90b3R5cGUucmVhZFN0cmVhbSA9XG5MZXZlbFVQLnByb3RvdHlwZS5jcmVhdGVSZWFkU3RyZWFtID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IGV4dGVuZCgge2tleXM6IHRydWUsIHZhbHVlczogdHJ1ZX0sIHRoaXMub3B0aW9ucywgb3B0aW9ucylcblxuICBvcHRpb25zLmtleUVuY29kaW5nICAgPSBvcHRpb25zLmtleUVuY29kaW5nXG4gIG9wdGlvbnMudmFsdWVFbmNvZGluZyA9IG9wdGlvbnMudmFsdWVFbmNvZGluZ1xuXG4gIG9wdGlvbnMgPSB0aGlzLl9jb2RlYy5lbmNvZGVMdGd0KG9wdGlvbnMpO1xuICBvcHRpb25zLmtleUFzQnVmZmVyICAgPSB0aGlzLl9jb2RlYy5rZXlBc0J1ZmZlcihvcHRpb25zKVxuICBvcHRpb25zLnZhbHVlQXNCdWZmZXIgPSB0aGlzLl9jb2RlYy52YWx1ZUFzQnVmZmVyKG9wdGlvbnMpXG5cbiAgaWYgKCdudW1iZXInICE9PSB0eXBlb2Ygb3B0aW9ucy5saW1pdClcbiAgICBvcHRpb25zLmxpbWl0ID0gLTFcblxuICByZXR1cm4gbmV3IEl0ZXJhdG9yU3RyZWFtKHRoaXMuZGIuaXRlcmF0b3Iob3B0aW9ucyksIGV4dGVuZChvcHRpb25zLCB7XG4gICAgZGVjb2RlcjogdGhpcy5fY29kZWMuY3JlYXRlU3RyZWFtRGVjb2RlcihvcHRpb25zKVxuICB9KSlcbn1cblxuTGV2ZWxVUC5wcm90b3R5cGUua2V5U3RyZWFtID1cbkxldmVsVVAucHJvdG90eXBlLmNyZWF0ZUtleVN0cmVhbSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHJldHVybiB0aGlzLmNyZWF0ZVJlYWRTdHJlYW0oZXh0ZW5kKG9wdGlvbnMsIHsga2V5czogdHJ1ZSwgdmFsdWVzOiBmYWxzZSB9KSlcbn1cblxuTGV2ZWxVUC5wcm90b3R5cGUudmFsdWVTdHJlYW0gPVxuTGV2ZWxVUC5wcm90b3R5cGUuY3JlYXRlVmFsdWVTdHJlYW0gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICByZXR1cm4gdGhpcy5jcmVhdGVSZWFkU3RyZWFtKGV4dGVuZChvcHRpb25zLCB7IGtleXM6IGZhbHNlLCB2YWx1ZXM6IHRydWUgfSkpXG59XG5cbkxldmVsVVAucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ0xldmVsVVAnXG59XG5cbmZ1bmN0aW9uIHV0aWxTdGF0aWMgKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChsb2NhdGlvbiwgY2FsbGJhY2spIHtcbiAgICBnZXRMZXZlbERPV04oKVtuYW1lXShsb2NhdGlvbiwgY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge30pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgICAgICAgICA9IExldmVsVVBcbm1vZHVsZS5leHBvcnRzLmVycm9ycyAgPSByZXF1aXJlKCdsZXZlbC1lcnJvcnMnKVxubW9kdWxlLmV4cG9ydHMuZGVzdHJveSA9IGRlcHJlY2F0ZShcbiAgICB1dGlsU3RhdGljKCdkZXN0cm95JylcbiAgLCAnbGV2ZWx1cC5kZXN0cm95KCkgaXMgZGVwcmVjYXRlZC4gVXNlIGxldmVsZG93bi5kZXN0cm95KCkgaW5zdGVhZCdcbilcbm1vZHVsZS5leHBvcnRzLnJlcGFpciAgPSBkZXByZWNhdGUoXG4gICAgdXRpbFN0YXRpYygncmVwYWlyJylcbiAgLCAnbGV2ZWx1cC5yZXBhaXIoKSBpcyBkZXByZWNhdGVkLiBVc2UgbGV2ZWxkb3duLnJlcGFpcigpIGluc3RlYWQnXG4pXG5cbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE1IExldmVsVVAgY29udHJpYnV0b3JzXG4gKiBTZWUgbGlzdCBhdCA8aHR0cHM6Ly9naXRodWIuY29tL2xldmVsL2xldmVsdXAjY29udHJpYnV0aW5nPlxuICogTUlUIExpY2Vuc2VcbiAqIDxodHRwczovL2dpdGh1Yi5jb20vbGV2ZWwvbGV2ZWx1cC9ibG9iL21hc3Rlci9MSUNFTlNFLm1kPlxuICovXG5cbnZhciBleHRlbmQgICAgICAgICA9IHJlcXVpcmUoJ3h0ZW5kJylcbiAgLCBMZXZlbFVQRXJyb3IgICA9IHJlcXVpcmUoJ2xldmVsLWVycm9ycycpLkxldmVsVVBFcnJvclxuICAsIGZvcm1hdCAgICAgICAgID0gcmVxdWlyZSgndXRpbCcpLmZvcm1hdFxuICAsIGRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgICBjcmVhdGVJZk1pc3NpbmcgOiB0cnVlXG4gICAgICAsIGVycm9ySWZFeGlzdHMgICA6IGZhbHNlXG4gICAgICAsIGtleUVuY29kaW5nICAgICA6ICd1dGY4J1xuICAgICAgLCB2YWx1ZUVuY29kaW5nICAgOiAndXRmOCdcbiAgICAgICwgY29tcHJlc3Npb24gICAgIDogdHJ1ZVxuICAgIH1cblxuICAsIGxldmVsZG93blxuXG5mdW5jdGlvbiBnZXRPcHRpb25zIChvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PSAnc3RyaW5nJylcbiAgICBvcHRpb25zID0geyB2YWx1ZUVuY29kaW5nOiBvcHRpb25zIH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9ICdvYmplY3QnKVxuICAgIG9wdGlvbnMgPSB7fVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiBnZXRMZXZlbERPV04gKCkge1xuICBpZiAobGV2ZWxkb3duKVxuICAgIHJldHVybiBsZXZlbGRvd25cblxuICB2YXIgcmVxdWlyZWRWZXJzaW9uICA9IHJlcXVpcmUoJy4uL3BhY2thZ2UuanNvbicpLmRldkRlcGVuZGVuY2llcy5sZXZlbGRvd25cbiAgICAsIGxldmVsZG93blZlcnNpb25cblxuICB0cnkge1xuICAgIGxldmVsZG93blZlcnNpb24gPSByZXF1aXJlKCdsZXZlbGRvd24vcGFja2FnZScpLnZlcnNpb25cbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IHJlcXVpcmVFcnJvcihlKVxuICB9XG5cbiAgaWYgKCFyZXF1aXJlKCdzZW12ZXInKS5zYXRpc2ZpZXMobGV2ZWxkb3duVmVyc2lvbiwgcmVxdWlyZWRWZXJzaW9uKSkge1xuICAgIHRocm93IG5ldyBMZXZlbFVQRXJyb3IoXG4gICAgICAgICdJbnN0YWxsZWQgdmVyc2lvbiBvZiBMZXZlbERPV04gKCdcbiAgICAgICsgbGV2ZWxkb3duVmVyc2lvblxuICAgICAgKyAnKSBkb2VzIG5vdCBtYXRjaCByZXF1aXJlZCB2ZXJzaW9uICgnXG4gICAgICArIHJlcXVpcmVkVmVyc2lvblxuICAgICAgKyAnKSdcbiAgICApXG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBsZXZlbGRvd24gPSByZXF1aXJlKCdsZXZlbGRvd24nKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgcmVxdWlyZUVycm9yKGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVxdWlyZUVycm9yIChlKSB7XG4gIHZhciB0ZW1wbGF0ZSA9ICdGYWlsZWQgdG8gcmVxdWlyZSBMZXZlbERPV04gKCVzKS4gVHJ5IGBucG0gaW5zdGFsbCBsZXZlbGRvd25gIGlmIGl0XFwncyBtaXNzaW5nJ1xuICByZXR1cm4gbmV3IExldmVsVVBFcnJvcihmb3JtYXQodGVtcGxhdGUsIGUubWVzc2FnZSkpXG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXJyb3IgKGRiLCBlcnJvciwgY2FsbGJhY2spIHtcbiAgdHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicgPyBjYWxsYmFjayhlcnJvcikgOiBkYi5lbWl0KCdlcnJvcicsIGVycm9yKVxufVxuXG5mdW5jdGlvbiBpc0RlZmluZWQgKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ICE9PSAndW5kZWZpbmVkJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBkZWZhdWx0T3B0aW9ucyAgOiBkZWZhdWx0T3B0aW9uc1xuICAsIGdldE9wdGlvbnMgICAgICA6IGdldE9wdGlvbnNcbiAgLCBnZXRMZXZlbERPV04gICAgOiBnZXRMZXZlbERPV05cbiAgLCBkaXNwYXRjaEVycm9yICAgOiBkaXNwYXRjaEVycm9yXG4gICwgaXNEZWZpbmVkICAgICAgIDogaXNEZWZpbmVkXG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiX2FyZ3NcIjogW1xuICAgIFtcbiAgICAgIFwibGV2ZWx1cEB+MS4zLjBcIixcbiAgICAgIFwiL2hvbWUvbmVydm91cy91bmlzeW5jL3Byb2plY3RzL211bHRpcGxleGVkL2h5cGVycGxhdGUvbm9kZV9tb2R1bGVzL2xldmVsLXBhY2thZ2VyXCJcbiAgICBdXG4gIF0sXG4gIFwiX2Zyb21cIjogXCJsZXZlbHVwQD49MS4zLjAgPDEuNC4wXCIsXG4gIFwiX2lkXCI6IFwibGV2ZWx1cEAxLjMuMVwiLFxuICBcIl9pbkNhY2hlXCI6IHRydWUsXG4gIFwiX2luc3RhbGxhYmxlXCI6IHRydWUsXG4gIFwiX2xvY2F0aW9uXCI6IFwiL2xldmVsdXBcIixcbiAgXCJfbm9kZVZlcnNpb25cIjogXCI0LjIuMlwiLFxuICBcIl9ucG1Vc2VyXCI6IHtcbiAgICBcImVtYWlsXCI6IFwicmFscGh0aGVuaW5qYUByaXNldXAubmV0XCIsXG4gICAgXCJuYW1lXCI6IFwicmFscGh0aGVuaW5qYVwiXG4gIH0sXG4gIFwiX25wbVZlcnNpb25cIjogXCIzLjUuMFwiLFxuICBcIl9waGFudG9tQ2hpbGRyZW5cIjoge30sXG4gIFwiX3JlcXVlc3RlZFwiOiB7XG4gICAgXCJuYW1lXCI6IFwibGV2ZWx1cFwiLFxuICAgIFwicmF3XCI6IFwibGV2ZWx1cEB+MS4zLjBcIixcbiAgICBcInJhd1NwZWNcIjogXCJ+MS4zLjBcIixcbiAgICBcInNjb3BlXCI6IG51bGwsXG4gICAgXCJzcGVjXCI6IFwiPj0xLjMuMCA8MS40LjBcIixcbiAgICBcInR5cGVcIjogXCJyYW5nZVwiXG4gIH0sXG4gIFwiX3JlcXVpcmVkQnlcIjogW1xuICAgIFwiL2xldmVsLXBhY2thZ2VyXCIsXG4gICAgXCIvbWVtZGJcIlxuICBdLFxuICBcIl9yZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xldmVsdXAvLS9sZXZlbHVwLTEuMy4xLnRnelwiLFxuICBcIl9zaGFzdW1cIjogXCI4MDMwNzU4YmIxYjFkYWZkYjcxYmZiNTVmZmYwY2FhMjc0MGNiODQ2XCIsXG4gIFwiX3Nocmlua3dyYXBcIjogbnVsbCxcbiAgXCJfc3BlY1wiOiBcImxldmVsdXBAfjEuMy4wXCIsXG4gIFwiX3doZXJlXCI6IFwiL2hvbWUvbmVydm91cy91bmlzeW5jL3Byb2plY3RzL211bHRpcGxleGVkL2h5cGVycGxhdGUvbm9kZV9tb2R1bGVzL2xldmVsLXBhY2thZ2VyXCIsXG4gIFwiYnJvd3NlclwiOiB7XG4gICAgXCJsZXZlbGRvd25cIjogZmFsc2UsXG4gICAgXCJsZXZlbGRvd24vcGFja2FnZVwiOiBmYWxzZSxcbiAgICBcInNlbXZlclwiOiBmYWxzZVxuICB9LFxuICBcImJ1Z3NcIjoge1xuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2xldmVsL2xldmVsdXAvaXNzdWVzXCJcbiAgfSxcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcIkp1bGlhbiBHcnViZXJcIixcbiAgICAgIFwiZW1haWxcIjogXCJqdWxpYW5AanVsaWFuZ3J1YmVyLmNvbVwiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vanVsaWFuZ3J1YmVyXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcIlJvZCBWYWdnXCIsXG4gICAgICBcImVtYWlsXCI6IFwickB2YS5nZ1wiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcnZhZ2dcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiSmFrZSBWZXJiYXRlblwiLFxuICAgICAgXCJlbWFpbFwiOiBcInJheW5vczJAZ21haWwuY29tXCIsXG4gICAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXlub3NcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiRG9taW5pYyBUYXJyXCIsXG4gICAgICBcImVtYWlsXCI6IFwiZG9taW5pYy50YXJyQGdtYWlsLmNvbVwiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vZG9taW5pY3RhcnJcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiTWF4IE9nZGVuXCIsXG4gICAgICBcImVtYWlsXCI6IFwibWF4QG1heG9nZGVuLmNvbVwiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vbWF4b2dkZW5cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiTGFycy1NYWdudXMgU2tvZ1wiLFxuICAgICAgXCJlbWFpbFwiOiBcInJhbHBodGhlbmluamFAcmlzZXVwLm5ldFwiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcmFscGh0aGVuaW5qYVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJEYXZpZCBCasO2cmtsdW5kXCIsXG4gICAgICBcImVtYWlsXCI6IFwiZGF2aWQuYmpvcmtsdW5kQGdtYWlsLmNvbVwiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20va2VzbGFcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiSm9obiBDaGVzbGV5XCIsXG4gICAgICBcImVtYWlsXCI6IFwiam9obkBjaGVzbC5lc1wiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vY2hlc2xlcy9cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiUGFvbG8gRnJhZ29tZW5pXCIsXG4gICAgICBcImVtYWlsXCI6IFwicGFvbG9AYXN5bmMubHlcIixcbiAgICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2hpajFueFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJBbnRvbiBXaGFsbGV5XCIsXG4gICAgICBcImVtYWlsXCI6IFwiYW50b24ud2hhbGxleUBuZWFyZm9ybS5jb21cIixcbiAgICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL05vOVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJNYXR0ZW8gQ29sbGluYVwiLFxuICAgICAgXCJlbWFpbFwiOiBcIm1hdHRlby5jb2xsaW5hQGdtYWlsLmNvbVwiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vbWNvbGxpbmFcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiUGVkcm8gVGVpeGVpcmFcIixcbiAgICAgIFwiZW1haWxcIjogXCJwZWRyby50ZWl4ZWlyYUBnbWFpbC5jb21cIixcbiAgICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BndGVcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiSmFtZXMgSGFsbGlkYXlcIixcbiAgICAgIFwiZW1haWxcIjogXCJtYWlsQHN1YnN0YWNrLm5ldFwiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2tcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiSmFycmV0dCBDcnVnZXJcIixcbiAgICAgIFwiZW1haWxcIjogXCJqY3J1Z3p6QGdtYWlsLmNvbVwiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vamNydWd6elwiXG4gICAgfVxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJkZWZlcnJlZC1sZXZlbGRvd25cIjogXCJ+MS4yLjFcIixcbiAgICBcImxldmVsLWNvZGVjXCI6IFwifjYuMS4wXCIsXG4gICAgXCJsZXZlbC1lcnJvcnNcIjogXCJ+MS4wLjNcIixcbiAgICBcImxldmVsLWl0ZXJhdG9yLXN0cmVhbVwiOiBcIn4xLjMuMFwiLFxuICAgIFwicHJyXCI6IFwifjEuMC4xXCIsXG4gICAgXCJzZW12ZXJcIjogXCJ+NS4xLjBcIixcbiAgICBcInh0ZW5kXCI6IFwifjQuMC4wXCJcbiAgfSxcbiAgXCJkZXNjcmlwdGlvblwiOiBcIkZhc3QgJiBzaW1wbGUgc3RvcmFnZSAtIGEgTm9kZS5qcy1zdHlsZSBMZXZlbERCIHdyYXBwZXJcIixcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJ+MS41LjBcIixcbiAgICBcImJ1c3Rlcm1vdmVcIjogXCJ+MS4wLjBcIixcbiAgICBcImRlbGF5ZWRcIjogXCJ+MS4wLjFcIixcbiAgICBcImZhdWNldFwiOiBcIn4wLjAuMVwiLFxuICAgIFwibGV2ZWxkb3duXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJtZW1kb3duXCI6IFwifjEuMS4wXCIsXG4gICAgXCJtc2dwYWNrLWpzXCI6IFwifjAuMy4wXCIsXG4gICAgXCJyZWZlcmVlXCI6IFwifjEuMi4wXCIsXG4gICAgXCJyaW1yYWZcIjogXCJ+Mi40LjNcIixcbiAgICBcInNsb3ctc3RyZWFtXCI6IFwiMC4wLjRcIixcbiAgICBcInRhcFwiOiBcIn4yLjMuMVwiLFxuICAgIFwidGFwZVwiOiBcIn40LjIuMVwiXG4gIH0sXG4gIFwiZGlyZWN0b3JpZXNcIjoge30sXG4gIFwiZGlzdFwiOiB7XG4gICAgXCJzaGFzdW1cIjogXCI4MDMwNzU4YmIxYjFkYWZkYjcxYmZiNTVmZmYwY2FhMjc0MGNiODQ2XCIsXG4gICAgXCJ0YXJiYWxsXCI6IFwiaHR0cDovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sZXZlbHVwLy0vbGV2ZWx1cC0xLjMuMS50Z3pcIlxuICB9LFxuICBcImdpdEhlYWRcIjogXCI0MGJkNjY4NzI5NzQxNDBjNzlhNzRkOTQxMWI5OTJkZGZmYTkyNmE0XCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwczovL2dpdGh1Yi5jb20vbGV2ZWwvbGV2ZWx1cFwiLFxuICBcImtleXdvcmRzXCI6IFtcbiAgICBcImRhdGFiYXNlXCIsXG4gICAgXCJkYlwiLFxuICAgIFwianNvblwiLFxuICAgIFwibGV2ZWxkYlwiLFxuICAgIFwic3RvcmFnZVwiLFxuICAgIFwic3RvcmVcIixcbiAgICBcInN0cmVhbVwiXG4gIF0sXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcIm1haW5cIjogXCJsaWIvbGV2ZWx1cC5qc1wiLFxuICBcIm1haW50YWluZXJzXCI6IFtcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJydmFnZ1wiLFxuICAgICAgXCJlbWFpbFwiOiBcInJvZEB2YWdnLm9yZ1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJyYWxwaHRoZW5pbmphXCIsXG4gICAgICBcImVtYWlsXCI6IFwicmFscGh0aGVuaW5qYUByaXNldXAubmV0XCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcImp1bGlhbmdydWJlclwiLFxuICAgICAgXCJlbWFpbFwiOiBcImp1bGlhbkBqdWxpYW5ncnViZXIuY29tXCJcbiAgICB9XG4gIF0sXG4gIFwibmFtZVwiOiBcImxldmVsdXBcIixcbiAgXCJvcHRpb25hbERlcGVuZGVuY2llc1wiOiB7fSxcbiAgXCJyZWFkbWVcIjogXCJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL2xldmVsL2xldmVsdXAuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInRlc3RcIjogXCJ0YXBlIHRlc3QvKi10ZXN0LmpzIHwgZmF1Y2V0XCJcbiAgfSxcbiAgXCJ2ZXJzaW9uXCI6IFwiMS4zLjFcIlxufVxuIiwiZXhwb3J0cy5wYWNrID0gcGFjaztcbmV4cG9ydHMudW5wYWNrID0gdW5wYWNrO1xuXG5mdW5jdGlvbiBwYWNrIChuLCBlbmMpIHtcbiAgICBuID0gTWF0aC5mbG9vcihuKTtcbiAgICBpZiAobiA8IDAgfHwgbiA9PT0gSW5maW5pdHkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgXG4gICAgdmFyIGJ5dGVzO1xuICAgIHZhciBtYXggPSAyNTE7XG4gICAgdmFyIHggPSBuIC0gbWF4O1xuICAgIFxuICAgIGlmIChuIDwgbWF4KSB7XG4gICAgICAgIGJ5dGVzID0gWyBuIF07XG4gICAgfVxuICAgIGVsc2UgaWYgKHggPCAyNTYpIHtcbiAgICAgICAgYnl0ZXMgPSBbIG1heCwgeCBdO1xuICAgIH1cbiAgICBlbHNlIGlmICh4IDwgMjU2KjI1Nikge1xuICAgICAgICBieXRlcyA9IFsgbWF4ICsgMSwgTWF0aC5mbG9vcih4IC8gMjU2KSwgeCAlIDI1NiBdO1xuICAgIH1cbiAgICBlbHNlIGlmICh4IDwgMjU2KjI1NioyNTYpIHtcbiAgICAgICAgYnl0ZXMgPSBbXG4gICAgICAgICAgICBtYXggKyAyLFxuICAgICAgICAgICAgTWF0aC5mbG9vcih4IC8gMjU2IC8gMjU2KSxcbiAgICAgICAgICAgIE1hdGguZmxvb3IoeCAvIDI1NikgJSAyNTYsXG4gICAgICAgICAgICB4ICUgMjU2XG4gICAgICAgIF07XG4gICAgfVxuICAgIGVsc2UgaWYgKHggPCAyNTYqMjU2KjI1NioyNTYpIHtcbiAgICAgICAgYnl0ZXMgPSBbXG4gICAgICAgICAgICBtYXggKyAzLFxuICAgICAgICAgICAgTWF0aC5mbG9vcih4IC8gMjU2IC8gMjU2IC8gMjU2KSxcbiAgICAgICAgICAgIE1hdGguZmxvb3IoeCAvIDI1NiAvIDI1NikgJSAyNTYsXG4gICAgICAgICAgICBNYXRoLmZsb29yKHggLyAyNTYpICUgMjU2LFxuICAgICAgICAgICAgeCAlIDI1NlxuICAgICAgICBdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIGV4cCA9IE1hdGguZmxvb3IoTWF0aC5sb2coeCkgLyBNYXRoLmxvZygyKSkgLSAzMjtcbiAgICAgICAgYnl0ZXMgPSBbIDI1NSBdO1xuICAgICAgICBieXRlcy5wdXNoLmFwcGx5KGJ5dGVzLCBwYWNrKGV4cCkpO1xuICAgICAgICB2YXIgcmVzID0geCAvIE1hdGgucG93KDIsIGV4cCAtIDExKTtcbiAgICAgICAgYnl0ZXMucHVzaC5hcHBseShieXRlcywgYnl0ZXNPZih4IC8gTWF0aC5wb3coMiwgZXhwIC0gMTEpKSk7XG4gICAgfVxuICAgIGlmIChlbmMgPT09IHVuZGVmaW5lZCB8fCBlbmMgPT09ICdhcnJheScpIHJldHVybiBieXRlcztcbiAgICBpZiAoZW5jID09PSAnaGV4JykgcmV0dXJuIGVuY29kZUhleChieXRlcyk7XG59O1xuXG5mdW5jdGlvbiB1bnBhY2sgKHhzKSB7XG4gICAgaWYgKHR5cGVvZiB4cyA9PT0gJ3N0cmluZycpIHhzID0gZGVjb2RlSGV4KHhzKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoeHMpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIFxuICAgIGlmICh4cy5sZW5ndGggPT09IDEgJiYgeHNbMF0gPCAyNTEpIHtcbiAgICAgICAgcmV0dXJuIHhzWzBdO1xuICAgIH1cbiAgICBpZiAoeHMubGVuZ3RoID09PSAyICYmIHhzWzBdID09PSAyNTEpIHtcbiAgICAgICAgcmV0dXJuIDI1MSArIHhzWzFdO1xuICAgIH1cbiAgICBpZiAoeHMubGVuZ3RoID09PSAzICYmIHhzWzBdID09PSAyNTIpIHtcbiAgICAgICAgcmV0dXJuIDI1MSArIDI1NiAqIHhzWzFdICsgeHNbMl07XG4gICAgfVxuICAgIGlmICh4cy5sZW5ndGggPT09IDQgJiYgeHNbMF0gPT09IDI1Mykge1xuICAgICAgICByZXR1cm4gMjUxICsgMjU2ICogMjU2ICogeHNbMV0gKyAyNTYgKiB4c1syXSArIHhzWzNdO1xuICAgIH1cbiAgICBpZiAoeHMubGVuZ3RoID09PSA1ICYmIHhzWzBdID09PSAyNTQpIHtcbiAgICAgICAgcmV0dXJuIDI1MSArIDI1NiAqIDI1NiAqIDI1NiAqIHhzWzFdXG4gICAgICAgICAgICArIDI1NiAqIDI1NiAqIHhzWzJdICsgMjU2ICogeHNbM10gKyB4c1s0XVxuICAgICAgICA7XG4gICAgfVxuICAgIGlmICh4cy5sZW5ndGggPiA1ICYmIHhzWzBdID09PSAyNTUpIHtcbiAgICAgICAgdmFyIG0gPSAwLCB4ID0gMTtcbiAgICAgICAgdmFyIHBpdm90ID0gTWF0aC5tYXgoMiwgeHMubGVuZ3RoIC0gNik7XG4gICAgICAgIGZvciAodmFyIGkgPSB4cy5sZW5ndGggLSAxOyBpID49IHBpdm90OyBpLS0pIHtcbiAgICAgICAgICAgIG0gKz0geCAqIHhzW2ldO1xuICAgICAgICAgICAgeCAqPSAyNTY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHhzWzFdICsgMzIgPCAyNTEpIHtcbiAgICAgICAgICAgIHZhciBuID0gdW5wYWNrKFsgeHNbMV0gKyAzMiBdKSAtIDExO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHhzWzBdID09PSAyNTUgJiYgeHNbMV0gPCAyNTEpIHtcbiAgICAgICAgICAgIHZhciBuID0geHNbMV0gKyAyMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwaXZvdCA9PT0gMykge1xuICAgICAgICAgICAgdmFyIG4gPSB1bnBhY2soWyB4c1sxXSwgeHNbMl0gKyAyMSBdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwaXZvdCA9PT0gNCkge1xuICAgICAgICAgICAgdmFyIG4gPSB1bnBhY2soWyB4c1sxXSwgeHNbMl0sIHhzWzNdICsgMjEgXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDI1MSArIG0gLyBNYXRoLnBvdygyLCAzMiAtIG4pO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBlbmNvZGVIZXgoYnl0ZXMpIHtcbiAgICB2YXIgcyA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYnl0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBiID0gYnl0ZXNbaV07XG4gICAgICAgIHZhciBjID0gYi50b1N0cmluZygxNik7XG4gICAgICAgIGlmIChiIDwgMTYpIGMgPSAnMCcgKyBjO1xuICAgICAgICBzICs9IGM7XG4gICAgfVxuICAgIHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVIZXgoaGV4KSB7XG4gICAgdmFyIGJ5dGVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZXgubGVuZ3RoOyBpID0gaSsyKSB7XG4gICAgICAgIGJ5dGVzLnB1c2gocGFyc2VJbnQoaGV4W2ldICsgaGV4W2krMV0sIDE2KSk7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbn1cblxuZnVuY3Rpb24gYnl0ZXNPZiAoeCkge1xuICAgIHggPSBNYXRoLmZsb29yKHgpO1xuICAgIHZhciBieXRlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBkID0gMTsgaSA8IDY7IGkrKywgZCAqPSAyNTYpIHtcbiAgICAgICAgYnl0ZXMudW5zaGlmdChNYXRoLmZsb29yKHggLyBkKSAlIDI1Nik7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbn1cbiIsIihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHByb2Nlc3Muc3Rkb3V0ID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0cHJvY2Vzcy5zdGRlcnIgPSBwcm9jZXNzLnN0ZG91dCA9IHsgd3JpdGU6IGZ1bmN0aW9uKCkgeyB9IH07XG5cdH1cblx0aWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0ZGVmaW5lKFtcImV4cG9ydHNcIiwgXCJsaWJzb2RpdW1cIl0sIGZhY3RvcnkpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0ZmFjdG9yeShleHBvcnRzLCByZXF1aXJlKFwibGlic29kaXVtXCIpKTtcblx0fSBlbHNlIHtcblx0XHR2YXIgY2IgPSByb290LnNvZGl1bSAmJiByb290LnNvZGl1bS5vbmxvYWQ7XG5cdFx0ZmFjdG9yeSgocm9vdC5zb2RpdW0gPSB7fSksIHJvb3QubGlic29kaXVtKTtcblx0XHRpZiAodHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdGNiKHJvb3Quc29kaXVtKTtcblx0XHR9XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKGV4cG9ydHMsIGxpYnNvZGl1bSkge1xuXHRcInVzZSBzdHJpY3RcIjtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuXHR2YXIgb3V0cHV0X2Zvcm1hdCA9IFwidWludDhhcnJheVwiO1xuXG5cdGxpYnNvZGl1bS5fc29kaXVtX2luaXQoKTtcblxuXHQvLyBMaXN0IG9mIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzIGRlZmluZWQgaW4gdGhlIHdyYXBwZWQgbGlic29kaXVtXG5cdGZ1bmN0aW9uIHN5bWJvbHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKGV4cG9ydHMpLnNvcnQoKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGluY3JlbWVudChieXRlcykge1xuXHRcdGlmICghIGJ5dGVzIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcIk9ubHkgVWludDhBcnJheSBpbnN0YW5jZXMgY2FuIGJlIGluY3JlbWVudGVkXCIpO1xuXHRcdH1cbiAgICAgICAgdmFyIGMgPSAxIDw8IDg7XG5cdFx0Zm9yICh2YXIgaSA9IDAgfCAwLCBqID0gYnl0ZXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgICBjID4+PSA4O1xuICAgICAgICAgICAgYyArPSBieXRlc1tpXTtcblx0XHRcdGJ5dGVzW2ldID0gYyAmIDB4ZmY7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gbWVtemVybyhieXRlcykge1xuXHRcdGlmICghIGJ5dGVzIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcIk9ubHkgVWludDhBcnJheSBpbnN0YW5jZXMgY2FuIGJlIHdpcGVkXCIpO1xuXHRcdH1cblx0XHRmb3IgKHZhciBpID0gMCB8IDAsIGogPSBieXRlcy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdGJ5dGVzW2ldID0gMDtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBtZW1jbXAoYjEsIGIyKSB7XG5cdFx0aWYgKCEoYjEgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIGIyIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJPbmx5IFVpbnQ4QXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBjb21wYXJlZFwiKTtcblx0XHR9XG5cdFx0aWYgKGIxLmxlbmd0aCAhPT0gYjIubGVuZ3RoKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiT25seSBpbnN0YW5jZXMgb2YgaWRlbnRpY2FsIGxlbmd0aCBjYW4gYmUgY29tcGFyZWRcIik7XG5cdFx0fVxuXHRcdGZvciAodmFyIGQgPSAwIHwgMCwgaSA9IDAgfCAwLCBqID0gYjEubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRkIHw9IGIxW2ldIF4gYjJbaV07XG5cdFx0fVxuXHRcdHJldHVybiBkID09PSAwO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29tcGFyZShiMSwgYjIpIHtcblx0XHRpZiAoIShiMSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgJiYgYjIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcIk9ubHkgVWludDhBcnJheSBpbnN0YW5jZXMgY2FuIGJlIGNvbXBhcmVkXCIpO1xuXHRcdH1cblx0XHRpZiAoYjEubGVuZ3RoICE9PSBiMi5sZW5ndGgpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJPbmx5IGluc3RhbmNlcyBvZiBpZGVudGljYWwgbGVuZ3RoIGNhbiBiZSBjb21wYXJlZFwiKTtcblx0XHR9XG5cdFx0Zm9yICh2YXIgZ3QgPSAwIHwgMCwgZXEgPSAxIHwgMSwgaSA9IGIxLmxlbmd0aDsgaS0tID4gMDspIHtcblx0XHRcdGd0IHw9ICgoYjJbaV0gLSBiMVtpXSkgPj4gOCkgJiBlcTtcblx0XHRcdGVxICY9ICgoYjJbaV0gXiBiMVtpXSkgLSAxKSA+PiA4O1xuXHRcdH1cblx0XHRyZXR1cm4gKGd0ICsgZ3QgKyBlcSkgLSAxO1xuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8gQ29kZWNzXG5cblx0ZnVuY3Rpb24gZnJvbV9zdHJpbmcoc3RyKSB7XG5cdFx0aWYgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFRleHRFbmNvZGVyKFwidXRmLThcIikuZW5jb2RlKHN0cik7XG5cdFx0fVxuXHRcdHN0ciA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTtcblx0XHR2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShzdHIubGVuZ3RoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuXHRcdFx0Ynl0ZXNbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJ5dGVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gdG9fc3RyaW5nKGJ5dGVzKSB7XG5cdFx0aWYgKHR5cGVvZiBUZXh0RGVjb2RlciA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFRleHREZWNvZGVyKFwidXRmLThcIiwge2ZhdGFsOiB0cnVlfSkuZGVjb2RlKGJ5dGVzKTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBieXRlcykpKTtcblx0XHR9XG5cdFx0Y2F0Y2ggKF8pIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgZW5jb2RlZCBkYXRhIHdhcyBub3QgdmFsaWQuXCIpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGZyb21faGV4KHN0cikge1xuXHRcdGlmICghaXNfaGV4KHN0cikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgcHJvdmlkZWQgc3RyaW5nIGRvZXNuJ3QgbG9vayBsaWtlIGhleCBkYXRhXCIpO1xuXHRcdHZhciByZXN1bHQgPSBuZXcgVWludDhBcnJheShzdHIubGVuZ3RoIC8gMik7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpICs9IDIpIHtcblx0XHRcdHJlc3VsdFtpID4+PiAxXSA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSwgMiksIDE2KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZ1bmN0aW9uIHRvX2hleChieXRlcykge1xuXHRcdHZhciBzdHIgPSBcIlwiLCBiLCBjLCB4O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGMgPSBieXRlc1tpXSAmIDB4Zjtcblx0XHRcdGIgPSBieXRlc1tpXSA+Pj4gNDtcblx0XHRcdHggPSAoODcgKyBjICsgKCgoYyAtIDEwKSA+PiA4KSAmIH4zOCkpIDw8IDggfFxuXHRcdFx0ICAgICg4NyArIGIgKyAoKChiIC0gMTApID4+IDgpICYgfjM4KSk7XG5cdFx0XHRzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh4ICYgMHhmZikgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHggPj4+IDgpO1xuXHRcdH1cblx0XHRyZXR1cm4gc3RyO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNfaGV4KHN0cikge1xuXHRcdHJldHVybiAodHlwZW9mIHN0ciA9PT0gXCJzdHJpbmdcIiAmJiAvXlswLTlhLWZdKyQvaS50ZXN0KHN0cikgJiYgc3RyLmxlbmd0aCAlIDIgPT09IDApO1xuXHR9XG5cblx0ZnVuY3Rpb24gZnJvbV9iYXNlNjQoc0Jhc2U2NCwgbkJsb2Nrc1NpemUpIHtcblx0XHRmdW5jdGlvbiBfYjY0VG9VaW50NihuQ2hyKSB7XG5cdFx0XHRyZXR1cm4gbkNociA+IDY0ICYmIG5DaHIgPCA5MSA/XG5cdFx0XHRcdG5DaHIgLSA2NSA6IG5DaHIgPiA5NiAmJiBuQ2hyIDwgMTIzID9cblx0XHRcdFx0bkNociAtIDcxIDogbkNociA+IDQ3ICYmIG5DaHIgPCA1OCA/XG5cdFx0XHRcdG5DaHIgKyA0IDogbkNociA9PT0gNDMgP1xuXHRcdFx0XHQ2MiA6IG5DaHIgPT09IDQ3ID9cblx0XHRcdFx0NjMgOlxuXHRcdFx0XHQwO1xuXHRcdH1cblx0XHR2YXJcblx0XHRcdHNCNjRFbmMgPSBzQmFzZTY0LnJlcGxhY2UoL1teQS1aYS16MC05XFwrXFwvXS9nLCBcIlwiKSxcblx0XHRcdG5JbkxlbiA9IHNCNjRFbmMubGVuZ3RoLFxuXHRcdFx0bk91dExlbiA9IG5CbG9ja3NTaXplID8gTWF0aC5jZWlsKChuSW5MZW4gKiAzICsgMSA+PiAyKSAvIG5CbG9ja3NTaXplKSAqIG5CbG9ja3NTaXplIDogbkluTGVuICogMyArIDEgPj4gMixcblx0XHRcdHRhQnl0ZXMgPSBuZXcgVWludDhBcnJheShuT3V0TGVuKTtcblx0XHRmb3IgKHZhciBuTW9kMywgbk1vZDQsIG5VaW50MjQgPSAwLCBuT3V0SWR4ID0gMCwgbkluSWR4ID0gMDsgbkluSWR4IDwgbkluTGVuOyBuSW5JZHgrKykge1xuXHRcdFx0bk1vZDQgPSBuSW5JZHggJiAzO1xuXHRcdFx0blVpbnQyNCB8PSBfYjY0VG9VaW50NihzQjY0RW5jLmNoYXJDb2RlQXQobkluSWR4KSkgPDwgMTggLSA2ICogbk1vZDQ7XG5cdFx0XHRpZiAobk1vZDQgPT09IDMgfHwgbkluTGVuIC0gbkluSWR4ID09PSAxKSB7XG5cdFx0XHRcdGZvciAobk1vZDMgPSAwOyBuTW9kMyA8IDMgJiYgbk91dElkeCA8IG5PdXRMZW47IG5Nb2QzKyssIG5PdXRJZHgrKykge1xuXHRcdFx0XHRcdHRhQnl0ZXNbbk91dElkeF0gPSBuVWludDI0ID4+PiAoMTYgPj4+IG5Nb2QzICYgMjQpICYgMjU1O1xuXHRcdFx0XHR9XG5cdFx0XHRcdG5VaW50MjQgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGFCeXRlcztcblx0fVxuXG5cdGZ1bmN0aW9uIHRvX2Jhc2U2NChhQnl0ZXMsIG5vTmV3TGluZSkge1xuXHRcdGZ1bmN0aW9uIF91aW50NlRvQjY0KG5VaW50Nikge1xuXHRcdFx0cmV0dXJuIG5VaW50NiA8IDI2ID9cblx0XHRcdFx0blVpbnQ2ICsgNjUgOiBuVWludDYgPCA1MiA/XG5cdFx0XHRcdG5VaW50NiArIDcxIDogblVpbnQ2IDwgNjIgP1xuXHRcdFx0XHRuVWludDYgLSA0IDogblVpbnQ2ID09PSA2MiA/XG5cdFx0XHRcdDQzIDogblVpbnQ2ID09PSA2MyA/XG5cdFx0XHRcdDQ3IDpcblx0XHRcdFx0NjU7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgYUJ5dGVzID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXhjZXB0aW9uKFwiaW5wdXQgaGFzIHRvIGJlIGFuIGFycmF5XCIpO1xuXHRcdH1cblx0XHR2YXIgbk1vZDMgPSAyLFxuXHRcdFx0c0I2NEVuYyA9IFwiXCI7XG5cdFx0Zm9yICh2YXIgbkxlbiA9IGFCeXRlcy5sZW5ndGgsIG5VaW50MjQgPSAwLCBuSWR4ID0gMDsgbklkeCA8IG5MZW47IG5JZHgrKykge1xuXHRcdFx0bk1vZDMgPSBuSWR4ICUgMztcblx0XHRcdGlmIChuSWR4ID4gMCAmJiAobklkeCAqIDQgLyAzKSAlIDc2ID09PSAwICYmICFub05ld0xpbmUpIHtcblx0XHRcdFx0c0I2NEVuYyArPSBcIlxcclxcblwiO1xuXHRcdFx0fVxuXHRcdFx0blVpbnQyNCB8PSBhQnl0ZXNbbklkeF0gPDwgKDE2ID4+PiBuTW9kMyAmIDI0KTtcblx0XHRcdGlmIChuTW9kMyA9PT0gMiB8fCBhQnl0ZXMubGVuZ3RoIC0gbklkeCA9PT0gMSkge1xuXHRcdFx0XHRzQjY0RW5jICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoX3VpbnQ2VG9CNjQoblVpbnQyNCA+Pj4gMTggJiA2MyksIF91aW50NlRvQjY0KG5VaW50MjQgPj4+IDEyICYgNjMpLCBfdWludDZUb0I2NChuVWludDI0ID4+PiA2ICYgNjMpLCBfdWludDZUb0I2NChuVWludDI0ICYgNjMpKTtcblx0XHRcdFx0blVpbnQyNCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzQjY0RW5jLnN1YnN0cigwLCBzQjY0RW5jLmxlbmd0aCAtIDIgKyBuTW9kMykgKyAobk1vZDMgPT09IDIgPyBcIlwiIDogbk1vZDMgPT09IDEgPyBcIj1cIiA6IFwiPT1cIik7XG5cdH1cblxuXHRmdW5jdGlvbiBvdXRwdXRfZm9ybWF0cygpIHtcblx0XHRyZXR1cm4gW1widWludDhhcnJheVwiLCBcInRleHRcIiwgXCJoZXhcIiwgXCJiYXNlNjRcIl07XG5cdH1cblxuXHRmdW5jdGlvbiBfZm9ybWF0X291dHB1dChvdXRwdXQsIG9wdGlvbmFsT3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIHNlbGVjdGVkT3V0cHV0Rm9ybWF0ID0gb3B0aW9uYWxPdXRwdXRGb3JtYXQgfHwgb3V0cHV0X2Zvcm1hdDtcblx0XHRpZiAoIV9pc19vdXRwdXRfZm9ybWF0KHNlbGVjdGVkT3V0cHV0Rm9ybWF0KSkgdGhyb3cgbmV3IEVycm9yKHNlbGVjdGVkT3V0cHV0Rm9ybWF0ICsgXCIgb3V0cHV0IGZvcm1hdCBpcyBub3QgYXZhaWxhYmxlXCIpO1xuXHRcdGlmIChvdXRwdXQgaW5zdGFuY2VvZiBBbGxvY2F0ZWRCdWYpIHtcblx0XHRcdGlmIChzZWxlY3RlZE91dHB1dEZvcm1hdCA9PT0gXCJ1aW50OGFycmF5XCIpIHJldHVybiBvdXRwdXQudG9fVWludDhBcnJheSgpO1xuXHRcdFx0ZWxzZSBpZiAoc2VsZWN0ZWRPdXRwdXRGb3JtYXQgPT09IFwidGV4dFwiKSByZXR1cm4gbGlic29kaXVtLlBvaW50ZXJfc3RyaW5naWZ5KG91dHB1dC5hZGRyZXNzLCBvdXRwdXQubGVuZ3RoKTtcblx0XHRcdGVsc2UgaWYgKHNlbGVjdGVkT3V0cHV0Rm9ybWF0ID09PSBcImhleFwiKSByZXR1cm4gdG9faGV4KG91dHB1dC50b19VaW50OEFycmF5KCkpO1xuXHRcdFx0ZWxzZSBpZiAoc2VsZWN0ZWRPdXRwdXRGb3JtYXQgPT09IFwiYmFzZTY0XCIpIHJldHVybiB0b19iYXNlNjQob3V0cHV0LnRvX1VpbnQ4QXJyYXkoKSk7XG5cdFx0XHRlbHNlIHRocm93IG5ldyBFcnJvcihcIldoYXQgaXMgb3V0cHV0IGZvcm1hdCBcXFwiXCIgKyBzZWxlY3RlZE91dHB1dEZvcm1hdCArIFwiXFxcIj9cIik7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2Ygb3V0cHV0ID09PSBcIm9iamVjdFwiKSB7IC8vQ29tcG9zZWQgb3V0cHV0LiBFeGFtcGxlIDoga2V5IHBhaXJzXG5cdFx0XHR2YXIgcHJvcHMgPSBPYmplY3Qua2V5cyhvdXRwdXQpO1xuXHRcdFx0dmFyIGZvcm1hdHRlZE91dHB1dCA9IHt9O1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRmb3JtYXR0ZWRPdXRwdXRbcHJvcHNbaV1dID0gX2Zvcm1hdF9vdXRwdXQob3V0cHV0W3Byb3BzW2ldXSwgc2VsZWN0ZWRPdXRwdXRGb3JtYXQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZvcm1hdHRlZE91dHB1dDtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBvdXRwdXQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHJldHVybiBvdXRwdXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgZm9ybWF0IG91dHB1dFwiKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBfaXNfb3V0cHV0X2Zvcm1hdChmb3JtYXQpIHtcblx0XHR2YXIgZm9ybWF0cyA9IG91dHB1dF9mb3JtYXRzKCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBmb3JtYXRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoZm9ybWF0c1tpXSA9PT0gZm9ybWF0KSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0ZnVuY3Rpb24gX2NoZWNrX291dHB1dF9mb3JtYXQoZm9ybWF0KSB7XG5cdFx0aWYgKCFmb3JtYXQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBmb3JtYXQgIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJXaGVuIGRlZmluZWQsIHRoZSBvdXRwdXQgZm9ybWF0IG11c3QgYmUgYSBzdHJpbmdcIik7XG5cdFx0fSBlbHNlIGlmICghX2lzX291dHB1dF9mb3JtYXQoZm9ybWF0KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGZvcm1hdCArIFwiIGlzIG5vdCBhIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0XCIpO1xuXHRcdH1cblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vIE1lbW9yeSBtYW5hZ2VtZW50XG5cblx0Ly8gQWxsb2NhdGVkQnVmOiBhZGRyZXNzIGFsbG9jYXRlZCB1c2luZyBfbWFsbG9jKCkgKyBsZW5ndGhcblx0ZnVuY3Rpb24gQWxsb2NhdGVkQnVmKGxlbmd0aCkge1xuXHRcdHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuXHRcdHRoaXMuYWRkcmVzcyA9IF9tYWxsb2MobGVuZ3RoKTtcblx0fVxuXG5cdC8vIENvcHkgdGhlIGNvbnRlbnQgb2YgYSBBbGxvY2F0ZWRCdWYgKF9tYWxsb2MoKSdkIG1lbW9yeSkgaW50byBhIFVpbnQ4QXJyYXlcblx0QWxsb2NhdGVkQnVmLnByb3RvdHlwZS50b19VaW50OEFycmF5ID0gZnVuY3Rpb24gKCkge1xuXHRcdHZhciByZXN1bHQgPSBuZXcgVWludDhBcnJheSh0aGlzLmxlbmd0aCk7XG5cdFx0cmVzdWx0LnNldChsaWJzb2RpdW0uSEVBUFU4LnN1YmFycmF5KHRoaXMuYWRkcmVzcywgdGhpcy5hZGRyZXNzICsgdGhpcy5sZW5ndGgpKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xuXG5cdC8vIF9tYWxsb2MoKSBhIHJlZ2lvbiBhbmQgaW5pdGlhbGl6ZSBpdCB3aXRoIHRoZSBjb250ZW50IG9mIGEgVWludDhBcnJheVxuXHRmdW5jdGlvbiBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKGJ5dGVzKSB7XG5cdFx0dmFyIGFkZHJlc3MgPSBfbWFsbG9jKGJ5dGVzLmxlbmd0aCk7XG5cdFx0bGlic29kaXVtLkhFQVBVOC5zZXQoYnl0ZXMsIGFkZHJlc3MpO1xuXHRcdHJldHVybiBhZGRyZXNzO1xuXHR9XG5cblx0ZnVuY3Rpb24gX21hbGxvYyhsZW5ndGgpIHtcblx0XHR2YXIgcmVzdWx0ID0gbGlic29kaXVtLl9tYWxsb2MobGVuZ3RoKTtcblx0XHRpZiAocmVzdWx0ID09PSAwKSB7XG5cdFx0XHR0aHJvdyB7XG5cdFx0XHRcdG1lc3NhZ2U6IFwiX21hbGxvYygpIGZhaWxlZFwiLFxuXHRcdFx0XHRsZW5ndGg6IGxlbmd0aFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZ1bmN0aW9uIF9mcmVlKGFkZHJlc3MpIHtcblx0XHRsaWJzb2RpdW0uX2ZyZWUoYWRkcmVzcyk7XG5cdH1cblxuXHRmdW5jdGlvbiBfZnJlZV9hbGwoYWRkcmVzc2VzKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhZGRyZXNzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdF9mcmVlKGFkZHJlc3Nlc1tpXSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gX2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCwgZXJyKSB7XG5cdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGVycik7XG5cdH1cblxuXHRmdW5jdGlvbiBfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIGVycikge1xuXHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZXJyKTtcblx0fVxuXG5cdGZ1bmN0aW9uIF9yZXF1aXJlX2RlZmluZWQoYWRkcmVzc19wb29sLCB2YXJWYWx1ZSwgdmFyTmFtZSkge1xuXHRcdGlmICh2YXJWYWx1ZSA9PSB1bmRlZmluZWQpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgdmFyTmFtZSArIFwiIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCB2YXJWYWx1ZSwgdmFyTmFtZSkge1xuXHRcdF9yZXF1aXJlX2RlZmluZWQoYWRkcmVzc19wb29sLCB2YXJWYWx1ZSwgdmFyTmFtZSk7XG5cdFx0aWYgKHZhclZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuXHRcdFx0cmV0dXJuIHZhclZhbHVlO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhclZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRyZXR1cm4gZnJvbV9zdHJpbmcodmFyVmFsdWUpO1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwidW5zdXBwb3J0ZWQgaW5wdXQgdHlwZSBmb3IgXCIgKyB2YXJOYW1lKTtcblx0fVxuXG5cdFxuXHRmdW5jdGlvbiBjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHQoc2VjcmV0X25vbmNlLCBjaXBoZXJ0ZXh0LCBhZGRpdGlvbmFsX2RhdGEsIHB1YmxpY19ub25jZSwga2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHNlY3JldF9ub25jZSAodW5zaXplZF9idWZfb3B0aW9uYWwpXG5cdFx0XG5cdFx0dmFyIHNlY3JldF9ub25jZV9hZGRyZXNzID0gbnVsbCwgc2VjcmV0X25vbmNlX2xlbmd0aCA9IDA7XG5cdFx0aWYgKHNlY3JldF9ub25jZSAhPSB1bmRlZmluZWQpIHtcblx0XHRcdHNlY3JldF9ub25jZSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHNlY3JldF9ub25jZSwgXCJzZWNyZXRfbm9uY2VcIik7XG5cdFx0XHRzZWNyZXRfbm9uY2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moc2VjcmV0X25vbmNlKTtcblx0XHRcdHNlY3JldF9ub25jZV9sZW5ndGggPSBzZWNyZXRfbm9uY2UubGVuZ3RoO1xuXHRcdFx0YWRkcmVzc19wb29sLnB1c2goc2VjcmV0X25vbmNlX2FkZHJlc3MpO1xuXHRcdH1cblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBjaXBoZXJ0ZXh0ICh1bnNpemVkX2J1Zilcblx0XHRcblx0XHRjaXBoZXJ0ZXh0ID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgY2lwaGVydGV4dCwgXCJjaXBoZXJ0ZXh0XCIpO1xuXHRcdHZhciBjaXBoZXJ0ZXh0X2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKGNpcGhlcnRleHQpLFxuXHRcdCAgICBjaXBoZXJ0ZXh0X2xlbmd0aCA9IGNpcGhlcnRleHQubGVuZ3RoO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKGNpcGhlcnRleHRfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogYWRkaXRpb25hbF9kYXRhICh1bnNpemVkX2J1Zl9vcHRpb25hbClcblx0XHRcblx0XHR2YXIgYWRkaXRpb25hbF9kYXRhX2FkZHJlc3MgPSBudWxsLCBhZGRpdGlvbmFsX2RhdGFfbGVuZ3RoID0gMDtcblx0XHRpZiAoYWRkaXRpb25hbF9kYXRhICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0YWRkaXRpb25hbF9kYXRhID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgYWRkaXRpb25hbF9kYXRhLCBcImFkZGl0aW9uYWxfZGF0YVwiKTtcblx0XHRcdGFkZGl0aW9uYWxfZGF0YV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhhZGRpdGlvbmFsX2RhdGEpO1xuXHRcdFx0YWRkaXRpb25hbF9kYXRhX2xlbmd0aCA9IGFkZGl0aW9uYWxfZGF0YS5sZW5ndGg7XG5cdFx0XHRhZGRyZXNzX3Bvb2wucHVzaChhZGRpdGlvbmFsX2RhdGFfYWRkcmVzcyk7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHB1YmxpY19ub25jZSAoYnVmKVxuXHRcdFxuXHRcdHB1YmxpY19ub25jZSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHB1YmxpY19ub25jZSwgXCJwdWJsaWNfbm9uY2VcIik7XG5cdFx0dmFyIHB1YmxpY19ub25jZV9hZGRyZXNzLCBwdWJsaWNfbm9uY2VfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9ucHViYnl0ZXMoKSkgfCAwO1xuXHRcdGlmIChwdWJsaWNfbm9uY2UubGVuZ3RoICE9PSBwdWJsaWNfbm9uY2VfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBwdWJsaWNfbm9uY2UgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRwdWJsaWNfbm9uY2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MocHVibGljX25vbmNlKTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChwdWJsaWNfbm9uY2VfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDoga2V5IChidWYpXG5cdFx0XG5cdFx0a2V5ID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwga2V5LCBcImtleVwiKTtcblx0XHR2YXIga2V5X2FkZHJlc3MsIGtleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2tleWJ5dGVzKCkpIHwgMDtcblx0XHRpZiAoa2V5Lmxlbmd0aCAhPT0ga2V5X2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQga2V5IGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0a2V5X2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKGtleSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goa2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IG1lc3NhZ2UgKGJ1Zilcblx0XHRcblx0XHR2YXIgbWVzc2FnZV9sZW5ndGggPSAoY2lwaGVydGV4dF9sZW5ndGggLSBsaWJzb2RpdW0uX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfYWJ5dGVzKCkpIHwgMCxcblx0XHQgICAgbWVzc2FnZSA9IG5ldyBBbGxvY2F0ZWRCdWYobWVzc2FnZV9sZW5ndGgpLFxuXHRcdCAgICBtZXNzYWdlX2FkZHJlc3MgPSBtZXNzYWdlLmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0KG1lc3NhZ2VfYWRkcmVzcywgbnVsbCwgc2VjcmV0X25vbmNlX2FkZHJlc3MsIGNpcGhlcnRleHRfYWRkcmVzcywgY2lwaGVydGV4dF9sZW5ndGgsIDAsIGFkZGl0aW9uYWxfZGF0YV9hZGRyZXNzLCBhZGRpdGlvbmFsX2RhdGFfbGVuZ3RoLCAwLCBwdWJsaWNfbm9uY2VfYWRkcmVzcywga2V5X2FkZHJlc3MpKSA9PT0gMCkge1xuXHRcdFx0dmFyIHJldCA9IF9mb3JtYXRfb3V0cHV0KG1lc3NhZ2UsIG91dHB1dEZvcm1hdCk7XG5cdFx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHRcdF9mcmVlX2FuZF90aHJvd19lcnJvcihhZGRyZXNzX3Bvb2wpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0KG1lc3NhZ2UsIGFkZGl0aW9uYWxfZGF0YSwgc2VjcmV0X25vbmNlLCBwdWJsaWNfbm9uY2UsIGtleSwgb3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXHRcdF9jaGVja19vdXRwdXRfZm9ybWF0KG91dHB1dEZvcm1hdCk7XG5cblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBtZXNzYWdlICh1bnNpemVkX2J1Zilcblx0XHRcblx0XHRtZXNzYWdlID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgbWVzc2FnZSwgXCJtZXNzYWdlXCIpO1xuXHRcdHZhciBtZXNzYWdlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKG1lc3NhZ2UpLFxuXHRcdCAgICBtZXNzYWdlX2xlbmd0aCA9IG1lc3NhZ2UubGVuZ3RoO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKG1lc3NhZ2VfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogYWRkaXRpb25hbF9kYXRhICh1bnNpemVkX2J1Zl9vcHRpb25hbClcblx0XHRcblx0XHR2YXIgYWRkaXRpb25hbF9kYXRhX2FkZHJlc3MgPSBudWxsLCBhZGRpdGlvbmFsX2RhdGFfbGVuZ3RoID0gMDtcblx0XHRpZiAoYWRkaXRpb25hbF9kYXRhICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0YWRkaXRpb25hbF9kYXRhID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgYWRkaXRpb25hbF9kYXRhLCBcImFkZGl0aW9uYWxfZGF0YVwiKTtcblx0XHRcdGFkZGl0aW9uYWxfZGF0YV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhhZGRpdGlvbmFsX2RhdGEpO1xuXHRcdFx0YWRkaXRpb25hbF9kYXRhX2xlbmd0aCA9IGFkZGl0aW9uYWxfZGF0YS5sZW5ndGg7XG5cdFx0XHRhZGRyZXNzX3Bvb2wucHVzaChhZGRpdGlvbmFsX2RhdGFfYWRkcmVzcyk7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHNlY3JldF9ub25jZSAodW5zaXplZF9idWZfb3B0aW9uYWwpXG5cdFx0XG5cdFx0dmFyIHNlY3JldF9ub25jZV9hZGRyZXNzID0gbnVsbCwgc2VjcmV0X25vbmNlX2xlbmd0aCA9IDA7XG5cdFx0aWYgKHNlY3JldF9ub25jZSAhPSB1bmRlZmluZWQpIHtcblx0XHRcdHNlY3JldF9ub25jZSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHNlY3JldF9ub25jZSwgXCJzZWNyZXRfbm9uY2VcIik7XG5cdFx0XHRzZWNyZXRfbm9uY2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moc2VjcmV0X25vbmNlKTtcblx0XHRcdHNlY3JldF9ub25jZV9sZW5ndGggPSBzZWNyZXRfbm9uY2UubGVuZ3RoO1xuXHRcdFx0YWRkcmVzc19wb29sLnB1c2goc2VjcmV0X25vbmNlX2FkZHJlc3MpO1xuXHRcdH1cblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBwdWJsaWNfbm9uY2UgKGJ1Zilcblx0XHRcblx0XHRwdWJsaWNfbm9uY2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBwdWJsaWNfbm9uY2UsIFwicHVibGljX25vbmNlXCIpO1xuXHRcdHZhciBwdWJsaWNfbm9uY2VfYWRkcmVzcywgcHVibGljX25vbmNlX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfbnB1YmJ5dGVzKCkpIHwgMDtcblx0XHRpZiAocHVibGljX25vbmNlLmxlbmd0aCAhPT0gcHVibGljX25vbmNlX2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQgcHVibGljX25vbmNlIGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0cHVibGljX25vbmNlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKHB1YmxpY19ub25jZSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocHVibGljX25vbmNlX2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IGtleSAoYnVmKVxuXHRcdFxuXHRcdGtleSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIGtleSwgXCJrZXlcIik7XG5cdFx0dmFyIGtleV9hZGRyZXNzLCBrZXlfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9rZXlieXRlcygpKSB8IDA7XG5cdFx0aWYgKGtleS5sZW5ndGggIT09IGtleV9sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIGtleSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdGtleV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhrZXkpO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKGtleV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBjaXBoZXJ0ZXh0IChidWYpXG5cdFx0XG5cdFx0dmFyIGNpcGhlcnRleHRfbGVuZ3RoID0gKG1lc3NhZ2VfbGVuZ3RoICsgbGlic29kaXVtLl9jcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2FieXRlcygpKSB8IDAsXG5cdFx0ICAgIGNpcGhlcnRleHQgPSBuZXcgQWxsb2NhdGVkQnVmKGNpcGhlcnRleHRfbGVuZ3RoKSxcblx0XHQgICAgY2lwaGVydGV4dF9hZGRyZXNzID0gY2lwaGVydGV4dC5hZGRyZXNzO1xuXHRcdFxuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKGNpcGhlcnRleHRfYWRkcmVzcyk7XG5cdFx0XG5cdFx0aWYgKChsaWJzb2RpdW0uX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfZW5jcnlwdChjaXBoZXJ0ZXh0X2FkZHJlc3MsIG51bGwsIG1lc3NhZ2VfYWRkcmVzcywgbWVzc2FnZV9sZW5ndGgsIDAsIGFkZGl0aW9uYWxfZGF0YV9hZGRyZXNzLCBhZGRpdGlvbmFsX2RhdGFfbGVuZ3RoLCAwLCBzZWNyZXRfbm9uY2VfYWRkcmVzcywgcHVibGljX25vbmNlX2FkZHJlc3MsIGtleV9hZGRyZXNzKSkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dChjaXBoZXJ0ZXh0LCBvdXRwdXRGb3JtYXQpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9kZWNyeXB0KHNlY3JldF9ub25jZSwgY2lwaGVydGV4dCwgYWRkaXRpb25hbF9kYXRhLCBwdWJsaWNfbm9uY2UsIGtleSwgb3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXHRcdF9jaGVja19vdXRwdXRfZm9ybWF0KG91dHB1dEZvcm1hdCk7XG5cblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBzZWNyZXRfbm9uY2UgKHVuc2l6ZWRfYnVmX29wdGlvbmFsKVxuXHRcdFxuXHRcdHZhciBzZWNyZXRfbm9uY2VfYWRkcmVzcyA9IG51bGwsIHNlY3JldF9ub25jZV9sZW5ndGggPSAwO1xuXHRcdGlmIChzZWNyZXRfbm9uY2UgIT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzZWNyZXRfbm9uY2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBzZWNyZXRfbm9uY2UsIFwic2VjcmV0X25vbmNlXCIpO1xuXHRcdFx0c2VjcmV0X25vbmNlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKHNlY3JldF9ub25jZSk7XG5cdFx0XHRzZWNyZXRfbm9uY2VfbGVuZ3RoID0gc2VjcmV0X25vbmNlLmxlbmd0aDtcblx0XHRcdGFkZHJlc3NfcG9vbC5wdXNoKHNlY3JldF9ub25jZV9hZGRyZXNzKTtcblx0XHR9XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogY2lwaGVydGV4dCAodW5zaXplZF9idWYpXG5cdFx0XG5cdFx0Y2lwaGVydGV4dCA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIGNpcGhlcnRleHQsIFwiY2lwaGVydGV4dFwiKTtcblx0XHR2YXIgY2lwaGVydGV4dF9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhjaXBoZXJ0ZXh0KSxcblx0XHQgICAgY2lwaGVydGV4dF9sZW5ndGggPSBjaXBoZXJ0ZXh0Lmxlbmd0aDtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChjaXBoZXJ0ZXh0X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IGFkZGl0aW9uYWxfZGF0YSAodW5zaXplZF9idWZfb3B0aW9uYWwpXG5cdFx0XG5cdFx0dmFyIGFkZGl0aW9uYWxfZGF0YV9hZGRyZXNzID0gbnVsbCwgYWRkaXRpb25hbF9kYXRhX2xlbmd0aCA9IDA7XG5cdFx0aWYgKGFkZGl0aW9uYWxfZGF0YSAhPSB1bmRlZmluZWQpIHtcblx0XHRcdGFkZGl0aW9uYWxfZGF0YSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIGFkZGl0aW9uYWxfZGF0YSwgXCJhZGRpdGlvbmFsX2RhdGFcIik7XG5cdFx0XHRhZGRpdGlvbmFsX2RhdGFfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MoYWRkaXRpb25hbF9kYXRhKTtcblx0XHRcdGFkZGl0aW9uYWxfZGF0YV9sZW5ndGggPSBhZGRpdGlvbmFsX2RhdGEubGVuZ3RoO1xuXHRcdFx0YWRkcmVzc19wb29sLnB1c2goYWRkaXRpb25hbF9kYXRhX2FkZHJlc3MpO1xuXHRcdH1cblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBwdWJsaWNfbm9uY2UgKGJ1Zilcblx0XHRcblx0XHRwdWJsaWNfbm9uY2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBwdWJsaWNfbm9uY2UsIFwicHVibGljX25vbmNlXCIpO1xuXHRcdHZhciBwdWJsaWNfbm9uY2VfYWRkcmVzcywgcHVibGljX25vbmNlX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9ucHViYnl0ZXMoKSkgfCAwO1xuXHRcdGlmIChwdWJsaWNfbm9uY2UubGVuZ3RoICE9PSBwdWJsaWNfbm9uY2VfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBwdWJsaWNfbm9uY2UgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRwdWJsaWNfbm9uY2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MocHVibGljX25vbmNlKTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChwdWJsaWNfbm9uY2VfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDoga2V5IChidWYpXG5cdFx0XG5cdFx0a2V5ID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwga2V5LCBcImtleVwiKTtcblx0XHR2YXIga2V5X2FkZHJlc3MsIGtleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2tleWJ5dGVzKCkpIHwgMDtcblx0XHRpZiAoa2V5Lmxlbmd0aCAhPT0ga2V5X2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQga2V5IGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0a2V5X2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKGtleSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goa2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IG1lc3NhZ2UgKGJ1Zilcblx0XHRcblx0XHR2YXIgbWVzc2FnZV9sZW5ndGggPSAoY2lwaGVydGV4dF9sZW5ndGggLSBsaWJzb2RpdW0uX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfYWJ5dGVzKCkpIHwgMCxcblx0XHQgICAgbWVzc2FnZSA9IG5ldyBBbGxvY2F0ZWRCdWYobWVzc2FnZV9sZW5ndGgpLFxuXHRcdCAgICBtZXNzYWdlX2FkZHJlc3MgPSBtZXNzYWdlLmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQobWVzc2FnZV9hZGRyZXNzLCBudWxsLCBzZWNyZXRfbm9uY2VfYWRkcmVzcywgY2lwaGVydGV4dF9hZGRyZXNzLCBjaXBoZXJ0ZXh0X2xlbmd0aCwgMCwgYWRkaXRpb25hbF9kYXRhX2FkZHJlc3MsIGFkZGl0aW9uYWxfZGF0YV9sZW5ndGgsIDAsIHB1YmxpY19ub25jZV9hZGRyZXNzLCBrZXlfYWRkcmVzcykpID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gX2Zvcm1hdF9vdXRwdXQobWVzc2FnZSwgb3V0cHV0Rm9ybWF0KTtcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZW5jcnlwdChtZXNzYWdlLCBhZGRpdGlvbmFsX2RhdGEsIHNlY3JldF9ub25jZSwgcHVibGljX25vbmNlLCBrZXksIG91dHB1dEZvcm1hdCkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblx0XHRfY2hlY2tfb3V0cHV0X2Zvcm1hdChvdXRwdXRGb3JtYXQpO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogbWVzc2FnZSAodW5zaXplZF9idWYpXG5cdFx0XG5cdFx0bWVzc2FnZSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIG1lc3NhZ2UsIFwibWVzc2FnZVwiKTtcblx0XHR2YXIgbWVzc2FnZV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhtZXNzYWdlKSxcblx0XHQgICAgbWVzc2FnZV9sZW5ndGggPSBtZXNzYWdlLmxlbmd0aDtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChtZXNzYWdlX2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IGFkZGl0aW9uYWxfZGF0YSAodW5zaXplZF9idWZfb3B0aW9uYWwpXG5cdFx0XG5cdFx0dmFyIGFkZGl0aW9uYWxfZGF0YV9hZGRyZXNzID0gbnVsbCwgYWRkaXRpb25hbF9kYXRhX2xlbmd0aCA9IDA7XG5cdFx0aWYgKGFkZGl0aW9uYWxfZGF0YSAhPSB1bmRlZmluZWQpIHtcblx0XHRcdGFkZGl0aW9uYWxfZGF0YSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIGFkZGl0aW9uYWxfZGF0YSwgXCJhZGRpdGlvbmFsX2RhdGFcIik7XG5cdFx0XHRhZGRpdGlvbmFsX2RhdGFfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MoYWRkaXRpb25hbF9kYXRhKTtcblx0XHRcdGFkZGl0aW9uYWxfZGF0YV9sZW5ndGggPSBhZGRpdGlvbmFsX2RhdGEubGVuZ3RoO1xuXHRcdFx0YWRkcmVzc19wb29sLnB1c2goYWRkaXRpb25hbF9kYXRhX2FkZHJlc3MpO1xuXHRcdH1cblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBzZWNyZXRfbm9uY2UgKHVuc2l6ZWRfYnVmX29wdGlvbmFsKVxuXHRcdFxuXHRcdHZhciBzZWNyZXRfbm9uY2VfYWRkcmVzcyA9IG51bGwsIHNlY3JldF9ub25jZV9sZW5ndGggPSAwO1xuXHRcdGlmIChzZWNyZXRfbm9uY2UgIT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzZWNyZXRfbm9uY2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBzZWNyZXRfbm9uY2UsIFwic2VjcmV0X25vbmNlXCIpO1xuXHRcdFx0c2VjcmV0X25vbmNlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKHNlY3JldF9ub25jZSk7XG5cdFx0XHRzZWNyZXRfbm9uY2VfbGVuZ3RoID0gc2VjcmV0X25vbmNlLmxlbmd0aDtcblx0XHRcdGFkZHJlc3NfcG9vbC5wdXNoKHNlY3JldF9ub25jZV9hZGRyZXNzKTtcblx0XHR9XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogcHVibGljX25vbmNlIChidWYpXG5cdFx0XG5cdFx0cHVibGljX25vbmNlID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgcHVibGljX25vbmNlLCBcInB1YmxpY19ub25jZVwiKTtcblx0XHR2YXIgcHVibGljX25vbmNlX2FkZHJlc3MsIHB1YmxpY19ub25jZV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfbnB1YmJ5dGVzKCkpIHwgMDtcblx0XHRpZiAocHVibGljX25vbmNlLmxlbmd0aCAhPT0gcHVibGljX25vbmNlX2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQgcHVibGljX25vbmNlIGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0cHVibGljX25vbmNlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKHB1YmxpY19ub25jZSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocHVibGljX25vbmNlX2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IGtleSAoYnVmKVxuXHRcdFxuXHRcdGtleSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIGtleSwgXCJrZXlcIik7XG5cdFx0dmFyIGtleV9hZGRyZXNzLCBrZXlfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9rZXlieXRlcygpKSB8IDA7XG5cdFx0aWYgKGtleS5sZW5ndGggIT09IGtleV9sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIGtleSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdGtleV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhrZXkpO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKGtleV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBjaXBoZXJ0ZXh0IChidWYpXG5cdFx0XG5cdFx0dmFyIGNpcGhlcnRleHRfbGVuZ3RoID0gKG1lc3NhZ2VfbGVuZ3RoICsgbGlic29kaXVtLl9jcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2FieXRlcygpKSB8IDAsXG5cdFx0ICAgIGNpcGhlcnRleHQgPSBuZXcgQWxsb2NhdGVkQnVmKGNpcGhlcnRleHRfbGVuZ3RoKSxcblx0XHQgICAgY2lwaGVydGV4dF9hZGRyZXNzID0gY2lwaGVydGV4dC5hZGRyZXNzO1xuXHRcdFxuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKGNpcGhlcnRleHRfYWRkcmVzcyk7XG5cdFx0XG5cdFx0aWYgKChsaWJzb2RpdW0uX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9lbmNyeXB0KGNpcGhlcnRleHRfYWRkcmVzcywgbnVsbCwgbWVzc2FnZV9hZGRyZXNzLCBtZXNzYWdlX2xlbmd0aCwgMCwgYWRkaXRpb25hbF9kYXRhX2FkZHJlc3MsIGFkZGl0aW9uYWxfZGF0YV9sZW5ndGgsIDAsIHNlY3JldF9ub25jZV9hZGRyZXNzLCBwdWJsaWNfbm9uY2VfYWRkcmVzcywga2V5X2FkZHJlc3MpKSA9PT0gMCkge1xuXHRcdFx0dmFyIHJldCA9IF9mb3JtYXRfb3V0cHV0KGNpcGhlcnRleHQsIG91dHB1dEZvcm1hdCk7XG5cdFx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHRcdF9mcmVlX2FuZF90aHJvd19lcnJvcihhZGRyZXNzX3Bvb2wpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gY3J5cHRvX2F1dGgobWVzc2FnZSwga2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1lc3NhZ2UgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdG1lc3NhZ2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBtZXNzYWdlLCBcIm1lc3NhZ2VcIik7XG5cdFx0dmFyIG1lc3NhZ2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MobWVzc2FnZSksXG5cdFx0ICAgIG1lc3NhZ2VfbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBrZXkgKGJ1Zilcblx0XHRcblx0XHRrZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBrZXksIFwia2V5XCIpO1xuXHRcdHZhciBrZXlfYWRkcmVzcywga2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19hdXRoX2tleWJ5dGVzKCkpIHwgMDtcblx0XHRpZiAoa2V5Lmxlbmd0aCAhPT0ga2V5X2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQga2V5IGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0a2V5X2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKGtleSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goa2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IHRhZyAoYnVmKVxuXHRcdFxuXHRcdHZhciB0YWdfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX2F1dGhfYnl0ZXMoKSkgfCAwLFxuXHRcdCAgICB0YWcgPSBuZXcgQWxsb2NhdGVkQnVmKHRhZ19sZW5ndGgpLFxuXHRcdCAgICB0YWdfYWRkcmVzcyA9IHRhZy5hZGRyZXNzO1xuXHRcdFxuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKHRhZ19hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX2F1dGgodGFnX2FkZHJlc3MsIG1lc3NhZ2VfYWRkcmVzcywgbWVzc2FnZV9sZW5ndGgsIDAsIGtleV9hZGRyZXNzKSB8IDApID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gX2Zvcm1hdF9vdXRwdXQodGFnLCBvdXRwdXRGb3JtYXQpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19hdXRoX2htYWNzaGEyNTYobWVzc2FnZSwga2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1lc3NhZ2UgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdG1lc3NhZ2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBtZXNzYWdlLCBcIm1lc3NhZ2VcIik7XG5cdFx0dmFyIG1lc3NhZ2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MobWVzc2FnZSksXG5cdFx0ICAgIG1lc3NhZ2VfbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBrZXkgKGJ1Zilcblx0XHRcblx0XHRrZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBrZXksIFwia2V5XCIpO1xuXHRcdHZhciBrZXlfYWRkcmVzcywga2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19hdXRoX2htYWNzaGEyNTZfa2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChrZXkubGVuZ3RoICE9PSBrZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBrZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRrZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moa2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChrZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgaGFzaCAoYnVmKVxuXHRcdFxuXHRcdHZhciBoYXNoX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19hdXRoX2htYWNzaGEyNTZfYnl0ZXMoKSkgfCAwLFxuXHRcdCAgICBoYXNoID0gbmV3IEFsbG9jYXRlZEJ1ZihoYXNoX2xlbmd0aCksXG5cdFx0ICAgIGhhc2hfYWRkcmVzcyA9IGhhc2guYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChoYXNoX2FkZHJlc3MpO1xuXHRcdFxuXHRcdGlmICgobGlic29kaXVtLl9jcnlwdG9fYXV0aF9obWFjc2hhMjU2KGhhc2hfYWRkcmVzcywgbWVzc2FnZV9hZGRyZXNzLCBtZXNzYWdlX2xlbmd0aCwgMCwga2V5X2FkZHJlc3MpIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dChoYXNoLCBvdXRwdXRGb3JtYXQpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19hdXRoX2htYWNzaGEyNTZfdmVyaWZ5KHRhZywgbWVzc2FnZSwga2V5KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogdGFnIChidWYpXG5cdFx0XG5cdFx0dGFnID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgdGFnLCBcInRhZ1wiKTtcblx0XHR2YXIgdGFnX2FkZHJlc3MsIHRhZ19sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYXV0aF9obWFjc2hhMjU2X2J5dGVzKCkpIHwgMDtcblx0XHRpZiAodGFnLmxlbmd0aCAhPT0gdGFnX2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQgdGFnIGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0dGFnX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKHRhZyk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2godGFnX2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1lc3NhZ2UgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdG1lc3NhZ2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBtZXNzYWdlLCBcIm1lc3NhZ2VcIik7XG5cdFx0dmFyIG1lc3NhZ2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MobWVzc2FnZSksXG5cdFx0ICAgIG1lc3NhZ2VfbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBrZXkgKGJ1Zilcblx0XHRcblx0XHRrZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBrZXksIFwia2V5XCIpO1xuXHRcdHZhciBrZXlfYWRkcmVzcywga2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19hdXRoX2htYWNzaGEyNTZfa2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChrZXkubGVuZ3RoICE9PSBrZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBrZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRrZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moa2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChrZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0dmFyIHJlc3VsdCA9IGxpYnNvZGl1bS5fY3J5cHRvX2F1dGhfaG1hY3NoYTI1Nl92ZXJpZnkodGFnX2FkZHJlc3MsIG1lc3NhZ2VfYWRkcmVzcywgbWVzc2FnZV9sZW5ndGgsIDAsIGtleV9hZGRyZXNzKSB8IDA7XG5cdFx0dmFyIHJldCA9IChyZXN1bHQgPT09IDApO1xuXHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdHJldHVybiByZXQ7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fYXV0aF9obWFjc2hhNTEyKG1lc3NhZ2UsIGtleSwgb3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXHRcdF9jaGVja19vdXRwdXRfZm9ybWF0KG91dHB1dEZvcm1hdCk7XG5cblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBtZXNzYWdlICh1bnNpemVkX2J1Zilcblx0XHRcblx0XHRtZXNzYWdlID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgbWVzc2FnZSwgXCJtZXNzYWdlXCIpO1xuXHRcdHZhciBtZXNzYWdlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKG1lc3NhZ2UpLFxuXHRcdCAgICBtZXNzYWdlX2xlbmd0aCA9IG1lc3NhZ2UubGVuZ3RoO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKG1lc3NhZ2VfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDoga2V5IChidWYpXG5cdFx0XG5cdFx0a2V5ID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwga2V5LCBcImtleVwiKTtcblx0XHR2YXIga2V5X2FkZHJlc3MsIGtleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYXV0aF9obWFjc2hhNTEyX2tleWJ5dGVzKCkpIHwgMDtcblx0XHRpZiAoa2V5Lmxlbmd0aCAhPT0ga2V5X2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQga2V5IGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0a2V5X2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKGtleSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goa2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IGhhc2ggKGJ1Zilcblx0XHRcblx0XHR2YXIgaGFzaF9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYXV0aF9obWFjc2hhNTEyX2J5dGVzKCkpIHwgMCxcblx0XHQgICAgaGFzaCA9IG5ldyBBbGxvY2F0ZWRCdWYoaGFzaF9sZW5ndGgpLFxuXHRcdCAgICBoYXNoX2FkZHJlc3MgPSBoYXNoLmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2goaGFzaF9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX2F1dGhfaG1hY3NoYTUxMihoYXNoX2FkZHJlc3MsIG1lc3NhZ2VfYWRkcmVzcywgbWVzc2FnZV9sZW5ndGgsIDAsIGtleV9hZGRyZXNzKSB8IDApID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gX2Zvcm1hdF9vdXRwdXQoaGFzaCwgb3V0cHV0Rm9ybWF0KTtcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fYXV0aF9obWFjc2hhNTEyX3ZlcmlmeSh0YWcsIG1lc3NhZ2UsIGtleSkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHRhZyAoYnVmKVxuXHRcdFxuXHRcdHRhZyA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHRhZywgXCJ0YWdcIik7XG5cdFx0dmFyIHRhZ19hZGRyZXNzLCB0YWdfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX2F1dGhfaG1hY3NoYTUxMl9ieXRlcygpKSB8IDA7XG5cdFx0aWYgKHRhZy5sZW5ndGggIT09IHRhZ19sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIHRhZyBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdHRhZ19hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyh0YWcpO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKHRhZ19hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBtZXNzYWdlICh1bnNpemVkX2J1Zilcblx0XHRcblx0XHRtZXNzYWdlID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgbWVzc2FnZSwgXCJtZXNzYWdlXCIpO1xuXHRcdHZhciBtZXNzYWdlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKG1lc3NhZ2UpLFxuXHRcdCAgICBtZXNzYWdlX2xlbmd0aCA9IG1lc3NhZ2UubGVuZ3RoO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKG1lc3NhZ2VfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDoga2V5IChidWYpXG5cdFx0XG5cdFx0a2V5ID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwga2V5LCBcImtleVwiKTtcblx0XHR2YXIga2V5X2FkZHJlc3MsIGtleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYXV0aF9obWFjc2hhNTEyX2tleWJ5dGVzKCkpIHwgMDtcblx0XHRpZiAoa2V5Lmxlbmd0aCAhPT0ga2V5X2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQga2V5IGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0a2V5X2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKGtleSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goa2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdHZhciByZXN1bHQgPSBsaWJzb2RpdW0uX2NyeXB0b19hdXRoX2htYWNzaGE1MTJfdmVyaWZ5KHRhZ19hZGRyZXNzLCBtZXNzYWdlX2FkZHJlc3MsIG1lc3NhZ2VfbGVuZ3RoLCAwLCBrZXlfYWRkcmVzcykgfCAwO1xuXHRcdHZhciByZXQgPSAocmVzdWx0ID09PSAwKTtcblx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRyZXR1cm4gcmV0O1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gY3J5cHRvX2F1dGhfdmVyaWZ5KHRhZywgbWVzc2FnZSwga2V5KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogdGFnIChidWYpXG5cdFx0XG5cdFx0dGFnID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgdGFnLCBcInRhZ1wiKTtcblx0XHR2YXIgdGFnX2FkZHJlc3MsIHRhZ19sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYXV0aF9ieXRlcygpKSB8IDA7XG5cdFx0aWYgKHRhZy5sZW5ndGggIT09IHRhZ19sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIHRhZyBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdHRhZ19hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyh0YWcpO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKHRhZ19hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBtZXNzYWdlICh1bnNpemVkX2J1Zilcblx0XHRcblx0XHRtZXNzYWdlID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgbWVzc2FnZSwgXCJtZXNzYWdlXCIpO1xuXHRcdHZhciBtZXNzYWdlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKG1lc3NhZ2UpLFxuXHRcdCAgICBtZXNzYWdlX2xlbmd0aCA9IG1lc3NhZ2UubGVuZ3RoO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKG1lc3NhZ2VfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDoga2V5IChidWYpXG5cdFx0XG5cdFx0a2V5ID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwga2V5LCBcImtleVwiKTtcblx0XHR2YXIga2V5X2FkZHJlc3MsIGtleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYXV0aF9rZXlieXRlcygpKSB8IDA7XG5cdFx0aWYgKGtleS5sZW5ndGggIT09IGtleV9sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIGtleSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdGtleV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhrZXkpO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKGtleV9hZGRyZXNzKTtcblx0XHRcblx0XHR2YXIgcmVzdWx0ID0gbGlic29kaXVtLl9jcnlwdG9fYXV0aF92ZXJpZnkodGFnX2FkZHJlc3MsIG1lc3NhZ2VfYWRkcmVzcywgbWVzc2FnZV9sZW5ndGgsIDAsIGtleV9hZGRyZXNzKSB8IDA7XG5cdFx0dmFyIHJldCA9IChyZXN1bHQgPT09IDApO1xuXHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdHJldHVybiByZXQ7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fYm94X2JlZm9yZW5tKHB1YmxpY0tleSwgc2VjcmV0S2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHB1YmxpY0tleSAoYnVmKVxuXHRcdFxuXHRcdHB1YmxpY0tleSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHB1YmxpY0tleSwgXCJwdWJsaWNLZXlcIik7XG5cdFx0dmFyIHB1YmxpY0tleV9hZGRyZXNzLCBwdWJsaWNLZXlfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX2JveF9wdWJsaWNrZXlieXRlcygpKSB8IDA7XG5cdFx0aWYgKHB1YmxpY0tleS5sZW5ndGggIT09IHB1YmxpY0tleV9sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIHB1YmxpY0tleSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdHB1YmxpY0tleV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhwdWJsaWNLZXkpO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKHB1YmxpY0tleV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBzZWNyZXRLZXkgKGJ1Zilcblx0XHRcblx0XHRzZWNyZXRLZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBzZWNyZXRLZXksIFwic2VjcmV0S2V5XCIpO1xuXHRcdHZhciBzZWNyZXRLZXlfYWRkcmVzcywgc2VjcmV0S2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19ib3hfc2VjcmV0a2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChzZWNyZXRLZXkubGVuZ3RoICE9PSBzZWNyZXRLZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBzZWNyZXRLZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRzZWNyZXRLZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moc2VjcmV0S2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChzZWNyZXRLZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgc2hhcmVkS2V5IChidWYpXG5cdFx0XG5cdFx0dmFyIHNoYXJlZEtleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYm94X2JlZm9yZW5tYnl0ZXMoKSkgfCAwLFxuXHRcdCAgICBzaGFyZWRLZXkgPSBuZXcgQWxsb2NhdGVkQnVmKHNoYXJlZEtleV9sZW5ndGgpLFxuXHRcdCAgICBzaGFyZWRLZXlfYWRkcmVzcyA9IHNoYXJlZEtleS5hZGRyZXNzO1xuXHRcdFxuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKHNoYXJlZEtleV9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX2JveF9iZWZvcmVubShzaGFyZWRLZXlfYWRkcmVzcywgcHVibGljS2V5X2FkZHJlc3MsIHNlY3JldEtleV9hZGRyZXNzKSB8IDApID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gX2Zvcm1hdF9vdXRwdXQoc2hhcmVkS2V5LCBvdXRwdXRGb3JtYXQpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19ib3hfZGV0YWNoZWQobWVzc2FnZSwgbm9uY2UsIHB1YmxpY0tleSwgc2VjcmV0S2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1lc3NhZ2UgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdG1lc3NhZ2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBtZXNzYWdlLCBcIm1lc3NhZ2VcIik7XG5cdFx0dmFyIG1lc3NhZ2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MobWVzc2FnZSksXG5cdFx0ICAgIG1lc3NhZ2VfbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBub25jZSAoYnVmKVxuXHRcdFxuXHRcdG5vbmNlID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgbm9uY2UsIFwibm9uY2VcIik7XG5cdFx0dmFyIG5vbmNlX2FkZHJlc3MsIG5vbmNlX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19ib3hfbm9uY2VieXRlcygpKSB8IDA7XG5cdFx0aWYgKG5vbmNlLmxlbmd0aCAhPT0gbm9uY2VfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBub25jZSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdG5vbmNlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKG5vbmNlKTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChub25jZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBwdWJsaWNLZXkgKGJ1Zilcblx0XHRcblx0XHRwdWJsaWNLZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBwdWJsaWNLZXksIFwicHVibGljS2V5XCIpO1xuXHRcdHZhciBwdWJsaWNLZXlfYWRkcmVzcywgcHVibGljS2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19ib3hfcHVibGlja2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSBwdWJsaWNLZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBwdWJsaWNLZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRwdWJsaWNLZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MocHVibGljS2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChwdWJsaWNLZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogc2VjcmV0S2V5IChidWYpXG5cdFx0XG5cdFx0c2VjcmV0S2V5ID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgc2VjcmV0S2V5LCBcInNlY3JldEtleVwiKTtcblx0XHR2YXIgc2VjcmV0S2V5X2FkZHJlc3MsIHNlY3JldEtleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYm94X3NlY3JldGtleWJ5dGVzKCkpIHwgMDtcblx0XHRpZiAoc2VjcmV0S2V5Lmxlbmd0aCAhPT0gc2VjcmV0S2V5X2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQgc2VjcmV0S2V5IGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0c2VjcmV0S2V5X2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKHNlY3JldEtleSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goc2VjcmV0S2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IGNpcGhlcnRleHQgKGJ1Zilcblx0XHRcblx0XHR2YXIgY2lwaGVydGV4dF9sZW5ndGggPSAobWVzc2FnZV9sZW5ndGgpIHwgMCxcblx0XHQgICAgY2lwaGVydGV4dCA9IG5ldyBBbGxvY2F0ZWRCdWYoY2lwaGVydGV4dF9sZW5ndGgpLFxuXHRcdCAgICBjaXBoZXJ0ZXh0X2FkZHJlc3MgPSBjaXBoZXJ0ZXh0LmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2goY2lwaGVydGV4dF9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBtYWMgKGJ1Zilcblx0XHRcblx0XHR2YXIgbWFjX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19ib3hfbWFjYnl0ZXMoKSkgfCAwLFxuXHRcdCAgICBtYWMgPSBuZXcgQWxsb2NhdGVkQnVmKG1hY19sZW5ndGgpLFxuXHRcdCAgICBtYWNfYWRkcmVzcyA9IG1hYy5hZGRyZXNzO1xuXHRcdFxuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKG1hY19hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX2JveF9kZXRhY2hlZChjaXBoZXJ0ZXh0X2FkZHJlc3MsIG1hY19hZGRyZXNzLCBtZXNzYWdlX2FkZHJlc3MsIG1lc3NhZ2VfbGVuZ3RoLCAwLCBub25jZV9hZGRyZXNzLCBwdWJsaWNLZXlfYWRkcmVzcywgc2VjcmV0S2V5X2FkZHJlc3MpIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dCh7Y2lwaGVydGV4dDogY2lwaGVydGV4dCwgbWFjOiBtYWN9LCBvdXRwdXRGb3JtYXQpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19ib3hfZWFzeShtZXNzYWdlLCBub25jZSwgcHVibGljS2V5LCBzZWNyZXRLZXksIG91dHB1dEZvcm1hdCkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblx0XHRfY2hlY2tfb3V0cHV0X2Zvcm1hdChvdXRwdXRGb3JtYXQpO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogbWVzc2FnZSAodW5zaXplZF9idWYpXG5cdFx0XG5cdFx0bWVzc2FnZSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIG1lc3NhZ2UsIFwibWVzc2FnZVwiKTtcblx0XHR2YXIgbWVzc2FnZV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhtZXNzYWdlKSxcblx0XHQgICAgbWVzc2FnZV9sZW5ndGggPSBtZXNzYWdlLmxlbmd0aDtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChtZXNzYWdlX2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG5vbmNlIChidWYpXG5cdFx0XG5cdFx0bm9uY2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBub25jZSwgXCJub25jZVwiKTtcblx0XHR2YXIgbm9uY2VfYWRkcmVzcywgbm9uY2VfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX2JveF9ub25jZWJ5dGVzKCkpIHwgMDtcblx0XHRpZiAobm9uY2UubGVuZ3RoICE9PSBub25jZV9sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIG5vbmNlIGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0bm9uY2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Mobm9uY2UpO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKG5vbmNlX2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHB1YmxpY0tleSAoYnVmKVxuXHRcdFxuXHRcdHB1YmxpY0tleSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHB1YmxpY0tleSwgXCJwdWJsaWNLZXlcIik7XG5cdFx0dmFyIHB1YmxpY0tleV9hZGRyZXNzLCBwdWJsaWNLZXlfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX2JveF9wdWJsaWNrZXlieXRlcygpKSB8IDA7XG5cdFx0aWYgKHB1YmxpY0tleS5sZW5ndGggIT09IHB1YmxpY0tleV9sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIHB1YmxpY0tleSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdHB1YmxpY0tleV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhwdWJsaWNLZXkpO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKHB1YmxpY0tleV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBzZWNyZXRLZXkgKGJ1Zilcblx0XHRcblx0XHRzZWNyZXRLZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBzZWNyZXRLZXksIFwic2VjcmV0S2V5XCIpO1xuXHRcdHZhciBzZWNyZXRLZXlfYWRkcmVzcywgc2VjcmV0S2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19ib3hfc2VjcmV0a2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChzZWNyZXRLZXkubGVuZ3RoICE9PSBzZWNyZXRLZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBzZWNyZXRLZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRzZWNyZXRLZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moc2VjcmV0S2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChzZWNyZXRLZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgY2lwaGVydGV4dCAoYnVmKVxuXHRcdFxuXHRcdHZhciBjaXBoZXJ0ZXh0X2xlbmd0aCA9IChtZXNzYWdlX2xlbmd0aCArIGxpYnNvZGl1bS5fY3J5cHRvX2JveF9tYWNieXRlcygpKSB8IDAsXG5cdFx0ICAgIGNpcGhlcnRleHQgPSBuZXcgQWxsb2NhdGVkQnVmKGNpcGhlcnRleHRfbGVuZ3RoKSxcblx0XHQgICAgY2lwaGVydGV4dF9hZGRyZXNzID0gY2lwaGVydGV4dC5hZGRyZXNzO1xuXHRcdFxuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKGNpcGhlcnRleHRfYWRkcmVzcyk7XG5cdFx0XG5cdFx0aWYgKChsaWJzb2RpdW0uX2NyeXB0b19ib3hfZWFzeShjaXBoZXJ0ZXh0X2FkZHJlc3MsIG1lc3NhZ2VfYWRkcmVzcywgbWVzc2FnZV9sZW5ndGgsIDAsIG5vbmNlX2FkZHJlc3MsIHB1YmxpY0tleV9hZGRyZXNzLCBzZWNyZXRLZXlfYWRkcmVzcykgfCAwKSA9PT0gMCkge1xuXHRcdFx0dmFyIHJldCA9IF9mb3JtYXRfb3V0cHV0KGNpcGhlcnRleHQsIG91dHB1dEZvcm1hdCk7XG5cdFx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHRcdF9mcmVlX2FuZF90aHJvd19lcnJvcihhZGRyZXNzX3Bvb2wpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gY3J5cHRvX2JveF9lYXN5X2FmdGVybm0obWVzc2FnZSwgbm9uY2UsIHNoYXJlZEtleSwgb3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXHRcdF9jaGVja19vdXRwdXRfZm9ybWF0KG91dHB1dEZvcm1hdCk7XG5cblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBtZXNzYWdlICh1bnNpemVkX2J1Zilcblx0XHRcblx0XHRtZXNzYWdlID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgbWVzc2FnZSwgXCJtZXNzYWdlXCIpO1xuXHRcdHZhciBtZXNzYWdlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKG1lc3NhZ2UpLFxuXHRcdCAgICBtZXNzYWdlX2xlbmd0aCA9IG1lc3NhZ2UubGVuZ3RoO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKG1lc3NhZ2VfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogbm9uY2UgKGJ1Zilcblx0XHRcblx0XHRub25jZSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIG5vbmNlLCBcIm5vbmNlXCIpO1xuXHRcdHZhciBub25jZV9hZGRyZXNzLCBub25jZV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYm94X25vbmNlYnl0ZXMoKSkgfCAwO1xuXHRcdGlmIChub25jZS5sZW5ndGggIT09IG5vbmNlX2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQgbm9uY2UgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRub25jZV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhub25jZSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobm9uY2VfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogc2hhcmVkS2V5IChidWYpXG5cdFx0XG5cdFx0c2hhcmVkS2V5ID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgc2hhcmVkS2V5LCBcInNoYXJlZEtleVwiKTtcblx0XHR2YXIgc2hhcmVkS2V5X2FkZHJlc3MsIHNoYXJlZEtleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYm94X2JlZm9yZW5tYnl0ZXMoKSkgfCAwO1xuXHRcdGlmIChzaGFyZWRLZXkubGVuZ3RoICE9PSBzaGFyZWRLZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBzaGFyZWRLZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRzaGFyZWRLZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moc2hhcmVkS2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChzaGFyZWRLZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgY2lwaGVydGV4dCAoYnVmKVxuXHRcdFxuXHRcdHZhciBjaXBoZXJ0ZXh0X2xlbmd0aCA9IChtZXNzYWdlX2xlbmd0aCArIGxpYnNvZGl1bS5fY3J5cHRvX2JveF9tYWNieXRlcygpKSB8IDAsXG5cdFx0ICAgIGNpcGhlcnRleHQgPSBuZXcgQWxsb2NhdGVkQnVmKGNpcGhlcnRleHRfbGVuZ3RoKSxcblx0XHQgICAgY2lwaGVydGV4dF9hZGRyZXNzID0gY2lwaGVydGV4dC5hZGRyZXNzO1xuXHRcdFxuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKGNpcGhlcnRleHRfYWRkcmVzcyk7XG5cdFx0XG5cdFx0aWYgKChsaWJzb2RpdW0uX2NyeXB0b19ib3hfZWFzeV9hZnRlcm5tKGNpcGhlcnRleHRfYWRkcmVzcywgbWVzc2FnZV9hZGRyZXNzLCBtZXNzYWdlX2xlbmd0aCwgMCwgbm9uY2VfYWRkcmVzcywgc2hhcmVkS2V5X2FkZHJlc3MpIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dChjaXBoZXJ0ZXh0LCBvdXRwdXRGb3JtYXQpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19ib3hfa2V5cGFpcihvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IHB1YmxpY0tleSAoYnVmKVxuXHRcdFxuXHRcdHZhciBwdWJsaWNLZXlfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX2JveF9wdWJsaWNrZXlieXRlcygpKSB8IDAsXG5cdFx0ICAgIHB1YmxpY0tleSA9IG5ldyBBbGxvY2F0ZWRCdWYocHVibGljS2V5X2xlbmd0aCksXG5cdFx0ICAgIHB1YmxpY0tleV9hZGRyZXNzID0gcHVibGljS2V5LmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocHVibGljS2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IHNlY3JldEtleSAoYnVmKVxuXHRcdFxuXHRcdHZhciBzZWNyZXRLZXlfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX2JveF9zZWNyZXRrZXlieXRlcygpKSB8IDAsXG5cdFx0ICAgIHNlY3JldEtleSA9IG5ldyBBbGxvY2F0ZWRCdWYoc2VjcmV0S2V5X2xlbmd0aCksXG5cdFx0ICAgIHNlY3JldEtleV9hZGRyZXNzID0gc2VjcmV0S2V5LmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2goc2VjcmV0S2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdGlmICgobGlic29kaXVtLl9jcnlwdG9fYm94X2tleXBhaXIocHVibGljS2V5X2FkZHJlc3MsIHNlY3JldEtleV9hZGRyZXNzKSB8IDApID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gX2Zvcm1hdF9vdXRwdXQoe3B1YmxpY0tleTogcHVibGljS2V5LCBwcml2YXRlS2V5OiBzZWNyZXRLZXksIGtleVR5cGU6IFwiY3VydmUyNTUxOVwifSwgb3V0cHV0Rm9ybWF0KTtcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fYm94X29wZW5fZGV0YWNoZWQoY2lwaGVydGV4dCwgbWFjLCBub25jZSwgcHVibGljS2V5LCBzZWNyZXRLZXksIG91dHB1dEZvcm1hdCkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblx0XHRfY2hlY2tfb3V0cHV0X2Zvcm1hdChvdXRwdXRGb3JtYXQpO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogY2lwaGVydGV4dCAodW5zaXplZF9idWYpXG5cdFx0XG5cdFx0Y2lwaGVydGV4dCA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIGNpcGhlcnRleHQsIFwiY2lwaGVydGV4dFwiKTtcblx0XHR2YXIgY2lwaGVydGV4dF9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhjaXBoZXJ0ZXh0KSxcblx0XHQgICAgY2lwaGVydGV4dF9sZW5ndGggPSBjaXBoZXJ0ZXh0Lmxlbmd0aDtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChjaXBoZXJ0ZXh0X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1hYyAoYnVmKVxuXHRcdFxuXHRcdG1hYyA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIG1hYywgXCJtYWNcIik7XG5cdFx0dmFyIG1hY19hZGRyZXNzLCBtYWNfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX2JveF9tYWNieXRlcygpKSB8IDA7XG5cdFx0aWYgKG1hYy5sZW5ndGggIT09IG1hY19sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIG1hYyBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdG1hY19hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhtYWMpO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKG1hY19hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBub25jZSAoYnVmKVxuXHRcdFxuXHRcdG5vbmNlID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgbm9uY2UsIFwibm9uY2VcIik7XG5cdFx0dmFyIG5vbmNlX2FkZHJlc3MsIG5vbmNlX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19ib3hfbm9uY2VieXRlcygpKSB8IDA7XG5cdFx0aWYgKG5vbmNlLmxlbmd0aCAhPT0gbm9uY2VfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBub25jZSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdG5vbmNlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKG5vbmNlKTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChub25jZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBwdWJsaWNLZXkgKGJ1Zilcblx0XHRcblx0XHRwdWJsaWNLZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBwdWJsaWNLZXksIFwicHVibGljS2V5XCIpO1xuXHRcdHZhciBwdWJsaWNLZXlfYWRkcmVzcywgcHVibGljS2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19ib3hfcHVibGlja2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSBwdWJsaWNLZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBwdWJsaWNLZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRwdWJsaWNLZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MocHVibGljS2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChwdWJsaWNLZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogc2VjcmV0S2V5IChidWYpXG5cdFx0XG5cdFx0c2VjcmV0S2V5ID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgc2VjcmV0S2V5LCBcInNlY3JldEtleVwiKTtcblx0XHR2YXIgc2VjcmV0S2V5X2FkZHJlc3MsIHNlY3JldEtleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYm94X3NlY3JldGtleWJ5dGVzKCkpIHwgMDtcblx0XHRpZiAoc2VjcmV0S2V5Lmxlbmd0aCAhPT0gc2VjcmV0S2V5X2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQgc2VjcmV0S2V5IGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0c2VjcmV0S2V5X2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKHNlY3JldEtleSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goc2VjcmV0S2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IHBsYWludGV4dCAoYnVmKVxuXHRcdFxuXHRcdHZhciBwbGFpbnRleHRfbGVuZ3RoID0gKGNpcGhlcnRleHRfbGVuZ3RoKSB8IDAsXG5cdFx0ICAgIHBsYWludGV4dCA9IG5ldyBBbGxvY2F0ZWRCdWYocGxhaW50ZXh0X2xlbmd0aCksXG5cdFx0ICAgIHBsYWludGV4dF9hZGRyZXNzID0gcGxhaW50ZXh0LmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocGxhaW50ZXh0X2FkZHJlc3MpO1xuXHRcdFxuXHRcdGlmICgobGlic29kaXVtLl9jcnlwdG9fYm94X29wZW5fZGV0YWNoZWQocGxhaW50ZXh0X2FkZHJlc3MsIGNpcGhlcnRleHRfYWRkcmVzcywgbWFjX2FkZHJlc3MsIGNpcGhlcnRleHRfbGVuZ3RoLCAwLCBub25jZV9hZGRyZXNzLCBwdWJsaWNLZXlfYWRkcmVzcywgc2VjcmV0S2V5X2FkZHJlc3MpIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dChwbGFpbnRleHQsIG91dHB1dEZvcm1hdCk7XG5cdFx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHRcdF9mcmVlX2FuZF90aHJvd19lcnJvcihhZGRyZXNzX3Bvb2wpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gY3J5cHRvX2JveF9vcGVuX2Vhc3koY2lwaGVydGV4dCwgbm9uY2UsIHB1YmxpY0tleSwgc2VjcmV0S2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IGNpcGhlcnRleHQgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdGNpcGhlcnRleHQgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBjaXBoZXJ0ZXh0LCBcImNpcGhlcnRleHRcIik7XG5cdFx0dmFyIGNpcGhlcnRleHRfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MoY2lwaGVydGV4dCksXG5cdFx0ICAgIGNpcGhlcnRleHRfbGVuZ3RoID0gY2lwaGVydGV4dC5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goY2lwaGVydGV4dF9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBub25jZSAoYnVmKVxuXHRcdFxuXHRcdG5vbmNlID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgbm9uY2UsIFwibm9uY2VcIik7XG5cdFx0dmFyIG5vbmNlX2FkZHJlc3MsIG5vbmNlX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19ib3hfbm9uY2VieXRlcygpKSB8IDA7XG5cdFx0aWYgKG5vbmNlLmxlbmd0aCAhPT0gbm9uY2VfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBub25jZSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdG5vbmNlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKG5vbmNlKTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChub25jZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBwdWJsaWNLZXkgKGJ1Zilcblx0XHRcblx0XHRwdWJsaWNLZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBwdWJsaWNLZXksIFwicHVibGljS2V5XCIpO1xuXHRcdHZhciBwdWJsaWNLZXlfYWRkcmVzcywgcHVibGljS2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19ib3hfcHVibGlja2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSBwdWJsaWNLZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBwdWJsaWNLZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRwdWJsaWNLZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MocHVibGljS2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChwdWJsaWNLZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogc2VjcmV0S2V5IChidWYpXG5cdFx0XG5cdFx0c2VjcmV0S2V5ID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgc2VjcmV0S2V5LCBcInNlY3JldEtleVwiKTtcblx0XHR2YXIgc2VjcmV0S2V5X2FkZHJlc3MsIHNlY3JldEtleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYm94X3NlY3JldGtleWJ5dGVzKCkpIHwgMDtcblx0XHRpZiAoc2VjcmV0S2V5Lmxlbmd0aCAhPT0gc2VjcmV0S2V5X2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQgc2VjcmV0S2V5IGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0c2VjcmV0S2V5X2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKHNlY3JldEtleSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goc2VjcmV0S2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IHBsYWludGV4dCAoYnVmKVxuXHRcdFxuXHRcdHZhciBwbGFpbnRleHRfbGVuZ3RoID0gKGNpcGhlcnRleHRfbGVuZ3RoIC0gbGlic29kaXVtLl9jcnlwdG9fYm94X21hY2J5dGVzKCkpIHwgMCxcblx0XHQgICAgcGxhaW50ZXh0ID0gbmV3IEFsbG9jYXRlZEJ1ZihwbGFpbnRleHRfbGVuZ3RoKSxcblx0XHQgICAgcGxhaW50ZXh0X2FkZHJlc3MgPSBwbGFpbnRleHQuYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChwbGFpbnRleHRfYWRkcmVzcyk7XG5cdFx0XG5cdFx0aWYgKChsaWJzb2RpdW0uX2NyeXB0b19ib3hfb3Blbl9lYXN5KHBsYWludGV4dF9hZGRyZXNzLCBjaXBoZXJ0ZXh0X2FkZHJlc3MsIGNpcGhlcnRleHRfbGVuZ3RoLCAwLCBub25jZV9hZGRyZXNzLCBwdWJsaWNLZXlfYWRkcmVzcywgc2VjcmV0S2V5X2FkZHJlc3MpIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dChwbGFpbnRleHQsIG91dHB1dEZvcm1hdCk7XG5cdFx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHRcdF9mcmVlX2FuZF90aHJvd19lcnJvcihhZGRyZXNzX3Bvb2wpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gY3J5cHRvX2JveF9vcGVuX2Vhc3lfYWZ0ZXJubShjaXBoZXJ0ZXh0LCBub25jZSwgc2hhcmVkS2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IGNpcGhlcnRleHQgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdGNpcGhlcnRleHQgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBjaXBoZXJ0ZXh0LCBcImNpcGhlcnRleHRcIik7XG5cdFx0dmFyIGNpcGhlcnRleHRfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MoY2lwaGVydGV4dCksXG5cdFx0ICAgIGNpcGhlcnRleHRfbGVuZ3RoID0gY2lwaGVydGV4dC5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goY2lwaGVydGV4dF9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBub25jZSAoYnVmKVxuXHRcdFxuXHRcdG5vbmNlID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgbm9uY2UsIFwibm9uY2VcIik7XG5cdFx0dmFyIG5vbmNlX2FkZHJlc3MsIG5vbmNlX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19ib3hfbm9uY2VieXRlcygpKSB8IDA7XG5cdFx0aWYgKG5vbmNlLmxlbmd0aCAhPT0gbm9uY2VfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBub25jZSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdG5vbmNlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKG5vbmNlKTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChub25jZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBzaGFyZWRLZXkgKGJ1Zilcblx0XHRcblx0XHRzaGFyZWRLZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBzaGFyZWRLZXksIFwic2hhcmVkS2V5XCIpO1xuXHRcdHZhciBzaGFyZWRLZXlfYWRkcmVzcywgc2hhcmVkS2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19ib3hfYmVmb3Jlbm1ieXRlcygpKSB8IDA7XG5cdFx0aWYgKHNoYXJlZEtleS5sZW5ndGggIT09IHNoYXJlZEtleV9sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIHNoYXJlZEtleSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdHNoYXJlZEtleV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhzaGFyZWRLZXkpO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKHNoYXJlZEtleV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBwbGFpbnRleHQgKGJ1Zilcblx0XHRcblx0XHR2YXIgcGxhaW50ZXh0X2xlbmd0aCA9IChjaXBoZXJ0ZXh0X2xlbmd0aCAtIGxpYnNvZGl1bS5fY3J5cHRvX2JveF9tYWNieXRlcygpKSB8IDAsXG5cdFx0ICAgIHBsYWludGV4dCA9IG5ldyBBbGxvY2F0ZWRCdWYocGxhaW50ZXh0X2xlbmd0aCksXG5cdFx0ICAgIHBsYWludGV4dF9hZGRyZXNzID0gcGxhaW50ZXh0LmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocGxhaW50ZXh0X2FkZHJlc3MpO1xuXHRcdFxuXHRcdGlmICgobGlic29kaXVtLl9jcnlwdG9fYm94X29wZW5fZWFzeV9hZnRlcm5tKHBsYWludGV4dF9hZGRyZXNzLCBjaXBoZXJ0ZXh0X2FkZHJlc3MsIGNpcGhlcnRleHRfbGVuZ3RoLCAwLCBub25jZV9hZGRyZXNzLCBzaGFyZWRLZXlfYWRkcmVzcykgfCAwKSA9PT0gMCkge1xuXHRcdFx0dmFyIHJldCA9IF9mb3JtYXRfb3V0cHV0KHBsYWludGV4dCwgb3V0cHV0Rm9ybWF0KTtcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fYm94X3NlYWwobWVzc2FnZSwgcHVibGljS2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1lc3NhZ2UgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdG1lc3NhZ2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBtZXNzYWdlLCBcIm1lc3NhZ2VcIik7XG5cdFx0dmFyIG1lc3NhZ2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MobWVzc2FnZSksXG5cdFx0ICAgIG1lc3NhZ2VfbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBwdWJsaWNLZXkgKGJ1Zilcblx0XHRcblx0XHRwdWJsaWNLZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBwdWJsaWNLZXksIFwicHVibGljS2V5XCIpO1xuXHRcdHZhciBwdWJsaWNLZXlfYWRkcmVzcywgcHVibGljS2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19ib3hfcHVibGlja2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSBwdWJsaWNLZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBwdWJsaWNLZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRwdWJsaWNLZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MocHVibGljS2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChwdWJsaWNLZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgY2lwaGVydGV4dCAoYnVmKVxuXHRcdFxuXHRcdHZhciBjaXBoZXJ0ZXh0X2xlbmd0aCA9IChtZXNzYWdlX2xlbmd0aCArIGxpYnNvZGl1bS5fY3J5cHRvX2JveF9zZWFsYnl0ZXMoKSkgfCAwLFxuXHRcdCAgICBjaXBoZXJ0ZXh0ID0gbmV3IEFsbG9jYXRlZEJ1ZihjaXBoZXJ0ZXh0X2xlbmd0aCksXG5cdFx0ICAgIGNpcGhlcnRleHRfYWRkcmVzcyA9IGNpcGhlcnRleHQuYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChjaXBoZXJ0ZXh0X2FkZHJlc3MpO1xuXHRcdFxuXHRcdGlmICgobGlic29kaXVtLl9jcnlwdG9fYm94X3NlYWwoY2lwaGVydGV4dF9hZGRyZXNzLCBtZXNzYWdlX2FkZHJlc3MsIG1lc3NhZ2VfbGVuZ3RoLCAwLCBwdWJsaWNLZXlfYWRkcmVzcykgfCAwKSA9PT0gMCkge1xuXHRcdFx0dmFyIHJldCA9IF9mb3JtYXRfb3V0cHV0KGNpcGhlcnRleHQsIG91dHB1dEZvcm1hdCk7XG5cdFx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHRcdF9mcmVlX2FuZF90aHJvd19lcnJvcihhZGRyZXNzX3Bvb2wpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gY3J5cHRvX2JveF9zZWFsX29wZW4oY2lwaGVydGV4dCwgcHVibGljS2V5LCBzZWNyZXRLZXksIG91dHB1dEZvcm1hdCkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblx0XHRfY2hlY2tfb3V0cHV0X2Zvcm1hdChvdXRwdXRGb3JtYXQpO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogY2lwaGVydGV4dCAodW5zaXplZF9idWYpXG5cdFx0XG5cdFx0Y2lwaGVydGV4dCA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIGNpcGhlcnRleHQsIFwiY2lwaGVydGV4dFwiKTtcblx0XHR2YXIgY2lwaGVydGV4dF9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhjaXBoZXJ0ZXh0KSxcblx0XHQgICAgY2lwaGVydGV4dF9sZW5ndGggPSBjaXBoZXJ0ZXh0Lmxlbmd0aDtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChjaXBoZXJ0ZXh0X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHB1YmxpY0tleSAoYnVmKVxuXHRcdFxuXHRcdHB1YmxpY0tleSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHB1YmxpY0tleSwgXCJwdWJsaWNLZXlcIik7XG5cdFx0dmFyIHB1YmxpY0tleV9hZGRyZXNzLCBwdWJsaWNLZXlfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX2JveF9wdWJsaWNrZXlieXRlcygpKSB8IDA7XG5cdFx0aWYgKHB1YmxpY0tleS5sZW5ndGggIT09IHB1YmxpY0tleV9sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIHB1YmxpY0tleSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdHB1YmxpY0tleV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhwdWJsaWNLZXkpO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKHB1YmxpY0tleV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBzZWNyZXRLZXkgKGJ1Zilcblx0XHRcblx0XHRzZWNyZXRLZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBzZWNyZXRLZXksIFwic2VjcmV0S2V5XCIpO1xuXHRcdHZhciBzZWNyZXRLZXlfYWRkcmVzcywgc2VjcmV0S2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19ib3hfc2VjcmV0a2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChzZWNyZXRLZXkubGVuZ3RoICE9PSBzZWNyZXRLZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBzZWNyZXRLZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRzZWNyZXRLZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moc2VjcmV0S2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChzZWNyZXRLZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgcGxhaW50ZXh0IChidWYpXG5cdFx0XG5cdFx0dmFyIHBsYWludGV4dF9sZW5ndGggPSAoY2lwaGVydGV4dF9sZW5ndGggLSBsaWJzb2RpdW0uX2NyeXB0b19ib3hfc2VhbGJ5dGVzKCkpIHwgMCxcblx0XHQgICAgcGxhaW50ZXh0ID0gbmV3IEFsbG9jYXRlZEJ1ZihwbGFpbnRleHRfbGVuZ3RoKSxcblx0XHQgICAgcGxhaW50ZXh0X2FkZHJlc3MgPSBwbGFpbnRleHQuYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChwbGFpbnRleHRfYWRkcmVzcyk7XG5cdFx0XG5cdFx0aWYgKChsaWJzb2RpdW0uX2NyeXB0b19ib3hfc2VhbF9vcGVuKHBsYWludGV4dF9hZGRyZXNzLCBjaXBoZXJ0ZXh0X2FkZHJlc3MsIGNpcGhlcnRleHRfbGVuZ3RoLCAwLCBwdWJsaWNLZXlfYWRkcmVzcywgc2VjcmV0S2V5X2FkZHJlc3MpIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dChwbGFpbnRleHQsIG91dHB1dEZvcm1hdCk7XG5cdFx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHRcdF9mcmVlX2FuZF90aHJvd19lcnJvcihhZGRyZXNzX3Bvb2wpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gY3J5cHRvX2JveF9zZWVkX2tleXBhaXIoc2VlZCwgb3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXHRcdF9jaGVja19vdXRwdXRfZm9ybWF0KG91dHB1dEZvcm1hdCk7XG5cblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBzZWVkIChidWYpXG5cdFx0XG5cdFx0c2VlZCA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHNlZWQsIFwic2VlZFwiKTtcblx0XHR2YXIgc2VlZF9hZGRyZXNzLCBzZWVkX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19ib3hfc2VlZGJ5dGVzKCkpIHwgMDtcblx0XHRpZiAoc2VlZC5sZW5ndGggIT09IHNlZWRfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBzZWVkIGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0c2VlZF9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhzZWVkKTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChzZWVkX2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IHB1YmxpY0tleSAoYnVmKVxuXHRcdFxuXHRcdHZhciBwdWJsaWNLZXlfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX2JveF9wdWJsaWNrZXlieXRlcygpKSB8IDAsXG5cdFx0ICAgIHB1YmxpY0tleSA9IG5ldyBBbGxvY2F0ZWRCdWYocHVibGljS2V5X2xlbmd0aCksXG5cdFx0ICAgIHB1YmxpY0tleV9hZGRyZXNzID0gcHVibGljS2V5LmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocHVibGljS2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IHByaXZhdGVLZXkgKGJ1Zilcblx0XHRcblx0XHR2YXIgcHJpdmF0ZUtleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fYm94X3NlY3JldGtleWJ5dGVzKCkpIHwgMCxcblx0XHQgICAgcHJpdmF0ZUtleSA9IG5ldyBBbGxvY2F0ZWRCdWYocHJpdmF0ZUtleV9sZW5ndGgpLFxuXHRcdCAgICBwcml2YXRlS2V5X2FkZHJlc3MgPSBwcml2YXRlS2V5LmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocHJpdmF0ZUtleV9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX2JveF9zZWVkX2tleXBhaXIocHVibGljS2V5X2FkZHJlc3MsIHByaXZhdGVLZXlfYWRkcmVzcywgc2VlZF9hZGRyZXNzKSB8IDApID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gX2Zvcm1hdF9vdXRwdXQoe3B1YmxpY0tleTogcHVibGljS2V5LCBwcml2YXRlS2V5OiBwcml2YXRlS2V5fSwgb3V0cHV0Rm9ybWF0KTtcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fZ2VuZXJpY2hhc2goaGFzaF9sZW5ndGgsIG1lc3NhZ2UsIGtleSwgb3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXHRcdF9jaGVja19vdXRwdXRfZm9ybWF0KG91dHB1dEZvcm1hdCk7XG5cblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBoYXNoX2xlbmd0aCAodWludClcblx0XHRcblx0XHRfcmVxdWlyZV9kZWZpbmVkKGFkZHJlc3NfcG9vbCwgaGFzaF9sZW5ndGgsIFwiaGFzaF9sZW5ndGhcIik7XG5cdFx0XG5cdFx0aWYgKCEodHlwZW9mIGhhc2hfbGVuZ3RoID09PSBcIm51bWJlclwiICYmIChoYXNoX2xlbmd0aCB8IDApID09PSBoYXNoX2xlbmd0aCkgJiYgKGhhc2hfbGVuZ3RoIHwgMCkgPiAwKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaGFzaF9sZW5ndGggbXVzdCBiZSBhbiB1bnNpZ25lZCBpbnRlZ2VyXCIpO1xuXHRcdH1cblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBtZXNzYWdlICh1bnNpemVkX2J1Zilcblx0XHRcblx0XHRtZXNzYWdlID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgbWVzc2FnZSwgXCJtZXNzYWdlXCIpO1xuXHRcdHZhciBtZXNzYWdlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKG1lc3NhZ2UpLFxuXHRcdCAgICBtZXNzYWdlX2xlbmd0aCA9IG1lc3NhZ2UubGVuZ3RoO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKG1lc3NhZ2VfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDoga2V5ICh1bnNpemVkX2J1Zl9vcHRpb25hbClcblx0XHRcblx0XHR2YXIga2V5X2FkZHJlc3MgPSBudWxsLCBrZXlfbGVuZ3RoID0gMDtcblx0XHRpZiAoa2V5ICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0a2V5ID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwga2V5LCBcImtleVwiKTtcblx0XHRcdGtleV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhrZXkpO1xuXHRcdFx0a2V5X2xlbmd0aCA9IGtleS5sZW5ndGg7XG5cdFx0XHRhZGRyZXNzX3Bvb2wucHVzaChrZXlfYWRkcmVzcyk7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IGhhc2ggKGJ1Zilcblx0XHRcblx0XHR2YXIgaGFzaF9sZW5ndGggPSAoaGFzaF9sZW5ndGgpIHwgMCxcblx0XHQgICAgaGFzaCA9IG5ldyBBbGxvY2F0ZWRCdWYoaGFzaF9sZW5ndGgpLFxuXHRcdCAgICBoYXNoX2FkZHJlc3MgPSBoYXNoLmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2goaGFzaF9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX2dlbmVyaWNoYXNoKGhhc2hfYWRkcmVzcywgaGFzaF9sZW5ndGgsIG1lc3NhZ2VfYWRkcmVzcywgbWVzc2FnZV9sZW5ndGgsIDAsIGtleV9hZGRyZXNzLCBrZXlfbGVuZ3RoKSB8IDApID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gX2Zvcm1hdF9vdXRwdXQoaGFzaCwgb3V0cHV0Rm9ybWF0KTtcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fZ2VuZXJpY2hhc2hfZmluYWwoc3RhdGVfYWRkcmVzcywgaGFzaF9sZW5ndGgsIG91dHB1dEZvcm1hdCkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblx0XHRfY2hlY2tfb3V0cHV0X2Zvcm1hdChvdXRwdXRGb3JtYXQpO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogc3RhdGVfYWRkcmVzcyAoZ2VuZXJpY2hhc2hfc3RhdGVfYWRkcmVzcylcblx0XHRcblx0XHRfcmVxdWlyZV9kZWZpbmVkKGFkZHJlc3NfcG9vbCwgc3RhdGVfYWRkcmVzcywgXCJzdGF0ZV9hZGRyZXNzXCIpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IGhhc2hfbGVuZ3RoICh1aW50KVxuXHRcdFxuXHRcdF9yZXF1aXJlX2RlZmluZWQoYWRkcmVzc19wb29sLCBoYXNoX2xlbmd0aCwgXCJoYXNoX2xlbmd0aFwiKTtcblx0XHRcblx0XHRpZiAoISh0eXBlb2YgaGFzaF9sZW5ndGggPT09IFwibnVtYmVyXCIgJiYgKGhhc2hfbGVuZ3RoIHwgMCkgPT09IGhhc2hfbGVuZ3RoKSAmJiAoaGFzaF9sZW5ndGggfCAwKSA+IDApIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJoYXNoX2xlbmd0aCBtdXN0IGJlIGFuIHVuc2lnbmVkIGludGVnZXJcIik7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IGhhc2ggKGJ1Zilcblx0XHRcblx0XHR2YXIgaGFzaF9sZW5ndGggPSAoaGFzaF9sZW5ndGgpIHwgMCxcblx0XHQgICAgaGFzaCA9IG5ldyBBbGxvY2F0ZWRCdWYoaGFzaF9sZW5ndGgpLFxuXHRcdCAgICBoYXNoX2FkZHJlc3MgPSBoYXNoLmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2goaGFzaF9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX2dlbmVyaWNoYXNoX2ZpbmFsKHN0YXRlX2FkZHJlc3MsIGhhc2hfYWRkcmVzcywgaGFzaF9sZW5ndGgpIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSAobGlic29kaXVtLl9mcmVlKHN0YXRlX2FkZHJlc3MpLCBfZm9ybWF0X291dHB1dChoYXNoLCBvdXRwdXRGb3JtYXQpKTtcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fZ2VuZXJpY2hhc2hfaW5pdChrZXksIGhhc2hfbGVuZ3RoLCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IGtleSAodW5zaXplZF9idWZfb3B0aW9uYWwpXG5cdFx0XG5cdFx0dmFyIGtleV9hZGRyZXNzID0gbnVsbCwga2V5X2xlbmd0aCA9IDA7XG5cdFx0aWYgKGtleSAhPSB1bmRlZmluZWQpIHtcblx0XHRcdGtleSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIGtleSwgXCJrZXlcIik7XG5cdFx0XHRrZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moa2V5KTtcblx0XHRcdGtleV9sZW5ndGggPSBrZXkubGVuZ3RoO1xuXHRcdFx0YWRkcmVzc19wb29sLnB1c2goa2V5X2FkZHJlc3MpO1xuXHRcdH1cblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBoYXNoX2xlbmd0aCAodWludClcblx0XHRcblx0XHRfcmVxdWlyZV9kZWZpbmVkKGFkZHJlc3NfcG9vbCwgaGFzaF9sZW5ndGgsIFwiaGFzaF9sZW5ndGhcIik7XG5cdFx0XG5cdFx0aWYgKCEodHlwZW9mIGhhc2hfbGVuZ3RoID09PSBcIm51bWJlclwiICYmIChoYXNoX2xlbmd0aCB8IDApID09PSBoYXNoX2xlbmd0aCkgJiYgKGhhc2hfbGVuZ3RoIHwgMCkgPiAwKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaGFzaF9sZW5ndGggbXVzdCBiZSBhbiB1bnNpZ25lZCBpbnRlZ2VyXCIpO1xuXHRcdH1cblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBzdGF0ZSAoZ2VuZXJpY2hhc2hfc3RhdGUpXG5cdFx0XG5cdFx0dmFyIHN0YXRlX2FkZHJlc3MgPSBuZXcgQWxsb2NhdGVkQnVmKDM1NykuYWRkcmVzcztcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX2dlbmVyaWNoYXNoX2luaXQoc3RhdGVfYWRkcmVzcywga2V5X2FkZHJlc3MsIGtleV9sZW5ndGgsIGhhc2hfbGVuZ3RoKSB8IDApID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gc3RhdGVfYWRkcmVzcztcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fZ2VuZXJpY2hhc2hfdXBkYXRlKHN0YXRlX2FkZHJlc3MsIG1lc3NhZ2VfY2h1bmssIG91dHB1dEZvcm1hdCkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblx0XHRfY2hlY2tfb3V0cHV0X2Zvcm1hdChvdXRwdXRGb3JtYXQpO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogc3RhdGVfYWRkcmVzcyAoZ2VuZXJpY2hhc2hfc3RhdGVfYWRkcmVzcylcblx0XHRcblx0XHRfcmVxdWlyZV9kZWZpbmVkKGFkZHJlc3NfcG9vbCwgc3RhdGVfYWRkcmVzcywgXCJzdGF0ZV9hZGRyZXNzXCIpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1lc3NhZ2VfY2h1bmsgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdG1lc3NhZ2VfY2h1bmsgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBtZXNzYWdlX2NodW5rLCBcIm1lc3NhZ2VfY2h1bmtcIik7XG5cdFx0dmFyIG1lc3NhZ2VfY2h1bmtfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MobWVzc2FnZV9jaHVuayksXG5cdFx0ICAgIG1lc3NhZ2VfY2h1bmtfbGVuZ3RoID0gbWVzc2FnZV9jaHVuay5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9jaHVua19hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX2dlbmVyaWNoYXNoX3VwZGF0ZShzdGF0ZV9hZGRyZXNzLCBtZXNzYWdlX2NodW5rX2FkZHJlc3MsIG1lc3NhZ2VfY2h1bmtfbGVuZ3RoKSB8IDApID09PSAwKSB7XG5cdFx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9faGFzaChtZXNzYWdlLCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1lc3NhZ2UgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdG1lc3NhZ2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBtZXNzYWdlLCBcIm1lc3NhZ2VcIik7XG5cdFx0dmFyIG1lc3NhZ2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MobWVzc2FnZSksXG5cdFx0ICAgIG1lc3NhZ2VfbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBoYXNoIChidWYpXG5cdFx0XG5cdFx0dmFyIGhhc2hfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX2hhc2hfYnl0ZXMoKSkgfCAwLFxuXHRcdCAgICBoYXNoID0gbmV3IEFsbG9jYXRlZEJ1ZihoYXNoX2xlbmd0aCksXG5cdFx0ICAgIGhhc2hfYWRkcmVzcyA9IGhhc2guYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChoYXNoX2FkZHJlc3MpO1xuXHRcdFxuXHRcdGlmICgobGlic29kaXVtLl9jcnlwdG9faGFzaChoYXNoX2FkZHJlc3MsIG1lc3NhZ2VfYWRkcmVzcywgbWVzc2FnZV9sZW5ndGgsIDApIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dChoYXNoLCBvdXRwdXRGb3JtYXQpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19oYXNoX3NoYTI1NihtZXNzYWdlLCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1lc3NhZ2UgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdG1lc3NhZ2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBtZXNzYWdlLCBcIm1lc3NhZ2VcIik7XG5cdFx0dmFyIG1lc3NhZ2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MobWVzc2FnZSksXG5cdFx0ICAgIG1lc3NhZ2VfbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBoYXNoIChidWYpXG5cdFx0XG5cdFx0dmFyIGhhc2hfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX2hhc2hfc2hhMjU2X2J5dGVzKCkpIHwgMCxcblx0XHQgICAgaGFzaCA9IG5ldyBBbGxvY2F0ZWRCdWYoaGFzaF9sZW5ndGgpLFxuXHRcdCAgICBoYXNoX2FkZHJlc3MgPSBoYXNoLmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2goaGFzaF9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX2hhc2hfc2hhMjU2KGhhc2hfYWRkcmVzcywgbWVzc2FnZV9hZGRyZXNzLCBtZXNzYWdlX2xlbmd0aCwgMCkgfCAwKSA9PT0gMCkge1xuXHRcdFx0dmFyIHJldCA9IF9mb3JtYXRfb3V0cHV0KGhhc2gsIG91dHB1dEZvcm1hdCk7XG5cdFx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHRcdF9mcmVlX2FuZF90aHJvd19lcnJvcihhZGRyZXNzX3Bvb2wpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gY3J5cHRvX2hhc2hfc2hhNTEyKG1lc3NhZ2UsIG91dHB1dEZvcm1hdCkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblx0XHRfY2hlY2tfb3V0cHV0X2Zvcm1hdChvdXRwdXRGb3JtYXQpO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogbWVzc2FnZSAodW5zaXplZF9idWYpXG5cdFx0XG5cdFx0bWVzc2FnZSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIG1lc3NhZ2UsIFwibWVzc2FnZVwiKTtcblx0XHR2YXIgbWVzc2FnZV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhtZXNzYWdlKSxcblx0XHQgICAgbWVzc2FnZV9sZW5ndGggPSBtZXNzYWdlLmxlbmd0aDtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChtZXNzYWdlX2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IGhhc2ggKGJ1Zilcblx0XHRcblx0XHR2YXIgaGFzaF9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9faGFzaF9zaGE1MTJfYnl0ZXMoKSkgfCAwLFxuXHRcdCAgICBoYXNoID0gbmV3IEFsbG9jYXRlZEJ1ZihoYXNoX2xlbmd0aCksXG5cdFx0ICAgIGhhc2hfYWRkcmVzcyA9IGhhc2guYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChoYXNoX2FkZHJlc3MpO1xuXHRcdFxuXHRcdGlmICgobGlic29kaXVtLl9jcnlwdG9faGFzaF9zaGE1MTIoaGFzaF9hZGRyZXNzLCBtZXNzYWdlX2FkZHJlc3MsIG1lc3NhZ2VfbGVuZ3RoLCAwKSB8IDApID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gX2Zvcm1hdF9vdXRwdXQoaGFzaCwgb3V0cHV0Rm9ybWF0KTtcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fb25ldGltZWF1dGgobWVzc2FnZSwga2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1lc3NhZ2UgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdG1lc3NhZ2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBtZXNzYWdlLCBcIm1lc3NhZ2VcIik7XG5cdFx0dmFyIG1lc3NhZ2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MobWVzc2FnZSksXG5cdFx0ICAgIG1lc3NhZ2VfbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBrZXkgKGJ1Zilcblx0XHRcblx0XHRrZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBrZXksIFwia2V5XCIpO1xuXHRcdHZhciBrZXlfYWRkcmVzcywga2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19vbmV0aW1lYXV0aF9rZXlieXRlcygpKSB8IDA7XG5cdFx0aWYgKGtleS5sZW5ndGggIT09IGtleV9sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIGtleSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdGtleV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhrZXkpO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKGtleV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBoYXNoIChidWYpXG5cdFx0XG5cdFx0dmFyIGhhc2hfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX29uZXRpbWVhdXRoX2J5dGVzKCkpIHwgMCxcblx0XHQgICAgaGFzaCA9IG5ldyBBbGxvY2F0ZWRCdWYoaGFzaF9sZW5ndGgpLFxuXHRcdCAgICBoYXNoX2FkZHJlc3MgPSBoYXNoLmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2goaGFzaF9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX29uZXRpbWVhdXRoKGhhc2hfYWRkcmVzcywgbWVzc2FnZV9hZGRyZXNzLCBtZXNzYWdlX2xlbmd0aCwgMCwga2V5X2FkZHJlc3MpIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dChoYXNoLCBvdXRwdXRGb3JtYXQpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19vbmV0aW1lYXV0aF9maW5hbChzdGF0ZV9hZGRyZXNzLCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHN0YXRlX2FkZHJlc3MgKG9uZXRpbWVhdXRoX3N0YXRlX2FkZHJlc3MpXG5cdFx0XG5cdFx0X3JlcXVpcmVfZGVmaW5lZChhZGRyZXNzX3Bvb2wsIHN0YXRlX2FkZHJlc3MsIFwic3RhdGVfYWRkcmVzc1wiKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBoYXNoIChidWYpXG5cdFx0XG5cdFx0dmFyIGhhc2hfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX29uZXRpbWVhdXRoX2J5dGVzKCkpIHwgMCxcblx0XHQgICAgaGFzaCA9IG5ldyBBbGxvY2F0ZWRCdWYoaGFzaF9sZW5ndGgpLFxuXHRcdCAgICBoYXNoX2FkZHJlc3MgPSBoYXNoLmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2goaGFzaF9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX29uZXRpbWVhdXRoX2ZpbmFsKHN0YXRlX2FkZHJlc3MsIGhhc2hfYWRkcmVzcykgfCAwKSA9PT0gMCkge1xuXHRcdFx0dmFyIHJldCA9IChsaWJzb2RpdW0uX2ZyZWUoc3RhdGVfYWRkcmVzcyksIF9mb3JtYXRfb3V0cHV0KGhhc2gsIG91dHB1dEZvcm1hdCkpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19vbmV0aW1lYXV0aF9pbml0KGtleSwgb3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXHRcdF9jaGVja19vdXRwdXRfZm9ybWF0KG91dHB1dEZvcm1hdCk7XG5cblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBrZXkgKHVuc2l6ZWRfYnVmX29wdGlvbmFsKVxuXHRcdFxuXHRcdHZhciBrZXlfYWRkcmVzcyA9IG51bGwsIGtleV9sZW5ndGggPSAwO1xuXHRcdGlmIChrZXkgIT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRrZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBrZXksIFwia2V5XCIpO1xuXHRcdFx0a2V5X2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKGtleSk7XG5cdFx0XHRrZXlfbGVuZ3RoID0ga2V5Lmxlbmd0aDtcblx0XHRcdGFkZHJlc3NfcG9vbC5wdXNoKGtleV9hZGRyZXNzKTtcblx0XHR9XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgc3RhdGUgKG9uZXRpbWVhdXRoX3N0YXRlKVxuXHRcdFxuXHRcdHZhciBzdGF0ZV9hZGRyZXNzID0gbmV3IEFsbG9jYXRlZEJ1ZigxNDQpLmFkZHJlc3M7XG5cdFx0XG5cdFx0aWYgKChsaWJzb2RpdW0uX2NyeXB0b19vbmV0aW1lYXV0aF9pbml0KHN0YXRlX2FkZHJlc3MsIGtleV9hZGRyZXNzKSB8IDApID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gc3RhdGVfYWRkcmVzcztcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fb25ldGltZWF1dGhfdXBkYXRlKHN0YXRlX2FkZHJlc3MsIG1lc3NhZ2VfY2h1bmssIG91dHB1dEZvcm1hdCkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblx0XHRfY2hlY2tfb3V0cHV0X2Zvcm1hdChvdXRwdXRGb3JtYXQpO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogc3RhdGVfYWRkcmVzcyAob25ldGltZWF1dGhfc3RhdGVfYWRkcmVzcylcblx0XHRcblx0XHRfcmVxdWlyZV9kZWZpbmVkKGFkZHJlc3NfcG9vbCwgc3RhdGVfYWRkcmVzcywgXCJzdGF0ZV9hZGRyZXNzXCIpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1lc3NhZ2VfY2h1bmsgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdG1lc3NhZ2VfY2h1bmsgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBtZXNzYWdlX2NodW5rLCBcIm1lc3NhZ2VfY2h1bmtcIik7XG5cdFx0dmFyIG1lc3NhZ2VfY2h1bmtfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MobWVzc2FnZV9jaHVuayksXG5cdFx0ICAgIG1lc3NhZ2VfY2h1bmtfbGVuZ3RoID0gbWVzc2FnZV9jaHVuay5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9jaHVua19hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX29uZXRpbWVhdXRoX3VwZGF0ZShzdGF0ZV9hZGRyZXNzLCBtZXNzYWdlX2NodW5rX2FkZHJlc3MsIG1lc3NhZ2VfY2h1bmtfbGVuZ3RoKSB8IDApID09PSAwKSB7XG5cdFx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5KGhhc2gsIG1lc3NhZ2UsIGtleSkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IGhhc2ggKGJ1Zilcblx0XHRcblx0XHRoYXNoID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgaGFzaCwgXCJoYXNoXCIpO1xuXHRcdHZhciBoYXNoX2FkZHJlc3MsIGhhc2hfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX29uZXRpbWVhdXRoX2J5dGVzKCkpIHwgMDtcblx0XHRpZiAoaGFzaC5sZW5ndGggIT09IGhhc2hfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBoYXNoIGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0aGFzaF9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhoYXNoKTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChoYXNoX2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1lc3NhZ2UgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdG1lc3NhZ2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBtZXNzYWdlLCBcIm1lc3NhZ2VcIik7XG5cdFx0dmFyIG1lc3NhZ2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MobWVzc2FnZSksXG5cdFx0ICAgIG1lc3NhZ2VfbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBrZXkgKGJ1Zilcblx0XHRcblx0XHRrZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBrZXksIFwia2V5XCIpO1xuXHRcdHZhciBrZXlfYWRkcmVzcywga2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19vbmV0aW1lYXV0aF9rZXlieXRlcygpKSB8IDA7XG5cdFx0aWYgKGtleS5sZW5ndGggIT09IGtleV9sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIGtleSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdGtleV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhrZXkpO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKGtleV9hZGRyZXNzKTtcblx0XHRcblx0XHR2YXIgcmVzdWx0ID0gbGlic29kaXVtLl9jcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5KGhhc2hfYWRkcmVzcywgbWVzc2FnZV9hZGRyZXNzLCBtZXNzYWdlX2xlbmd0aCwgMCwga2V5X2FkZHJlc3MpIHwgMDtcblx0XHR2YXIgcmV0ID0gKHJlc3VsdCA9PT0gMCk7XG5cdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0cmV0dXJuIHJldDtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTYocGFzc3dvcmQsIHNhbHQsIG9wc0xpbWl0LCBtZW1MaW1pdCwga2V5TGVuZ3RoLCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHBhc3N3b3JkICh1bnNpemVkX2J1Zilcblx0XHRcblx0XHRwYXNzd29yZCA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHBhc3N3b3JkLCBcInBhc3N3b3JkXCIpO1xuXHRcdHZhciBwYXNzd29yZF9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhwYXNzd29yZCksXG5cdFx0ICAgIHBhc3N3b3JkX2xlbmd0aCA9IHBhc3N3b3JkLmxlbmd0aDtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChwYXNzd29yZF9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBzYWx0IChidWYpXG5cdFx0XG5cdFx0c2FsdCA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHNhbHQsIFwic2FsdFwiKTtcblx0XHR2YXIgc2FsdF9hZGRyZXNzLCBzYWx0X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc2FsdGJ5dGVzKCkpIHwgMDtcblx0XHRpZiAoc2FsdC5sZW5ndGggIT09IHNhbHRfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBzYWx0IGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0c2FsdF9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhzYWx0KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChzYWx0X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG9wc0xpbWl0ICh1aW50KVxuXHRcdFxuXHRcdF9yZXF1aXJlX2RlZmluZWQoYWRkcmVzc19wb29sLCBvcHNMaW1pdCwgXCJvcHNMaW1pdFwiKTtcblx0XHRcblx0XHRpZiAoISh0eXBlb2Ygb3BzTGltaXQgPT09IFwibnVtYmVyXCIgJiYgKG9wc0xpbWl0IHwgMCkgPT09IG9wc0xpbWl0KSAmJiAob3BzTGltaXQgfCAwKSA+IDApIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJvcHNMaW1pdCBtdXN0IGJlIGFuIHVuc2lnbmVkIGludGVnZXJcIik7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1lbUxpbWl0ICh1aW50KVxuXHRcdFxuXHRcdF9yZXF1aXJlX2RlZmluZWQoYWRkcmVzc19wb29sLCBtZW1MaW1pdCwgXCJtZW1MaW1pdFwiKTtcblx0XHRcblx0XHRpZiAoISh0eXBlb2YgbWVtTGltaXQgPT09IFwibnVtYmVyXCIgJiYgKG1lbUxpbWl0IHwgMCkgPT09IG1lbUxpbWl0KSAmJiAobWVtTGltaXQgfCAwKSA+IDApIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJtZW1MaW1pdCBtdXN0IGJlIGFuIHVuc2lnbmVkIGludGVnZXJcIik7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IGtleUxlbmd0aCAodWludClcblx0XHRcblx0XHRfcmVxdWlyZV9kZWZpbmVkKGFkZHJlc3NfcG9vbCwga2V5TGVuZ3RoLCBcImtleUxlbmd0aFwiKTtcblx0XHRcblx0XHRpZiAoISh0eXBlb2Yga2V5TGVuZ3RoID09PSBcIm51bWJlclwiICYmIChrZXlMZW5ndGggfCAwKSA9PT0ga2V5TGVuZ3RoKSAmJiAoa2V5TGVuZ3RoIHwgMCkgPiAwKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwia2V5TGVuZ3RoIG11c3QgYmUgYW4gdW5zaWduZWQgaW50ZWdlclwiKTtcblx0XHR9XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgZGVyaXZlZEtleSAoYnVmKVxuXHRcdFxuXHRcdHZhciBkZXJpdmVkS2V5X2xlbmd0aCA9IChrZXlMZW5ndGgpIHwgMCxcblx0XHQgICAgZGVyaXZlZEtleSA9IG5ldyBBbGxvY2F0ZWRCdWYoZGVyaXZlZEtleV9sZW5ndGgpLFxuXHRcdCAgICBkZXJpdmVkS2V5X2FkZHJlc3MgPSBkZXJpdmVkS2V5LmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2goZGVyaXZlZEtleV9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1NihkZXJpdmVkS2V5X2FkZHJlc3MsIGtleUxlbmd0aCwgMCwgcGFzc3dvcmRfYWRkcmVzcywgcGFzc3dvcmRfbGVuZ3RoLCAwLCBzYWx0X2FkZHJlc3MsIG9wc0xpbWl0LCAwLCBtZW1MaW1pdCkgfCAwKSA9PT0gMCkge1xuXHRcdFx0dmFyIHJldCA9IF9mb3JtYXRfb3V0cHV0KGRlcml2ZWRLZXksIG91dHB1dEZvcm1hdCk7XG5cdFx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHRcdF9mcmVlX2FuZF90aHJvd19lcnJvcihhZGRyZXNzX3Bvb2wpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9sbChwYXNzd29yZCwgc2FsdCwgb3BzTGltaXQsIHIsIHAsIGtleUxlbmd0aCwgb3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXHRcdF9jaGVja19vdXRwdXRfZm9ybWF0KG91dHB1dEZvcm1hdCk7XG5cblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBwYXNzd29yZCAodW5zaXplZF9idWYpXG5cdFx0XG5cdFx0cGFzc3dvcmQgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBwYXNzd29yZCwgXCJwYXNzd29yZFwiKTtcblx0XHR2YXIgcGFzc3dvcmRfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MocGFzc3dvcmQpLFxuXHRcdCAgICBwYXNzd29yZF9sZW5ndGggPSBwYXNzd29yZC5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocGFzc3dvcmRfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogc2FsdCAodW5zaXplZF9idWYpXG5cdFx0XG5cdFx0c2FsdCA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHNhbHQsIFwic2FsdFwiKTtcblx0XHR2YXIgc2FsdF9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhzYWx0KSxcblx0XHQgICAgc2FsdF9sZW5ndGggPSBzYWx0Lmxlbmd0aDtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChzYWx0X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG9wc0xpbWl0ICh1aW50KVxuXHRcdFxuXHRcdF9yZXF1aXJlX2RlZmluZWQoYWRkcmVzc19wb29sLCBvcHNMaW1pdCwgXCJvcHNMaW1pdFwiKTtcblx0XHRcblx0XHRpZiAoISh0eXBlb2Ygb3BzTGltaXQgPT09IFwibnVtYmVyXCIgJiYgKG9wc0xpbWl0IHwgMCkgPT09IG9wc0xpbWl0KSAmJiAob3BzTGltaXQgfCAwKSA+IDApIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJvcHNMaW1pdCBtdXN0IGJlIGFuIHVuc2lnbmVkIGludGVnZXJcIik7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHIgKHVpbnQpXG5cdFx0XG5cdFx0X3JlcXVpcmVfZGVmaW5lZChhZGRyZXNzX3Bvb2wsIHIsIFwiclwiKTtcblx0XHRcblx0XHRpZiAoISh0eXBlb2YgciA9PT0gXCJudW1iZXJcIiAmJiAociB8IDApID09PSByKSAmJiAociB8IDApID4gMCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcInIgbXVzdCBiZSBhbiB1bnNpZ25lZCBpbnRlZ2VyXCIpO1xuXHRcdH1cblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBwICh1aW50KVxuXHRcdFxuXHRcdF9yZXF1aXJlX2RlZmluZWQoYWRkcmVzc19wb29sLCBwLCBcInBcIik7XG5cdFx0XG5cdFx0aWYgKCEodHlwZW9mIHAgPT09IFwibnVtYmVyXCIgJiYgKHAgfCAwKSA9PT0gcCkgJiYgKHAgfCAwKSA+IDApIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJwIG11c3QgYmUgYW4gdW5zaWduZWQgaW50ZWdlclwiKTtcblx0XHR9XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDoga2V5TGVuZ3RoICh1aW50KVxuXHRcdFxuXHRcdF9yZXF1aXJlX2RlZmluZWQoYWRkcmVzc19wb29sLCBrZXlMZW5ndGgsIFwia2V5TGVuZ3RoXCIpO1xuXHRcdFxuXHRcdGlmICghKHR5cGVvZiBrZXlMZW5ndGggPT09IFwibnVtYmVyXCIgJiYgKGtleUxlbmd0aCB8IDApID09PSBrZXlMZW5ndGgpICYmIChrZXlMZW5ndGggfCAwKSA+IDApIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJrZXlMZW5ndGggbXVzdCBiZSBhbiB1bnNpZ25lZCBpbnRlZ2VyXCIpO1xuXHRcdH1cblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBkZXJpdmVkS2V5IChidWYpXG5cdFx0XG5cdFx0dmFyIGRlcml2ZWRLZXlfbGVuZ3RoID0gKGtleUxlbmd0aCkgfCAwLFxuXHRcdCAgICBkZXJpdmVkS2V5ID0gbmV3IEFsbG9jYXRlZEJ1ZihkZXJpdmVkS2V5X2xlbmd0aCksXG5cdFx0ICAgIGRlcml2ZWRLZXlfYWRkcmVzcyA9IGRlcml2ZWRLZXkuYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChkZXJpdmVkS2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdGlmICgobGlic29kaXVtLl9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X2xsKHBhc3N3b3JkX2FkZHJlc3MsIHBhc3N3b3JkX2xlbmd0aCwgc2FsdF9hZGRyZXNzLCBzYWx0X2xlbmd0aCwgb3BzTGltaXQsIDAsIHIsIHAsIGRlcml2ZWRLZXlfYWRkcmVzcywga2V5TGVuZ3RoKSB8IDApID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gX2Zvcm1hdF9vdXRwdXQoZGVyaXZlZEtleSwgb3V0cHV0Rm9ybWF0KTtcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cihwYXNzd29yZCwgb3BzTGltaXQsIG1lbUxpbWl0LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHBhc3N3b3JkICh1bnNpemVkX2J1Zilcblx0XHRcblx0XHRwYXNzd29yZCA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHBhc3N3b3JkLCBcInBhc3N3b3JkXCIpO1xuXHRcdHZhciBwYXNzd29yZF9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhwYXNzd29yZCksXG5cdFx0ICAgIHBhc3N3b3JkX2xlbmd0aCA9IHBhc3N3b3JkLmxlbmd0aDtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChwYXNzd29yZF9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBvcHNMaW1pdCAodWludClcblx0XHRcblx0XHRfcmVxdWlyZV9kZWZpbmVkKGFkZHJlc3NfcG9vbCwgb3BzTGltaXQsIFwib3BzTGltaXRcIik7XG5cdFx0XG5cdFx0aWYgKCEodHlwZW9mIG9wc0xpbWl0ID09PSBcIm51bWJlclwiICYmIChvcHNMaW1pdCB8IDApID09PSBvcHNMaW1pdCkgJiYgKG9wc0xpbWl0IHwgMCkgPiAwKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwib3BzTGltaXQgbXVzdCBiZSBhbiB1bnNpZ25lZCBpbnRlZ2VyXCIpO1xuXHRcdH1cblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBtZW1MaW1pdCAodWludClcblx0XHRcblx0XHRfcmVxdWlyZV9kZWZpbmVkKGFkZHJlc3NfcG9vbCwgbWVtTGltaXQsIFwibWVtTGltaXRcIik7XG5cdFx0XG5cdFx0aWYgKCEodHlwZW9mIG1lbUxpbWl0ID09PSBcIm51bWJlclwiICYmIChtZW1MaW1pdCB8IDApID09PSBtZW1MaW1pdCkgJiYgKG1lbUxpbWl0IHwgMCkgPiAwKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwibWVtTGltaXQgbXVzdCBiZSBhbiB1bnNpZ25lZCBpbnRlZ2VyXCIpO1xuXHRcdH1cblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBoYXNoZWRfcGFzc3dvcmQgKGJ1Zilcblx0XHRcblx0XHR2YXIgaGFzaGVkX3Bhc3N3b3JkX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyYnl0ZXMoKSkgfCAwLFxuXHRcdCAgICBoYXNoZWRfcGFzc3dvcmQgPSBuZXcgQWxsb2NhdGVkQnVmKGhhc2hlZF9wYXNzd29yZF9sZW5ndGgpLFxuXHRcdCAgICBoYXNoZWRfcGFzc3dvcmRfYWRkcmVzcyA9IGhhc2hlZF9wYXNzd29yZC5hZGRyZXNzO1xuXHRcdFxuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKGhhc2hlZF9wYXNzd29yZF9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHIoaGFzaGVkX3Bhc3N3b3JkX2FkZHJlc3MsIHBhc3N3b3JkX2FkZHJlc3MsIHBhc3N3b3JkX2xlbmd0aCwgMCwgb3BzTGltaXQsIDAsIG1lbUxpbWl0KSB8IDApID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gbGlic29kaXVtLlBvaW50ZXJfc3RyaW5naWZ5KGhhc2hlZF9wYXNzd29yZF9hZGRyZXNzKTtcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cl92ZXJpZnkoaGFzaGVkX3Bhc3N3b3JkLCBwYXNzd29yZCwgb3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXHRcdF9jaGVja19vdXRwdXRfZm9ybWF0KG91dHB1dEZvcm1hdCk7XG5cblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBoYXNoZWRfcGFzc3dvcmQgKHN0cmluZylcblx0XHRcblx0XHRoYXNoZWRfcGFzc3dvcmQgPSBmcm9tX3N0cmluZyhoYXNoZWRfcGFzc3dvcmQgKyBcIlxcMFwiKTtcblx0XHR2YXIgaGFzaGVkX3Bhc3N3b3JkX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKGhhc2hlZF9wYXNzd29yZCksXG5cdFx0ICAgIGhhc2hlZF9wYXNzd29yZF9sZW5ndGggPSBoYXNoZWRfcGFzc3dvcmQubGVuZ3RoIC0gMTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChoYXNoZWRfcGFzc3dvcmRfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogcGFzc3dvcmQgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdHBhc3N3b3JkID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgcGFzc3dvcmQsIFwicGFzc3dvcmRcIik7XG5cdFx0dmFyIHBhc3N3b3JkX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKHBhc3N3b3JkKSxcblx0XHQgICAgcGFzc3dvcmRfbGVuZ3RoID0gcGFzc3dvcmQubGVuZ3RoO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKHBhc3N3b3JkX2FkZHJlc3MpO1xuXHRcdFxuXHRcdHZhciByZXN1bHQgPSBsaWJzb2RpdW0uX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyX3ZlcmlmeShoYXNoZWRfcGFzc3dvcmRfYWRkcmVzcywgcGFzc3dvcmRfYWRkcmVzcywgcGFzc3dvcmRfbGVuZ3RoLCAwKSB8IDA7XG5cdFx0dmFyIHJldCA9IChyZXN1bHQgPT09IDApO1xuXHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdHJldHVybiByZXQ7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fc2NhbGFybXVsdChwcml2YXRlS2V5LCBwdWJsaWNLZXksIG91dHB1dEZvcm1hdCkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblx0XHRfY2hlY2tfb3V0cHV0X2Zvcm1hdChvdXRwdXRGb3JtYXQpO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogcHJpdmF0ZUtleSAoYnVmKVxuXHRcdFxuXHRcdHByaXZhdGVLZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBwcml2YXRlS2V5LCBcInByaXZhdGVLZXlcIik7XG5cdFx0dmFyIHByaXZhdGVLZXlfYWRkcmVzcywgcHJpdmF0ZUtleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fc2NhbGFybXVsdF9zY2FsYXJieXRlcygpKSB8IDA7XG5cdFx0aWYgKHByaXZhdGVLZXkubGVuZ3RoICE9PSBwcml2YXRlS2V5X2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQgcHJpdmF0ZUtleSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdHByaXZhdGVLZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MocHJpdmF0ZUtleSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocHJpdmF0ZUtleV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBwdWJsaWNLZXkgKGJ1Zilcblx0XHRcblx0XHRwdWJsaWNLZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBwdWJsaWNLZXksIFwicHVibGljS2V5XCIpO1xuXHRcdHZhciBwdWJsaWNLZXlfYWRkcmVzcywgcHVibGljS2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zY2FsYXJtdWx0X3NjYWxhcmJ5dGVzKCkpIHwgMDtcblx0XHRpZiAocHVibGljS2V5Lmxlbmd0aCAhPT0gcHVibGljS2V5X2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQgcHVibGljS2V5IGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0cHVibGljS2V5X2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKHB1YmxpY0tleSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocHVibGljS2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IHNoYXJlZFNlY3JldCAoYnVmKVxuXHRcdFxuXHRcdHZhciBzaGFyZWRTZWNyZXRfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX3NjYWxhcm11bHRfYnl0ZXMoKSkgfCAwLFxuXHRcdCAgICBzaGFyZWRTZWNyZXQgPSBuZXcgQWxsb2NhdGVkQnVmKHNoYXJlZFNlY3JldF9sZW5ndGgpLFxuXHRcdCAgICBzaGFyZWRTZWNyZXRfYWRkcmVzcyA9IHNoYXJlZFNlY3JldC5hZGRyZXNzO1xuXHRcdFxuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKHNoYXJlZFNlY3JldF9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX3NjYWxhcm11bHQoc2hhcmVkU2VjcmV0X2FkZHJlc3MsIHByaXZhdGVLZXlfYWRkcmVzcywgcHVibGljS2V5X2FkZHJlc3MpIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dChzaGFyZWRTZWNyZXQsIG91dHB1dEZvcm1hdCk7XG5cdFx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHRcdF9mcmVlX2FuZF90aHJvd19lcnJvcihhZGRyZXNzX3Bvb2wpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gY3J5cHRvX3NjYWxhcm11bHRfYmFzZShwcml2YXRlS2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHByaXZhdGVLZXkgKGJ1Zilcblx0XHRcblx0XHRwcml2YXRlS2V5ID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgcHJpdmF0ZUtleSwgXCJwcml2YXRlS2V5XCIpO1xuXHRcdHZhciBwcml2YXRlS2V5X2FkZHJlc3MsIHByaXZhdGVLZXlfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX3NjYWxhcm11bHRfc2NhbGFyYnl0ZXMoKSkgfCAwO1xuXHRcdGlmIChwcml2YXRlS2V5Lmxlbmd0aCAhPT0gcHJpdmF0ZUtleV9sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIHByaXZhdGVLZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRwcml2YXRlS2V5X2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKHByaXZhdGVLZXkpO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKHByaXZhdGVLZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgcHVibGljS2V5IChidWYpXG5cdFx0XG5cdFx0dmFyIHB1YmxpY0tleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fc2NhbGFybXVsdF9zY2FsYXJieXRlcygpKSB8IDAsXG5cdFx0ICAgIHB1YmxpY0tleSA9IG5ldyBBbGxvY2F0ZWRCdWYocHVibGljS2V5X2xlbmd0aCksXG5cdFx0ICAgIHB1YmxpY0tleV9hZGRyZXNzID0gcHVibGljS2V5LmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocHVibGljS2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdGlmICgobGlic29kaXVtLl9jcnlwdG9fc2NhbGFybXVsdF9iYXNlKHB1YmxpY0tleV9hZGRyZXNzLCBwcml2YXRlS2V5X2FkZHJlc3MpIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dChwdWJsaWNLZXksIG91dHB1dEZvcm1hdCk7XG5cdFx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHRcdF9mcmVlX2FuZF90aHJvd19lcnJvcihhZGRyZXNzX3Bvb2wpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gY3J5cHRvX3NlY3JldGJveF9kZXRhY2hlZChtZXNzYWdlLCBub25jZSwga2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1lc3NhZ2UgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdG1lc3NhZ2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBtZXNzYWdlLCBcIm1lc3NhZ2VcIik7XG5cdFx0dmFyIG1lc3NhZ2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MobWVzc2FnZSksXG5cdFx0ICAgIG1lc3NhZ2VfbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBub25jZSAoYnVmKVxuXHRcdFxuXHRcdG5vbmNlID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgbm9uY2UsIFwibm9uY2VcIik7XG5cdFx0dmFyIG5vbmNlX2FkZHJlc3MsIG5vbmNlX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zZWNyZXRib3hfbm9uY2VieXRlcygpKSB8IDA7XG5cdFx0aWYgKG5vbmNlLmxlbmd0aCAhPT0gbm9uY2VfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBub25jZSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdG5vbmNlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKG5vbmNlKTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChub25jZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBrZXkgKGJ1Zilcblx0XHRcblx0XHRrZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBrZXksIFwia2V5XCIpO1xuXHRcdHZhciBrZXlfYWRkcmVzcywga2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zZWNyZXRib3hfa2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChrZXkubGVuZ3RoICE9PSBrZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBrZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRrZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moa2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChrZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgY2lwaGVyIChidWYpXG5cdFx0XG5cdFx0dmFyIGNpcGhlcl9sZW5ndGggPSAobWVzc2FnZV9sZW5ndGgpIHwgMCxcblx0XHQgICAgY2lwaGVyID0gbmV3IEFsbG9jYXRlZEJ1ZihjaXBoZXJfbGVuZ3RoKSxcblx0XHQgICAgY2lwaGVyX2FkZHJlc3MgPSBjaXBoZXIuYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChjaXBoZXJfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgbWFjIChidWYpXG5cdFx0XG5cdFx0dmFyIG1hY19sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fc2VjcmV0Ym94X21hY2J5dGVzKCkpIHwgMCxcblx0XHQgICAgbWFjID0gbmV3IEFsbG9jYXRlZEJ1ZihtYWNfbGVuZ3RoKSxcblx0XHQgICAgbWFjX2FkZHJlc3MgPSBtYWMuYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChtYWNfYWRkcmVzcyk7XG5cdFx0XG5cdFx0aWYgKChsaWJzb2RpdW0uX2NyeXB0b19zZWNyZXRib3hfZGV0YWNoZWQoY2lwaGVyX2FkZHJlc3MsIG1hY19hZGRyZXNzLCBtZXNzYWdlX2FkZHJlc3MsIG1lc3NhZ2VfbGVuZ3RoLCAwLCBub25jZV9hZGRyZXNzLCBrZXlfYWRkcmVzcykgfCAwKSA9PT0gMCkge1xuXHRcdFx0dmFyIHJldCA9IF9mb3JtYXRfb3V0cHV0KHttYWM6IG1hYywgY2lwaGVyOiBjaXBoZXJ9LCBvdXRwdXRGb3JtYXQpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19zZWNyZXRib3hfZWFzeShtZXNzYWdlLCBub25jZSwga2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1lc3NhZ2UgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdG1lc3NhZ2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBtZXNzYWdlLCBcIm1lc3NhZ2VcIik7XG5cdFx0dmFyIG1lc3NhZ2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MobWVzc2FnZSksXG5cdFx0ICAgIG1lc3NhZ2VfbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBub25jZSAoYnVmKVxuXHRcdFxuXHRcdG5vbmNlID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgbm9uY2UsIFwibm9uY2VcIik7XG5cdFx0dmFyIG5vbmNlX2FkZHJlc3MsIG5vbmNlX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zZWNyZXRib3hfbm9uY2VieXRlcygpKSB8IDA7XG5cdFx0aWYgKG5vbmNlLmxlbmd0aCAhPT0gbm9uY2VfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBub25jZSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdG5vbmNlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKG5vbmNlKTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChub25jZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBrZXkgKGJ1Zilcblx0XHRcblx0XHRrZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBrZXksIFwia2V5XCIpO1xuXHRcdHZhciBrZXlfYWRkcmVzcywga2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zZWNyZXRib3hfa2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChrZXkubGVuZ3RoICE9PSBrZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBrZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRrZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moa2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChrZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgY2lwaGVyIChidWYpXG5cdFx0XG5cdFx0dmFyIGNpcGhlcl9sZW5ndGggPSAobWVzc2FnZV9sZW5ndGggKyBsaWJzb2RpdW0uX2NyeXB0b19zZWNyZXRib3hfbWFjYnl0ZXMoKSkgfCAwLFxuXHRcdCAgICBjaXBoZXIgPSBuZXcgQWxsb2NhdGVkQnVmKGNpcGhlcl9sZW5ndGgpLFxuXHRcdCAgICBjaXBoZXJfYWRkcmVzcyA9IGNpcGhlci5hZGRyZXNzO1xuXHRcdFxuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKGNpcGhlcl9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX3NlY3JldGJveF9lYXN5KGNpcGhlcl9hZGRyZXNzLCBtZXNzYWdlX2FkZHJlc3MsIG1lc3NhZ2VfbGVuZ3RoLCAwLCBub25jZV9hZGRyZXNzLCBrZXlfYWRkcmVzcykgfCAwKSA9PT0gMCkge1xuXHRcdFx0dmFyIHJldCA9IF9mb3JtYXRfb3V0cHV0KGNpcGhlciwgb3V0cHV0Rm9ybWF0KTtcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fc2VjcmV0Ym94X29wZW5fZGV0YWNoZWQoY2lwaGVydGV4dCwgbWFjLCBub25jZSwga2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IGNpcGhlcnRleHQgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdGNpcGhlcnRleHQgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBjaXBoZXJ0ZXh0LCBcImNpcGhlcnRleHRcIik7XG5cdFx0dmFyIGNpcGhlcnRleHRfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MoY2lwaGVydGV4dCksXG5cdFx0ICAgIGNpcGhlcnRleHRfbGVuZ3RoID0gY2lwaGVydGV4dC5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goY2lwaGVydGV4dF9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBtYWMgKGJ1Zilcblx0XHRcblx0XHRtYWMgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBtYWMsIFwibWFjXCIpO1xuXHRcdHZhciBtYWNfYWRkcmVzcywgbWFjX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zZWNyZXRib3hfbWFjYnl0ZXMoKSkgfCAwO1xuXHRcdGlmIChtYWMubGVuZ3RoICE9PSBtYWNfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBtYWMgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRtYWNfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MobWFjKTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChtYWNfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogbm9uY2UgKGJ1Zilcblx0XHRcblx0XHRub25jZSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIG5vbmNlLCBcIm5vbmNlXCIpO1xuXHRcdHZhciBub25jZV9hZGRyZXNzLCBub25jZV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fc2VjcmV0Ym94X25vbmNlYnl0ZXMoKSkgfCAwO1xuXHRcdGlmIChub25jZS5sZW5ndGggIT09IG5vbmNlX2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQgbm9uY2UgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRub25jZV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhub25jZSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobm9uY2VfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDoga2V5IChidWYpXG5cdFx0XG5cdFx0a2V5ID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwga2V5LCBcImtleVwiKTtcblx0XHR2YXIga2V5X2FkZHJlc3MsIGtleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fc2VjcmV0Ym94X2tleWJ5dGVzKCkpIHwgMDtcblx0XHRpZiAoa2V5Lmxlbmd0aCAhPT0ga2V5X2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQga2V5IGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0a2V5X2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKGtleSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goa2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IG1lc3NhZ2UgKGJ1Zilcblx0XHRcblx0XHR2YXIgbWVzc2FnZV9sZW5ndGggPSAoY2lwaGVydGV4dF9sZW5ndGgpIHwgMCxcblx0XHQgICAgbWVzc2FnZSA9IG5ldyBBbGxvY2F0ZWRCdWYobWVzc2FnZV9sZW5ndGgpLFxuXHRcdCAgICBtZXNzYWdlX2FkZHJlc3MgPSBtZXNzYWdlLmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX3NlY3JldGJveF9vcGVuX2RldGFjaGVkKG1lc3NhZ2VfYWRkcmVzcywgY2lwaGVydGV4dF9hZGRyZXNzLCBtYWNfYWRkcmVzcywgY2lwaGVydGV4dF9sZW5ndGgsIDAsIG5vbmNlX2FkZHJlc3MsIGtleV9hZGRyZXNzKSB8IDApID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gX2Zvcm1hdF9vdXRwdXQobWVzc2FnZSwgb3V0cHV0Rm9ybWF0KTtcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fc2VjcmV0Ym94X29wZW5fZWFzeShjaXBoZXJ0ZXh0LCBub25jZSwga2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IGNpcGhlcnRleHQgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdGNpcGhlcnRleHQgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBjaXBoZXJ0ZXh0LCBcImNpcGhlcnRleHRcIik7XG5cdFx0dmFyIGNpcGhlcnRleHRfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MoY2lwaGVydGV4dCksXG5cdFx0ICAgIGNpcGhlcnRleHRfbGVuZ3RoID0gY2lwaGVydGV4dC5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goY2lwaGVydGV4dF9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBub25jZSAoYnVmKVxuXHRcdFxuXHRcdG5vbmNlID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgbm9uY2UsIFwibm9uY2VcIik7XG5cdFx0dmFyIG5vbmNlX2FkZHJlc3MsIG5vbmNlX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zZWNyZXRib3hfbm9uY2VieXRlcygpKSB8IDA7XG5cdFx0aWYgKG5vbmNlLmxlbmd0aCAhPT0gbm9uY2VfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBub25jZSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdG5vbmNlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKG5vbmNlKTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChub25jZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBrZXkgKGJ1Zilcblx0XHRcblx0XHRrZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBrZXksIFwia2V5XCIpO1xuXHRcdHZhciBrZXlfYWRkcmVzcywga2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zZWNyZXRib3hfa2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChrZXkubGVuZ3RoICE9PSBrZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBrZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRrZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moa2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChrZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgbWVzc2FnZSAoYnVmKVxuXHRcdFxuXHRcdHZhciBtZXNzYWdlX2xlbmd0aCA9IChjaXBoZXJ0ZXh0X2xlbmd0aCAtIGxpYnNvZGl1bS5fY3J5cHRvX3NlY3JldGJveF9tYWNieXRlcygpKSB8IDAsXG5cdFx0ICAgIG1lc3NhZ2UgPSBuZXcgQWxsb2NhdGVkQnVmKG1lc3NhZ2VfbGVuZ3RoKSxcblx0XHQgICAgbWVzc2FnZV9hZGRyZXNzID0gbWVzc2FnZS5hZGRyZXNzO1xuXHRcdFxuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKG1lc3NhZ2VfYWRkcmVzcyk7XG5cdFx0XG5cdFx0aWYgKChsaWJzb2RpdW0uX2NyeXB0b19zZWNyZXRib3hfb3Blbl9lYXN5KG1lc3NhZ2VfYWRkcmVzcywgY2lwaGVydGV4dF9hZGRyZXNzLCBjaXBoZXJ0ZXh0X2xlbmd0aCwgMCwgbm9uY2VfYWRkcmVzcywga2V5X2FkZHJlc3MpIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dChtZXNzYWdlLCBvdXRwdXRGb3JtYXQpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19zaG9ydGhhc2gobWVzc2FnZSwga2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IG1lc3NhZ2UgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdG1lc3NhZ2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBtZXNzYWdlLCBcIm1lc3NhZ2VcIik7XG5cdFx0dmFyIG1lc3NhZ2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MobWVzc2FnZSksXG5cdFx0ICAgIG1lc3NhZ2VfbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBrZXkgKGJ1Zilcblx0XHRcblx0XHRrZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBrZXksIFwia2V5XCIpO1xuXHRcdHZhciBrZXlfYWRkcmVzcywga2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zaG9ydGhhc2hfa2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChrZXkubGVuZ3RoICE9PSBrZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBrZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRrZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moa2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChrZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgaGFzaCAoYnVmKVxuXHRcdFxuXHRcdHZhciBoYXNoX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zaG9ydGhhc2hfYnl0ZXMoKSkgfCAwLFxuXHRcdCAgICBoYXNoID0gbmV3IEFsbG9jYXRlZEJ1ZihoYXNoX2xlbmd0aCksXG5cdFx0ICAgIGhhc2hfYWRkcmVzcyA9IGhhc2guYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChoYXNoX2FkZHJlc3MpO1xuXHRcdFxuXHRcdGlmICgobGlic29kaXVtLl9jcnlwdG9fc2hvcnRoYXNoKGhhc2hfYWRkcmVzcywgbWVzc2FnZV9hZGRyZXNzLCBtZXNzYWdlX2xlbmd0aCwgMCwga2V5X2FkZHJlc3MpIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dChoYXNoLCBvdXRwdXRGb3JtYXQpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19zaWduKG1lc3NhZ2UsIHByaXZhdGVLZXksIG91dHB1dEZvcm1hdCkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblx0XHRfY2hlY2tfb3V0cHV0X2Zvcm1hdChvdXRwdXRGb3JtYXQpO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogbWVzc2FnZSAodW5zaXplZF9idWYpXG5cdFx0XG5cdFx0bWVzc2FnZSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIG1lc3NhZ2UsIFwibWVzc2FnZVwiKTtcblx0XHR2YXIgbWVzc2FnZV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhtZXNzYWdlKSxcblx0XHQgICAgbWVzc2FnZV9sZW5ndGggPSBtZXNzYWdlLmxlbmd0aDtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChtZXNzYWdlX2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHByaXZhdGVLZXkgKGJ1Zilcblx0XHRcblx0XHRwcml2YXRlS2V5ID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgcHJpdmF0ZUtleSwgXCJwcml2YXRlS2V5XCIpO1xuXHRcdHZhciBwcml2YXRlS2V5X2FkZHJlc3MsIHByaXZhdGVLZXlfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX3NpZ25fc2VjcmV0a2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChwcml2YXRlS2V5Lmxlbmd0aCAhPT0gcHJpdmF0ZUtleV9sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIHByaXZhdGVLZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRwcml2YXRlS2V5X2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKHByaXZhdGVLZXkpO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKHByaXZhdGVLZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgc2lnbmF0dXJlIChidWYpXG5cdFx0XG5cdFx0dmFyIHNpZ25hdHVyZV9sZW5ndGggPSAobWVzc2FnZS5sZW5ndGggKyBsaWJzb2RpdW0uX2NyeXB0b19zaWduX2J5dGVzKCkpIHwgMCxcblx0XHQgICAgc2lnbmF0dXJlID0gbmV3IEFsbG9jYXRlZEJ1ZihzaWduYXR1cmVfbGVuZ3RoKSxcblx0XHQgICAgc2lnbmF0dXJlX2FkZHJlc3MgPSBzaWduYXR1cmUuYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChzaWduYXR1cmVfYWRkcmVzcyk7XG5cdFx0XG5cdFx0aWYgKChsaWJzb2RpdW0uX2NyeXB0b19zaWduKHNpZ25hdHVyZV9hZGRyZXNzLCBudWxsLCBtZXNzYWdlX2FkZHJlc3MsIG1lc3NhZ2VfbGVuZ3RoLCAwLCBwcml2YXRlS2V5X2FkZHJlc3MpIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dChzaWduYXR1cmUsIG91dHB1dEZvcm1hdCk7XG5cdFx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHRcdF9mcmVlX2FuZF90aHJvd19lcnJvcihhZGRyZXNzX3Bvb2wpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gY3J5cHRvX3NpZ25fZGV0YWNoZWQobWVzc2FnZSwgcHJpdmF0ZUtleSwgb3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXHRcdF9jaGVja19vdXRwdXRfZm9ybWF0KG91dHB1dEZvcm1hdCk7XG5cblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBtZXNzYWdlICh1bnNpemVkX2J1Zilcblx0XHRcblx0XHRtZXNzYWdlID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgbWVzc2FnZSwgXCJtZXNzYWdlXCIpO1xuXHRcdHZhciBtZXNzYWdlX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKG1lc3NhZ2UpLFxuXHRcdCAgICBtZXNzYWdlX2xlbmd0aCA9IG1lc3NhZ2UubGVuZ3RoO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKG1lc3NhZ2VfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogcHJpdmF0ZUtleSAoYnVmKVxuXHRcdFxuXHRcdHByaXZhdGVLZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBwcml2YXRlS2V5LCBcInByaXZhdGVLZXlcIik7XG5cdFx0dmFyIHByaXZhdGVLZXlfYWRkcmVzcywgcHJpdmF0ZUtleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fc2lnbl9zZWNyZXRrZXlieXRlcygpKSB8IDA7XG5cdFx0aWYgKHByaXZhdGVLZXkubGVuZ3RoICE9PSBwcml2YXRlS2V5X2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQgcHJpdmF0ZUtleSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdHByaXZhdGVLZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MocHJpdmF0ZUtleSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocHJpdmF0ZUtleV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBzaWduYXR1cmUgKGJ1Zilcblx0XHRcblx0XHR2YXIgc2lnbmF0dXJlX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zaWduX2J5dGVzKCkpIHwgMCxcblx0XHQgICAgc2lnbmF0dXJlID0gbmV3IEFsbG9jYXRlZEJ1ZihzaWduYXR1cmVfbGVuZ3RoKSxcblx0XHQgICAgc2lnbmF0dXJlX2FkZHJlc3MgPSBzaWduYXR1cmUuYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChzaWduYXR1cmVfYWRkcmVzcyk7XG5cdFx0XG5cdFx0aWYgKChsaWJzb2RpdW0uX2NyeXB0b19zaWduX2RldGFjaGVkKHNpZ25hdHVyZV9hZGRyZXNzLCBudWxsLCBtZXNzYWdlX2FkZHJlc3MsIG1lc3NhZ2VfbGVuZ3RoLCAwLCBwcml2YXRlS2V5X2FkZHJlc3MpIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dChzaWduYXR1cmUsIG91dHB1dEZvcm1hdCk7XG5cdFx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHRcdF9mcmVlX2FuZF90aHJvd19lcnJvcihhZGRyZXNzX3Bvb2wpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gY3J5cHRvX3NpZ25fZWQyNTUxOV9wa190b19jdXJ2ZTI1NTE5KGVkUGssIG91dHB1dEZvcm1hdCkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblx0XHRfY2hlY2tfb3V0cHV0X2Zvcm1hdChvdXRwdXRGb3JtYXQpO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogZWRQayAoYnVmKVxuXHRcdFxuXHRcdGVkUGsgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBlZFBrLCBcImVkUGtcIik7XG5cdFx0dmFyIGVkUGtfYWRkcmVzcywgZWRQa19sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fc2lnbl9wdWJsaWNrZXlieXRlcygpKSB8IDA7XG5cdFx0aWYgKGVkUGsubGVuZ3RoICE9PSBlZFBrX2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQgZWRQayBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdGVkUGtfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MoZWRQayk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goZWRQa19hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBjUGsgKGJ1Zilcblx0XHRcblx0XHR2YXIgY1BrX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zY2FsYXJtdWx0X3NjYWxhcmJ5dGVzKCkpIHwgMCxcblx0XHQgICAgY1BrID0gbmV3IEFsbG9jYXRlZEJ1ZihjUGtfbGVuZ3RoKSxcblx0XHQgICAgY1BrX2FkZHJlc3MgPSBjUGsuYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChjUGtfYWRkcmVzcyk7XG5cdFx0XG5cdFx0aWYgKChsaWJzb2RpdW0uX2NyeXB0b19zaWduX2VkMjU1MTlfcGtfdG9fY3VydmUyNTUxOShjUGtfYWRkcmVzcywgZWRQa19hZGRyZXNzKSB8IDApID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gX2Zvcm1hdF9vdXRwdXQoY1BrLCBvdXRwdXRGb3JtYXQpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19zaWduX2VkMjU1MTlfc2tfdG9fY3VydmUyNTUxOShlZFNrLCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IGVkU2sgKGJ1Zilcblx0XHRcblx0XHRlZFNrID0gX2FueV90b19VaW50OEFycmF5KGFkZHJlc3NfcG9vbCwgZWRTaywgXCJlZFNrXCIpO1xuXHRcdHZhciBlZFNrX2FkZHJlc3MsIGVkU2tfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX3NpZ25fc2VjcmV0a2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChlZFNrLmxlbmd0aCAhPT0gZWRTa19sZW5ndGgpIHtcblx0XHRcdF9mcmVlX2FuZF90aHJvd190eXBlX2Vycm9yKGFkZHJlc3NfcG9vbCwgXCJpbnZhbGlkIGVkU2sgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRlZFNrX2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKGVkU2spO1xuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKGVkU2tfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgY1NrIChidWYpXG5cdFx0XG5cdFx0dmFyIGNTa19sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fc2NhbGFybXVsdF9zY2FsYXJieXRlcygpKSB8IDAsXG5cdFx0ICAgIGNTayA9IG5ldyBBbGxvY2F0ZWRCdWYoY1NrX2xlbmd0aCksXG5cdFx0ICAgIGNTa19hZGRyZXNzID0gY1NrLmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2goY1NrX2FkZHJlc3MpO1xuXHRcdFxuXHRcdGlmICgobGlic29kaXVtLl9jcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX2N1cnZlMjU1MTkoY1NrX2FkZHJlc3MsIGVkU2tfYWRkcmVzcykgfCAwKSA9PT0gMCkge1xuXHRcdFx0dmFyIHJldCA9IF9mb3JtYXRfb3V0cHV0KGNTaywgb3V0cHV0Rm9ybWF0KTtcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX3BrKHByaXZhdGVLZXksIG91dHB1dEZvcm1hdCkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblx0XHRfY2hlY2tfb3V0cHV0X2Zvcm1hdChvdXRwdXRGb3JtYXQpO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogcHJpdmF0ZUtleSAoYnVmKVxuXHRcdFxuXHRcdHByaXZhdGVLZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBwcml2YXRlS2V5LCBcInByaXZhdGVLZXlcIik7XG5cdFx0dmFyIHByaXZhdGVLZXlfYWRkcmVzcywgcHJpdmF0ZUtleV9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fc2lnbl9zZWNyZXRrZXlieXRlcygpKSB8IDA7XG5cdFx0aWYgKHByaXZhdGVLZXkubGVuZ3RoICE9PSBwcml2YXRlS2V5X2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQgcHJpdmF0ZUtleSBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdHByaXZhdGVLZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MocHJpdmF0ZUtleSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocHJpdmF0ZUtleV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBwdWJsaWNLZXkgKGJ1Zilcblx0XHRcblx0XHR2YXIgcHVibGljS2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zaWduX3B1YmxpY2tleWJ5dGVzKCkpIHwgMCxcblx0XHQgICAgcHVibGljS2V5ID0gbmV3IEFsbG9jYXRlZEJ1ZihwdWJsaWNLZXlfbGVuZ3RoKSxcblx0XHQgICAgcHVibGljS2V5X2FkZHJlc3MgPSBwdWJsaWNLZXkuYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChwdWJsaWNLZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0aWYgKChsaWJzb2RpdW0uX2NyeXB0b19zaWduX2VkMjU1MTlfc2tfdG9fcGsocHVibGljS2V5X2FkZHJlc3MsIHByaXZhdGVLZXlfYWRkcmVzcykgfCAwKSA9PT0gMCkge1xuXHRcdFx0dmFyIHJldCA9IF9mb3JtYXRfb3V0cHV0KHB1YmxpY0tleSwgb3V0cHV0Rm9ybWF0KTtcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX3NlZWQocHJpdmF0ZUtleSwgb3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXHRcdF9jaGVja19vdXRwdXRfZm9ybWF0KG91dHB1dEZvcm1hdCk7XG5cblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBwcml2YXRlS2V5IChidWYpXG5cdFx0XG5cdFx0cHJpdmF0ZUtleSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHByaXZhdGVLZXksIFwicHJpdmF0ZUtleVwiKTtcblx0XHR2YXIgcHJpdmF0ZUtleV9hZGRyZXNzLCBwcml2YXRlS2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zaWduX3NlY3JldGtleWJ5dGVzKCkpIHwgMDtcblx0XHRpZiAocHJpdmF0ZUtleS5sZW5ndGggIT09IHByaXZhdGVLZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBwcml2YXRlS2V5IGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0cHJpdmF0ZUtleV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhwcml2YXRlS2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChwcml2YXRlS2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IHNlZWQgKGJ1Zilcblx0XHRcblx0XHR2YXIgc2VlZF9sZW5ndGggPSAobGlic29kaXVtLl9jcnlwdG9fc2lnbl9zZWVkYnl0ZXMoKSkgfCAwLFxuXHRcdCAgICBzZWVkID0gbmV3IEFsbG9jYXRlZEJ1ZihzZWVkX2xlbmd0aCksXG5cdFx0ICAgIHNlZWRfYWRkcmVzcyA9IHNlZWQuYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChzZWVkX2FkZHJlc3MpO1xuXHRcdFxuXHRcdGlmICgobGlic29kaXVtLl9jcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX3NlZWQoc2VlZF9hZGRyZXNzLCBwcml2YXRlS2V5X2FkZHJlc3MpIHwgMCkgPT09IDApIHtcblx0XHRcdHZhciByZXQgPSBfZm9ybWF0X291dHB1dChzZWVkLCBvdXRwdXRGb3JtYXQpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19zaWduX2tleXBhaXIob3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXHRcdF9jaGVja19vdXRwdXRfZm9ybWF0KG91dHB1dEZvcm1hdCk7XG5cblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBwdWJsaWNLZXkgKGJ1Zilcblx0XHRcblx0XHR2YXIgcHVibGljS2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zaWduX3B1YmxpY2tleWJ5dGVzKCkpIHwgMCxcblx0XHQgICAgcHVibGljS2V5ID0gbmV3IEFsbG9jYXRlZEJ1ZihwdWJsaWNLZXlfbGVuZ3RoKSxcblx0XHQgICAgcHVibGljS2V5X2FkZHJlc3MgPSBwdWJsaWNLZXkuYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChwdWJsaWNLZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgcHJpdmF0ZUtleSAoYnVmKVxuXHRcdFxuXHRcdHZhciBwcml2YXRlS2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zaWduX3NlY3JldGtleWJ5dGVzKCkpIHwgMCxcblx0XHQgICAgcHJpdmF0ZUtleSA9IG5ldyBBbGxvY2F0ZWRCdWYocHJpdmF0ZUtleV9sZW5ndGgpLFxuXHRcdCAgICBwcml2YXRlS2V5X2FkZHJlc3MgPSBwcml2YXRlS2V5LmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocHJpdmF0ZUtleV9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX3NpZ25fa2V5cGFpcihwdWJsaWNLZXlfYWRkcmVzcywgcHJpdmF0ZUtleV9hZGRyZXNzKSB8IDApID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gX2Zvcm1hdF9vdXRwdXQoe3B1YmxpY0tleTogcHVibGljS2V5LCBwcml2YXRlS2V5OiBwcml2YXRlS2V5LCBrZXlUeXBlOiAnZWQyNTUxOSd9LCBvdXRwdXRGb3JtYXQpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19zaWduX29wZW4oc2lnbmVkTWVzc2FnZSwgcHVibGljS2V5LCBvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHNpZ25lZE1lc3NhZ2UgKHVuc2l6ZWRfYnVmKVxuXHRcdFxuXHRcdHNpZ25lZE1lc3NhZ2UgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBzaWduZWRNZXNzYWdlLCBcInNpZ25lZE1lc3NhZ2VcIik7XG5cdFx0dmFyIHNpZ25lZE1lc3NhZ2VfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moc2lnbmVkTWVzc2FnZSksXG5cdFx0ICAgIHNpZ25lZE1lc3NhZ2VfbGVuZ3RoID0gc2lnbmVkTWVzc2FnZS5sZW5ndGg7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goc2lnbmVkTWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBwdWJsaWNLZXkgKGJ1Zilcblx0XHRcblx0XHRwdWJsaWNLZXkgPSBfYW55X3RvX1VpbnQ4QXJyYXkoYWRkcmVzc19wb29sLCBwdWJsaWNLZXksIFwicHVibGljS2V5XCIpO1xuXHRcdHZhciBwdWJsaWNLZXlfYWRkcmVzcywgcHVibGljS2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zaWduX3B1YmxpY2tleWJ5dGVzKCkpIHwgMDtcblx0XHRpZiAocHVibGljS2V5Lmxlbmd0aCAhPT0gcHVibGljS2V5X2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQgcHVibGljS2V5IGxlbmd0aFwiKTtcblx0XHR9XG5cdFx0cHVibGljS2V5X2FkZHJlc3MgPSBfdG9fYWxsb2NhdGVkX2J1Zl9hZGRyZXNzKHB1YmxpY0tleSk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocHVibGljS2V5X2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IG1lc3NhZ2UgKGJ1Zilcblx0XHRcblx0XHR2YXIgbWVzc2FnZV9sZW5ndGggPSAoc2lnbmVkTWVzc2FnZV9sZW5ndGggLSBsaWJzb2RpdW0uX2NyeXB0b19zaWduX2J5dGVzKCkpIHwgMCxcblx0XHQgICAgbWVzc2FnZSA9IG5ldyBBbGxvY2F0ZWRCdWYobWVzc2FnZV9sZW5ndGgpLFxuXHRcdCAgICBtZXNzYWdlX2FkZHJlc3MgPSBtZXNzYWdlLmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2gobWVzc2FnZV9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX3NpZ25fb3BlbihtZXNzYWdlX2FkZHJlc3MsIG51bGwsIHNpZ25lZE1lc3NhZ2VfYWRkcmVzcywgc2lnbmVkTWVzc2FnZV9sZW5ndGgsIDAsIHB1YmxpY0tleV9hZGRyZXNzKSB8IDApID09PSAwKSB7XG5cdFx0XHR2YXIgcmV0ID0gX2Zvcm1hdF9vdXRwdXQobWVzc2FnZSwgb3V0cHV0Rm9ybWF0KTtcblx0XHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0X2ZyZWVfYW5kX3Rocm93X2Vycm9yKGFkZHJlc3NfcG9vbCk7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiBjcnlwdG9fc2lnbl9zZWVkX2tleXBhaXIoc2VlZCwgb3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXHRcdF9jaGVja19vdXRwdXRfZm9ybWF0KG91dHB1dEZvcm1hdCk7XG5cblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBzZWVkIChidWYpXG5cdFx0XG5cdFx0c2VlZCA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHNlZWQsIFwic2VlZFwiKTtcblx0XHR2YXIgc2VlZF9hZGRyZXNzLCBzZWVkX2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zaWduX3NlZWRieXRlcygpKSB8IDA7XG5cdFx0aWYgKHNlZWQubGVuZ3RoICE9PSBzZWVkX2xlbmd0aCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImludmFsaWQgc2VlZCBsZW5ndGhcIik7XG5cdFx0fVxuXHRcdHNlZWRfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moc2VlZCk7XG5cdFx0YWRkcmVzc19wb29sLnB1c2goc2VlZF9hZGRyZXNzKTtcblx0XHRcblx0XHQvLyAtLS0tLS0tLS0tIG91dHB1dCBwdWJsaWNLZXkgKGJ1Zilcblx0XHRcblx0XHR2YXIgcHVibGljS2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zaWduX3B1YmxpY2tleWJ5dGVzKCkpIHwgMCxcblx0XHQgICAgcHVibGljS2V5ID0gbmV3IEFsbG9jYXRlZEJ1ZihwdWJsaWNLZXlfbGVuZ3RoKSxcblx0XHQgICAgcHVibGljS2V5X2FkZHJlc3MgPSBwdWJsaWNLZXkuYWRkcmVzcztcblx0XHRcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChwdWJsaWNLZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBvdXRwdXQgcHJpdmF0ZUtleSAoYnVmKVxuXHRcdFxuXHRcdHZhciBwcml2YXRlS2V5X2xlbmd0aCA9IChsaWJzb2RpdW0uX2NyeXB0b19zaWduX3NlY3JldGtleWJ5dGVzKCkpIHwgMCxcblx0XHQgICAgcHJpdmF0ZUtleSA9IG5ldyBBbGxvY2F0ZWRCdWYocHJpdmF0ZUtleV9sZW5ndGgpLFxuXHRcdCAgICBwcml2YXRlS2V5X2FkZHJlc3MgPSBwcml2YXRlS2V5LmFkZHJlc3M7XG5cdFx0XG5cdFx0YWRkcmVzc19wb29sLnB1c2gocHJpdmF0ZUtleV9hZGRyZXNzKTtcblx0XHRcblx0XHRpZiAoKGxpYnNvZGl1bS5fY3J5cHRvX3NpZ25fc2VlZF9rZXlwYWlyKHB1YmxpY0tleV9hZGRyZXNzLCBwcml2YXRlS2V5X2FkZHJlc3MsIHNlZWRfYWRkcmVzcykgfCAwKSA9PT0gMCkge1xuXHRcdFx0dmFyIHJldCA9IF9mb3JtYXRfb3V0cHV0KHtwdWJsaWNLZXk6IHB1YmxpY0tleSwgcHJpdmF0ZUtleTogcHJpdmF0ZUtleSwga2V5VHlwZTogXCJlZDI1NTE5XCJ9LCBvdXRwdXRGb3JtYXQpO1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0XHRfZnJlZV9hbmRfdGhyb3dfZXJyb3IoYWRkcmVzc19wb29sKTtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIGNyeXB0b19zaWduX3ZlcmlmeV9kZXRhY2hlZChzaWduYXR1cmUsIG1lc3NhZ2UsIHB1YmxpY0tleSkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHNpZ25hdHVyZSAoYnVmKVxuXHRcdFxuXHRcdHNpZ25hdHVyZSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHNpZ25hdHVyZSwgXCJzaWduYXR1cmVcIik7XG5cdFx0dmFyIHNpZ25hdHVyZV9hZGRyZXNzLCBzaWduYXR1cmVfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX3NpZ25fYnl0ZXMoKSkgfCAwO1xuXHRcdGlmIChzaWduYXR1cmUubGVuZ3RoICE9PSBzaWduYXR1cmVfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBzaWduYXR1cmUgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRzaWduYXR1cmVfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3Moc2lnbmF0dXJlKTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChzaWduYXR1cmVfYWRkcmVzcyk7XG5cdFx0XG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogbWVzc2FnZSAodW5zaXplZF9idWYpXG5cdFx0XG5cdFx0bWVzc2FnZSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIG1lc3NhZ2UsIFwibWVzc2FnZVwiKTtcblx0XHR2YXIgbWVzc2FnZV9hZGRyZXNzID0gX3RvX2FsbG9jYXRlZF9idWZfYWRkcmVzcyhtZXNzYWdlKSxcblx0XHQgICAgbWVzc2FnZV9sZW5ndGggPSBtZXNzYWdlLmxlbmd0aDtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChtZXNzYWdlX2FkZHJlc3MpO1xuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gaW5wdXQ6IHB1YmxpY0tleSAoYnVmKVxuXHRcdFxuXHRcdHB1YmxpY0tleSA9IF9hbnlfdG9fVWludDhBcnJheShhZGRyZXNzX3Bvb2wsIHB1YmxpY0tleSwgXCJwdWJsaWNLZXlcIik7XG5cdFx0dmFyIHB1YmxpY0tleV9hZGRyZXNzLCBwdWJsaWNLZXlfbGVuZ3RoID0gKGxpYnNvZGl1bS5fY3J5cHRvX3NpZ25fcHVibGlja2V5Ynl0ZXMoKSkgfCAwO1xuXHRcdGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSBwdWJsaWNLZXlfbGVuZ3RoKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwiaW52YWxpZCBwdWJsaWNLZXkgbGVuZ3RoXCIpO1xuXHRcdH1cblx0XHRwdWJsaWNLZXlfYWRkcmVzcyA9IF90b19hbGxvY2F0ZWRfYnVmX2FkZHJlc3MocHVibGljS2V5KTtcblx0XHRhZGRyZXNzX3Bvb2wucHVzaChwdWJsaWNLZXlfYWRkcmVzcyk7XG5cdFx0XG5cdFx0dmFyIHZlcmlmaWNhdGlvblJlc3VsdCA9IGxpYnNvZGl1bS5fY3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkKHNpZ25hdHVyZV9hZGRyZXNzLCBtZXNzYWdlX2FkZHJlc3MsIG1lc3NhZ2VfbGVuZ3RoLCAwLCBwdWJsaWNLZXlfYWRkcmVzcykgfCAwO1xuXHRcdHZhciByZXQgPSAodmVyaWZpY2F0aW9uUmVzdWx0ID09PSAwKTtcblx0XHRfZnJlZV9hbGwoYWRkcmVzc19wb29sKTtcblx0XHRyZXR1cm4gcmV0O1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gcmFuZG9tYnl0ZXNfYnVmKGxlbmd0aCwgb3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXHRcdF9jaGVja19vdXRwdXRfZm9ybWF0KG91dHB1dEZvcm1hdCk7XG5cblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiBsZW5ndGggKHVpbnQpXG5cdFx0XG5cdFx0X3JlcXVpcmVfZGVmaW5lZChhZGRyZXNzX3Bvb2wsIGxlbmd0aCwgXCJsZW5ndGhcIik7XG5cdFx0XG5cdFx0aWYgKCEodHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiAobGVuZ3RoIHwgMCkgPT09IGxlbmd0aCkgJiYgKGxlbmd0aCB8IDApID4gMCkge1xuXHRcdFx0X2ZyZWVfYW5kX3Rocm93X3R5cGVfZXJyb3IoYWRkcmVzc19wb29sLCBcImxlbmd0aCBtdXN0IGJlIGFuIHVuc2lnbmVkIGludGVnZXJcIik7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIC0tLS0tLS0tLS0gb3V0cHV0IG91dHB1dCAoYnVmKVxuXHRcdFxuXHRcdHZhciBvdXRwdXRfbGVuZ3RoID0gKGxlbmd0aCkgfCAwLFxuXHRcdCAgICBvdXRwdXQgPSBuZXcgQWxsb2NhdGVkQnVmKG91dHB1dF9sZW5ndGgpLFxuXHRcdCAgICBvdXRwdXRfYWRkcmVzcyA9IG91dHB1dC5hZGRyZXNzO1xuXHRcdFxuXHRcdGFkZHJlc3NfcG9vbC5wdXNoKG91dHB1dF9hZGRyZXNzKTtcblx0XHRcblx0XHRsaWJzb2RpdW0uX3JhbmRvbWJ5dGVzX2J1ZihvdXRwdXRfYWRkcmVzcywgbGVuZ3RoKTtcblx0XHR2YXIgcmV0ID0gKF9mb3JtYXRfb3V0cHV0KG91dHB1dCwgb3V0cHV0Rm9ybWF0KSk7XG5cdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0cmV0dXJuIHJldDtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIHJhbmRvbWJ5dGVzX2Nsb3NlKG91dHB1dEZvcm1hdCkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblx0XHRfY2hlY2tfb3V0cHV0X2Zvcm1hdChvdXRwdXRGb3JtYXQpO1xuXG5cdFx0bGlic29kaXVtLl9yYW5kb21ieXRlc19jbG9zZSgpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gcmFuZG9tYnl0ZXNfcmFuZG9tKG91dHB1dEZvcm1hdCkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblx0XHRfY2hlY2tfb3V0cHV0X2Zvcm1hdChvdXRwdXRGb3JtYXQpO1xuXG5cdFx0dmFyIHJhbmRvbV92YWx1ZSA9IGxpYnNvZGl1bS5fcmFuZG9tYnl0ZXNfcmFuZG9tKCkgPj4+IDA7XG5cdFx0dmFyIHJldCA9IChyYW5kb21fdmFsdWUpO1xuXHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdHJldHVybiByZXQ7XG5cdFx0XG5cdH1cblxuXHRmdW5jdGlvbiByYW5kb21ieXRlc19zZXRfaW1wbGVtZW50YXRpb24oaW1wbGVtZW50YXRpb24sIG91dHB1dEZvcm1hdCkge1xuXHRcdHZhciBhZGRyZXNzX3Bvb2wgPSBbXTtcblx0XHRfY2hlY2tfb3V0cHV0X2Zvcm1hdChvdXRwdXRGb3JtYXQpO1xuXG5cdFx0Ly8gLS0tLS0tLS0tLSBpbnB1dDogaW1wbGVtZW50YXRpb24gKHJhbmRvbWJ5dGVzX2ltcGxlbWVudGF0aW9uKVxuXHRcdFxuXHRcdHZhciBpbXBsZW1lbnRhdGlvbl9hZGRyZXNzID0gbGlic29kaXVtLl9tYWxsb2MoNiAqIDQpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG5cdFx0XHRsaWJzb2RpdW0uc2V0VmFsdWUoaW1wbGVtZW50YXRpb25fYWRkcmVzcyArIGkgKiA0LFxuXHRcdFx0ICAgIGxpYnNvZGl1bS5SdW50aW1lLmFkZEZ1bmN0aW9uKGltcGxlbWVudGF0aW9uXG5cdFx0XHQgICAgW1tcImltcGxlbWVudGF0aW9uX25hbWVcIiwgXCJyYW5kb21cIiwgXCJzdGlyXCIsIFwidW5pZm9ybVwiLCBcImJ1ZlwiLCBcImNsb3NlXCJdW2ldXSksXG5cdFx0XHQgICAgXCJpMzJcIik7XG5cdFx0fVxuXHRcdFxuXHRcdGlmICgobGlic29kaXVtLl9yYW5kb21ieXRlc19zZXRfaW1wbGVtZW50YXRpb24oaW1wbGVtZW50YXRpb25fYWRkcmVzcykgfCAwKSA9PT0gMCkge1xuXHRcdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdF9mcmVlX2FuZF90aHJvd19lcnJvcihhZGRyZXNzX3Bvb2wpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gcmFuZG9tYnl0ZXNfc3RpcihvdXRwdXRGb3JtYXQpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cdFx0X2NoZWNrX291dHB1dF9mb3JtYXQob3V0cHV0Rm9ybWF0KTtcblxuXHRcdGxpYnNvZGl1bS5fcmFuZG9tYnl0ZXNfc3RpcigpO1xuXHRcdFxuXHR9XG5cblx0ZnVuY3Rpb24gcmFuZG9tYnl0ZXNfdW5pZm9ybSh1cHBlcl9ib3VuZCwgb3V0cHV0Rm9ybWF0KSB7XG5cdFx0dmFyIGFkZHJlc3NfcG9vbCA9IFtdO1xuXHRcdF9jaGVja19vdXRwdXRfZm9ybWF0KG91dHB1dEZvcm1hdCk7XG5cblx0XHQvLyAtLS0tLS0tLS0tIGlucHV0OiB1cHBlcl9ib3VuZCAodWludClcblx0XHRcblx0XHRfcmVxdWlyZV9kZWZpbmVkKGFkZHJlc3NfcG9vbCwgdXBwZXJfYm91bmQsIFwidXBwZXJfYm91bmRcIik7XG5cdFx0XG5cdFx0aWYgKCEodHlwZW9mIHVwcGVyX2JvdW5kID09PSBcIm51bWJlclwiICYmICh1cHBlcl9ib3VuZCB8IDApID09PSB1cHBlcl9ib3VuZCkgJiYgKHVwcGVyX2JvdW5kIHwgMCkgPiAwKSB7XG5cdFx0XHRfZnJlZV9hbmRfdGhyb3dfdHlwZV9lcnJvcihhZGRyZXNzX3Bvb2wsIFwidXBwZXJfYm91bmQgbXVzdCBiZSBhbiB1bnNpZ25lZCBpbnRlZ2VyXCIpO1xuXHRcdH1cblx0XHRcblx0XHR2YXIgcmFuZG9tX3ZhbHVlID0gbGlic29kaXVtLl9yYW5kb21ieXRlc191bmlmb3JtKHVwcGVyX2JvdW5kKSA+Pj4gMDtcblx0XHR2YXIgcmV0ID0gKHJhbmRvbV92YWx1ZSk7XG5cdFx0X2ZyZWVfYWxsKGFkZHJlc3NfcG9vbCk7XG5cdFx0cmV0dXJuIHJldDtcblx0XHRcblx0fVxuXG5cdGZ1bmN0aW9uIHNvZGl1bV92ZXJzaW9uX3N0cmluZygpIHtcblx0XHR2YXIgYWRkcmVzc19wb29sID0gW107XG5cblx0XHR2YXIgdmVyc2lvbiA9IGxpYnNvZGl1bS5fc29kaXVtX3ZlcnNpb25fc3RyaW5nKCk7XG5cdFx0dmFyIHJldCA9IChsaWJzb2RpdW0uUG9pbnRlcl9zdHJpbmdpZnkodmVyc2lvbikpO1xuXHRcdF9mcmVlX2FsbChhZGRyZXNzX3Bvb2wpO1xuXHRcdHJldHVybiByZXQ7XG5cdFx0XG5cdH1cblxuXG5cdGV4cG9ydHMuY29tcGFyZSA9IGNvbXBhcmU7XG5cdGV4cG9ydHMuZnJvbV9iYXNlNjQgPSBmcm9tX2Jhc2U2NDtcblx0ZXhwb3J0cy5mcm9tX2hleCA9IGZyb21faGV4O1xuXHRleHBvcnRzLmZyb21fc3RyaW5nID0gZnJvbV9zdHJpbmc7XG5cdGV4cG9ydHMuaW5jcmVtZW50ID0gaW5jcmVtZW50O1xuXHRleHBvcnRzLmxpYnNvZGl1bSA9IGxpYnNvZGl1bTtcblx0ZXhwb3J0cy5tZW1jbXAgPSBtZW1jbXA7XG5cdGV4cG9ydHMubWVtemVybyA9IG1lbXplcm87XG5cdGV4cG9ydHMub3V0cHV0X2Zvcm1hdHMgPSBvdXRwdXRfZm9ybWF0cztcblx0ZXhwb3J0cy5zeW1ib2xzID0gc3ltYm9scztcblx0ZXhwb3J0cy50b19iYXNlNjQgPSB0b19iYXNlNjQ7XG5cdGV4cG9ydHMudG9faGV4ID0gdG9faGV4O1xuXHRleHBvcnRzLnRvX3N0cmluZyA9IHRvX3N0cmluZztcblxuXHRcblx0dmFyIGV4cG9ydGVkX2Z1bmN0aW9ucyA9IFtcImNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfZGVjcnlwdFwiLCBcImNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfZW5jcnlwdFwiLCBcImNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9kZWNyeXB0XCIsIFwiY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2VuY3J5cHRcIiwgXCJjcnlwdG9fYXV0aFwiLCBcImNyeXB0b19hdXRoX2htYWNzaGEyNTZcIiwgXCJjcnlwdG9fYXV0aF9obWFjc2hhMjU2X3ZlcmlmeVwiLCBcImNyeXB0b19hdXRoX2htYWNzaGE1MTJcIiwgXCJjcnlwdG9fYXV0aF9obWFjc2hhNTEyX3ZlcmlmeVwiLCBcImNyeXB0b19hdXRoX3ZlcmlmeVwiLCBcImNyeXB0b19ib3hfYmVmb3Jlbm1cIiwgXCJjcnlwdG9fYm94X2RldGFjaGVkXCIsIFwiY3J5cHRvX2JveF9lYXN5XCIsIFwiY3J5cHRvX2JveF9lYXN5X2FmdGVybm1cIiwgXCJjcnlwdG9fYm94X2tleXBhaXJcIiwgXCJjcnlwdG9fYm94X29wZW5fZGV0YWNoZWRcIiwgXCJjcnlwdG9fYm94X29wZW5fZWFzeVwiLCBcImNyeXB0b19ib3hfb3Blbl9lYXN5X2FmdGVybm1cIiwgXCJjcnlwdG9fYm94X3NlYWxcIiwgXCJjcnlwdG9fYm94X3NlYWxfb3BlblwiLCBcImNyeXB0b19ib3hfc2VlZF9rZXlwYWlyXCIsIFwiY3J5cHRvX2dlbmVyaWNoYXNoXCIsIFwiY3J5cHRvX2dlbmVyaWNoYXNoX2ZpbmFsXCIsIFwiY3J5cHRvX2dlbmVyaWNoYXNoX2luaXRcIiwgXCJjcnlwdG9fZ2VuZXJpY2hhc2hfdXBkYXRlXCIsIFwiY3J5cHRvX2hhc2hcIiwgXCJjcnlwdG9faGFzaF9zaGEyNTZcIiwgXCJjcnlwdG9faGFzaF9zaGE1MTJcIiwgXCJjcnlwdG9fb25ldGltZWF1dGhcIiwgXCJjcnlwdG9fb25ldGltZWF1dGhfZmluYWxcIiwgXCJjcnlwdG9fb25ldGltZWF1dGhfaW5pdFwiLCBcImNyeXB0b19vbmV0aW1lYXV0aF91cGRhdGVcIiwgXCJjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5XCIsIFwiY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1NlwiLCBcImNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfbGxcIiwgXCJjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0clwiLCBcImNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyX3ZlcmlmeVwiLCBcImNyeXB0b19zY2FsYXJtdWx0XCIsIFwiY3J5cHRvX3NjYWxhcm11bHRfYmFzZVwiLCBcImNyeXB0b19zZWNyZXRib3hfZGV0YWNoZWRcIiwgXCJjcnlwdG9fc2VjcmV0Ym94X2Vhc3lcIiwgXCJjcnlwdG9fc2VjcmV0Ym94X29wZW5fZGV0YWNoZWRcIiwgXCJjcnlwdG9fc2VjcmV0Ym94X29wZW5fZWFzeVwiLCBcImNyeXB0b19zaG9ydGhhc2hcIiwgXCJjcnlwdG9fc2lnblwiLCBcImNyeXB0b19zaWduX2RldGFjaGVkXCIsIFwiY3J5cHRvX3NpZ25fZWQyNTUxOV9wa190b19jdXJ2ZTI1NTE5XCIsIFwiY3J5cHRvX3NpZ25fZWQyNTUxOV9za190b19jdXJ2ZTI1NTE5XCIsIFwiY3J5cHRvX3NpZ25fZWQyNTUxOV9za190b19wa1wiLCBcImNyeXB0b19zaWduX2VkMjU1MTlfc2tfdG9fc2VlZFwiLCBcImNyeXB0b19zaWduX2tleXBhaXJcIiwgXCJjcnlwdG9fc2lnbl9vcGVuXCIsIFwiY3J5cHRvX3NpZ25fc2VlZF9rZXlwYWlyXCIsIFwiY3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkXCIsIFwicmFuZG9tYnl0ZXNfYnVmXCIsIFwicmFuZG9tYnl0ZXNfY2xvc2VcIiwgXCJyYW5kb21ieXRlc19yYW5kb21cIiwgXCJyYW5kb21ieXRlc19zZXRfaW1wbGVtZW50YXRpb25cIiwgXCJyYW5kb21ieXRlc19zdGlyXCIsIFwicmFuZG9tYnl0ZXNfdW5pZm9ybVwiLCBcInNvZGl1bV92ZXJzaW9uX3N0cmluZ1wiXSxcblx0XHRmdW5jdGlvbnMgPSBbY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0LCBjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHQsIGNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9kZWNyeXB0LCBjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZW5jcnlwdCwgY3J5cHRvX2F1dGgsIGNyeXB0b19hdXRoX2htYWNzaGEyNTYsIGNyeXB0b19hdXRoX2htYWNzaGEyNTZfdmVyaWZ5LCBjcnlwdG9fYXV0aF9obWFjc2hhNTEyLCBjcnlwdG9fYXV0aF9obWFjc2hhNTEyX3ZlcmlmeSwgY3J5cHRvX2F1dGhfdmVyaWZ5LCBjcnlwdG9fYm94X2JlZm9yZW5tLCBjcnlwdG9fYm94X2RldGFjaGVkLCBjcnlwdG9fYm94X2Vhc3ksIGNyeXB0b19ib3hfZWFzeV9hZnRlcm5tLCBjcnlwdG9fYm94X2tleXBhaXIsIGNyeXB0b19ib3hfb3Blbl9kZXRhY2hlZCwgY3J5cHRvX2JveF9vcGVuX2Vhc3ksIGNyeXB0b19ib3hfb3Blbl9lYXN5X2FmdGVybm0sIGNyeXB0b19ib3hfc2VhbCwgY3J5cHRvX2JveF9zZWFsX29wZW4sIGNyeXB0b19ib3hfc2VlZF9rZXlwYWlyLCBjcnlwdG9fZ2VuZXJpY2hhc2gsIGNyeXB0b19nZW5lcmljaGFzaF9maW5hbCwgY3J5cHRvX2dlbmVyaWNoYXNoX2luaXQsIGNyeXB0b19nZW5lcmljaGFzaF91cGRhdGUsIGNyeXB0b19oYXNoLCBjcnlwdG9faGFzaF9zaGEyNTYsIGNyeXB0b19oYXNoX3NoYTUxMiwgY3J5cHRvX29uZXRpbWVhdXRoLCBjcnlwdG9fb25ldGltZWF1dGhfZmluYWwsIGNyeXB0b19vbmV0aW1lYXV0aF9pbml0LCBjcnlwdG9fb25ldGltZWF1dGhfdXBkYXRlLCBjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5LCBjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2LCBjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X2xsLCBjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0ciwgY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHJfdmVyaWZ5LCBjcnlwdG9fc2NhbGFybXVsdCwgY3J5cHRvX3NjYWxhcm11bHRfYmFzZSwgY3J5cHRvX3NlY3JldGJveF9kZXRhY2hlZCwgY3J5cHRvX3NlY3JldGJveF9lYXN5LCBjcnlwdG9fc2VjcmV0Ym94X29wZW5fZGV0YWNoZWQsIGNyeXB0b19zZWNyZXRib3hfb3Blbl9lYXN5LCBjcnlwdG9fc2hvcnRoYXNoLCBjcnlwdG9fc2lnbiwgY3J5cHRvX3NpZ25fZGV0YWNoZWQsIGNyeXB0b19zaWduX2VkMjU1MTlfcGtfdG9fY3VydmUyNTUxOSwgY3J5cHRvX3NpZ25fZWQyNTUxOV9za190b19jdXJ2ZTI1NTE5LCBjcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX3BrLCBjcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX3NlZWQsIGNyeXB0b19zaWduX2tleXBhaXIsIGNyeXB0b19zaWduX29wZW4sIGNyeXB0b19zaWduX3NlZWRfa2V5cGFpciwgY3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkLCByYW5kb21ieXRlc19idWYsIHJhbmRvbWJ5dGVzX2Nsb3NlLCByYW5kb21ieXRlc19yYW5kb20sIHJhbmRvbWJ5dGVzX3NldF9pbXBsZW1lbnRhdGlvbiwgcmFuZG9tYnl0ZXNfc3RpciwgcmFuZG9tYnl0ZXNfdW5pZm9ybSwgc29kaXVtX3ZlcnNpb25fc3RyaW5nXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAodHlwZW9mIGxpYnNvZGl1bVtcIl9cIiArIGV4cG9ydGVkX2Z1bmN0aW9uc1tpXV0gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0ZXhwb3J0c1tleHBvcnRlZF9mdW5jdGlvbnNbaV1dID0gZnVuY3Rpb25zW2ldO1xuXHRcdH1cblx0fVxuXHR2YXIgY29uc3RhbnRzID0gW1wiU09ESVVNX0xJQlJBUllfVkVSU0lPTl9NQUpPUlwiLCBcIlNPRElVTV9MSUJSQVJZX1ZFUlNJT05fTUlOT1JcIiwgXCJjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X0FCWVRFU1wiLCBcImNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfS0VZQllURVNcIiwgXCJjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X05QVUJCWVRFU1wiLCBcImNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfTlNFQ0JZVEVTXCIsIFwiY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX05QVUJCWVRFU1wiLCBcImNyeXB0b19hdXRoX0JZVEVTXCIsIFwiY3J5cHRvX2F1dGhfS0VZQllURVNcIiwgXCJjcnlwdG9fYXV0aF9obWFjc2hhMjU2X0JZVEVTXCIsIFwiY3J5cHRvX2F1dGhfaG1hY3NoYTI1Nl9LRVlCWVRFU1wiLCBcImNyeXB0b19hdXRoX2htYWNzaGE1MTJfQllURVNcIiwgXCJjcnlwdG9fYXV0aF9obWFjc2hhNTEyX0tFWUJZVEVTXCIsIFwiY3J5cHRvX2JveF9CRUZPUkVOTUJZVEVTXCIsIFwiY3J5cHRvX2JveF9NQUNCWVRFU1wiLCBcImNyeXB0b19ib3hfTk9OQ0VCWVRFU1wiLCBcImNyeXB0b19ib3hfUFVCTElDS0VZQllURVNcIiwgXCJjcnlwdG9fYm94X1NFQUxCWVRFU1wiLCBcImNyeXB0b19ib3hfU0VDUkVUS0VZQllURVNcIiwgXCJjcnlwdG9fYm94X1NFRURCWVRFU1wiLCBcImNyeXB0b19nZW5lcmljaGFzaF9CWVRFU1wiLCBcImNyeXB0b19nZW5lcmljaGFzaF9CWVRFU19NQVhcIiwgXCJjcnlwdG9fZ2VuZXJpY2hhc2hfQllURVNfTUlOXCIsIFwiY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTXCIsIFwiY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTX01BWFwiLCBcImNyeXB0b19nZW5lcmljaGFzaF9LRVlCWVRFU19NSU5cIiwgXCJjcnlwdG9faGFzaF9CWVRFU1wiLCBcImNyeXB0b19vbmV0aW1lYXV0aF9CWVRFU1wiLCBcImNyeXB0b19vbmV0aW1lYXV0aF9LRVlCWVRFU1wiLCBcImNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfTUVNTElNSVRfSU5URVJBQ1RJVkVcIiwgXCJjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X01FTUxJTUlUX1NFTlNJVElWRVwiLCBcImNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfT1BTTElNSVRfSU5URVJBQ1RJVkVcIiwgXCJjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X09QU0xJTUlUX1NFTlNJVElWRVwiLCBcImNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfU0FMVEJZVEVTXCIsIFwiY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9TVFJCWVRFU1wiLCBcImNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfU1RSX1ZFUklGWVwiLCBcImNyeXB0b19zY2FsYXJtdWx0X0JZVEVTXCIsIFwiY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVNcIiwgXCJjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTXCIsIFwiY3J5cHRvX3NlY3JldGJveF9NQUNCWVRFU1wiLCBcImNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFU1wiLCBcImNyeXB0b19zaG9ydGhhc2hfQllURVNcIiwgXCJjcnlwdG9fc2hvcnRoYXNoX0tFWUJZVEVTXCIsIFwiY3J5cHRvX3NpZ25fQllURVNcIiwgXCJjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFU1wiLCBcImNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTXCIsIFwiY3J5cHRvX3NpZ25fU0VFREJZVEVTXCJdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGNvbnN0YW50cy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciByYXcgPSBsaWJzb2RpdW1bXCJfXCIgKyBjb25zdGFudHNbaV0udG9Mb3dlckNhc2UoKV07XG5cdFx0aWYgKHR5cGVvZiByYXcgPT09IFwiZnVuY3Rpb25cIikgZXhwb3J0c1tjb25zdGFudHNbaV1dID0gcmF3KCl8MDtcblx0fVxuXHR2YXIgY29uc3RhbnRzX3N0ciA9IFtcIlNPRElVTV9WRVJTSU9OX1NUUklOR1wiLCBcImNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfU1RSUFJFRklYXCJdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGNvbnN0YW50c19zdHIubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgcmF3ID0gbGlic29kaXVtW1wiX1wiICsgY29uc3RhbnRzX3N0cltpXS50b0xvd2VyQ2FzZSgpXTtcblx0XHRpZiAodHlwZW9mIHJhdyA9PT0gXCJmdW5jdGlvblwiKSBleHBvcnRzW2NvbnN0YW50c19zdHJbaV1dID0gbGlic29kaXVtLlBvaW50ZXJfc3RyaW5naWZ5KHJhdygpKTtcblx0fVxuXG5cdHJldHVybiBleHBvcnRzO1xufSkpO1xuIiwiKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXCJleHBvcnRzXCJdLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgdHlwZW9mIGV4cG9ydHMubm9kZU5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGZhY3RvcnkoZXhwb3J0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZmFjdG9yeShyb290LmxpYnNvZGl1bSA9IHt9KTtcbiAgICB9XG59KSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cykge1xuICAgIFwidXNlIHN0cmljdFwiO1xuICAgIHZhciBNb2R1bGUgPSBleHBvcnRzO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgTW9kdWxlO2lmKCFNb2R1bGUpTW9kdWxlPSh0eXBlb2YgTW9kdWxlIT09XCJ1bmRlZmluZWRcIj9Nb2R1bGU6bnVsbCl8fHt9O3ZhciBtb2R1bGVPdmVycmlkZXM9e307Zm9yKHZhciBrZXkgaW4gTW9kdWxlKXtpZihNb2R1bGUuaGFzT3duUHJvcGVydHkoa2V5KSl7bW9kdWxlT3ZlcnJpZGVzW2tleV09TW9kdWxlW2tleV19fXZhciBFTlZJUk9OTUVOVF9JU19XRUI9dHlwZW9mIHdpbmRvdz09PVwib2JqZWN0XCI7dmFyIEVOVklST05NRU5UX0lTX1dPUktFUj10eXBlb2YgaW1wb3J0U2NyaXB0cz09PVwiZnVuY3Rpb25cIjt2YXIgRU5WSVJPTk1FTlRfSVNfTk9ERT10eXBlb2YgcHJvY2Vzcz09PVwib2JqZWN0XCImJnR5cGVvZiByZXF1aXJlPT09XCJmdW5jdGlvblwiJiYhRU5WSVJPTk1FTlRfSVNfV0VCJiYhRU5WSVJPTk1FTlRfSVNfV09SS0VSO3ZhciBFTlZJUk9OTUVOVF9JU19TSEVMTD0hRU5WSVJPTk1FTlRfSVNfV0VCJiYhRU5WSVJPTk1FTlRfSVNfTk9ERSYmIUVOVklST05NRU5UX0lTX1dPUktFUjtpZihFTlZJUk9OTUVOVF9JU19OT0RFKXtpZighTW9kdWxlW1wicHJpbnRcIl0pTW9kdWxlW1wicHJpbnRcIl09ZnVuY3Rpb24gcHJpbnQoeCl7cHJvY2Vzc1tcInN0ZG91dFwiXS53cml0ZSh4K1wiXFxuXCIpfTtpZighTW9kdWxlW1wicHJpbnRFcnJcIl0pTW9kdWxlW1wicHJpbnRFcnJcIl09ZnVuY3Rpb24gcHJpbnRFcnIoeCl7cHJvY2Vzc1tcInN0ZGVyclwiXS53cml0ZSh4K1wiXFxuXCIpfTt2YXIgbm9kZUZTPXJlcXVpcmUoXCJmc1wiKTt2YXIgbm9kZVBhdGg9cmVxdWlyZShcInBhdGhcIik7TW9kdWxlW1wicmVhZFwiXT1mdW5jdGlvbiByZWFkKGZpbGVuYW1lLGJpbmFyeSl7ZmlsZW5hbWU9bm9kZVBhdGhbXCJub3JtYWxpemVcIl0oZmlsZW5hbWUpO3ZhciByZXQ9bm9kZUZTW1wicmVhZEZpbGVTeW5jXCJdKGZpbGVuYW1lKTtpZighcmV0JiZmaWxlbmFtZSE9bm9kZVBhdGhbXCJyZXNvbHZlXCJdKGZpbGVuYW1lKSl7ZmlsZW5hbWU9cGF0aC5qb2luKF9fZGlybmFtZSxcIi4uXCIsXCJzcmNcIixmaWxlbmFtZSk7cmV0PW5vZGVGU1tcInJlYWRGaWxlU3luY1wiXShmaWxlbmFtZSl9aWYocmV0JiYhYmluYXJ5KXJldD1yZXQudG9TdHJpbmcoKTtyZXR1cm4gcmV0fTtNb2R1bGVbXCJyZWFkQmluYXJ5XCJdPWZ1bmN0aW9uIHJlYWRCaW5hcnkoZmlsZW5hbWUpe3ZhciByZXQ9TW9kdWxlW1wicmVhZFwiXShmaWxlbmFtZSx0cnVlKTtpZighcmV0LmJ1ZmZlcil7cmV0PW5ldyBVaW50OEFycmF5KHJldCl9YXNzZXJ0KHJldC5idWZmZXIpO3JldHVybiByZXR9O01vZHVsZVtcImxvYWRcIl09ZnVuY3Rpb24gbG9hZChmKXtnbG9iYWxFdmFsKHJlYWQoZikpfTtpZighTW9kdWxlW1widGhpc1Byb2dyYW1cIl0pe2lmKHByb2Nlc3NbXCJhcmd2XCJdLmxlbmd0aD4xKXtNb2R1bGVbXCJ0aGlzUHJvZ3JhbVwiXT1wcm9jZXNzW1wiYXJndlwiXVsxXS5yZXBsYWNlKC9cXFxcL2csXCIvXCIpfWVsc2V7TW9kdWxlW1widGhpc1Byb2dyYW1cIl09XCJ1bmtub3duLXByb2dyYW1cIn19TW9kdWxlW1wiYXJndW1lbnRzXCJdPXByb2Nlc3NbXCJhcmd2XCJdLnNsaWNlKDIpO2lmKHR5cGVvZiBtb2R1bGUhPT1cInVuZGVmaW5lZFwiKXttb2R1bGVbXCJleHBvcnRzXCJdPU1vZHVsZX1wcm9jZXNzW1wib25cIl0oXCJ1bmNhdWdodEV4Y2VwdGlvblwiLChmdW5jdGlvbihleCl7aWYoIShleCBpbnN0YW5jZW9mIEV4aXRTdGF0dXMpKXt0aHJvdyBleH19KSk7TW9kdWxlW1wiaW5zcGVjdFwiXT0oZnVuY3Rpb24oKXtyZXR1cm5cIltFbXNjcmlwdGVuIE1vZHVsZSBvYmplY3RdXCJ9KX1lbHNlIGlmKEVOVklST05NRU5UX0lTX1NIRUxMKXtpZighTW9kdWxlW1wicHJpbnRcIl0pTW9kdWxlW1wicHJpbnRcIl09cHJpbnQ7aWYodHlwZW9mIHByaW50RXJyIT1cInVuZGVmaW5lZFwiKU1vZHVsZVtcInByaW50RXJyXCJdPXByaW50RXJyO2lmKHR5cGVvZiByZWFkIT1cInVuZGVmaW5lZFwiKXtNb2R1bGVbXCJyZWFkXCJdPXJlYWR9ZWxzZXtNb2R1bGVbXCJyZWFkXCJdPWZ1bmN0aW9uIHJlYWQoKXt0aHJvd1wibm8gcmVhZCgpIGF2YWlsYWJsZSAoanNjPylcIn19TW9kdWxlW1wicmVhZEJpbmFyeVwiXT1mdW5jdGlvbiByZWFkQmluYXJ5KGYpe2lmKHR5cGVvZiByZWFkYnVmZmVyPT09XCJmdW5jdGlvblwiKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkocmVhZGJ1ZmZlcihmKSl9dmFyIGRhdGE9cmVhZChmLFwiYmluYXJ5XCIpO2Fzc2VydCh0eXBlb2YgZGF0YT09PVwib2JqZWN0XCIpO3JldHVybiBkYXRhfTtpZih0eXBlb2Ygc2NyaXB0QXJncyE9XCJ1bmRlZmluZWRcIil7TW9kdWxlW1wiYXJndW1lbnRzXCJdPXNjcmlwdEFyZ3N9ZWxzZSBpZih0eXBlb2YgYXJndW1lbnRzIT1cInVuZGVmaW5lZFwiKXtNb2R1bGVbXCJhcmd1bWVudHNcIl09YXJndW1lbnRzfX1lbHNlIGlmKEVOVklST05NRU5UX0lTX1dFQnx8RU5WSVJPTk1FTlRfSVNfV09SS0VSKXtNb2R1bGVbXCJyZWFkXCJdPWZ1bmN0aW9uIHJlYWQodXJsKXt2YXIgeGhyPW5ldyBYTUxIdHRwUmVxdWVzdDt4aHIub3BlbihcIkdFVFwiLHVybCxmYWxzZSk7eGhyLnNlbmQobnVsbCk7cmV0dXJuIHhoci5yZXNwb25zZVRleHR9O2lmKHR5cGVvZiBhcmd1bWVudHMhPVwidW5kZWZpbmVkXCIpe01vZHVsZVtcImFyZ3VtZW50c1wiXT1hcmd1bWVudHN9aWYodHlwZW9mIGNvbnNvbGUhPT1cInVuZGVmaW5lZFwiKXtpZighTW9kdWxlW1wicHJpbnRcIl0pTW9kdWxlW1wicHJpbnRcIl09ZnVuY3Rpb24gcHJpbnQoeCl7Y29uc29sZS5sb2coeCl9O2lmKCFNb2R1bGVbXCJwcmludEVyclwiXSlNb2R1bGVbXCJwcmludEVyclwiXT1mdW5jdGlvbiBwcmludEVycih4KXtjb25zb2xlLmxvZyh4KX19ZWxzZXt2YXIgVFJZX1VTRV9EVU1QPWZhbHNlO2lmKCFNb2R1bGVbXCJwcmludFwiXSlNb2R1bGVbXCJwcmludFwiXT1UUllfVVNFX0RVTVAmJnR5cGVvZiBkdW1wIT09XCJ1bmRlZmluZWRcIj8oZnVuY3Rpb24oeCl7ZHVtcCh4KX0pOihmdW5jdGlvbih4KXt9KX1pZihFTlZJUk9OTUVOVF9JU19XT1JLRVIpe01vZHVsZVtcImxvYWRcIl09aW1wb3J0U2NyaXB0c31pZih0eXBlb2YgTW9kdWxlW1wic2V0V2luZG93VGl0bGVcIl09PT1cInVuZGVmaW5lZFwiKXtNb2R1bGVbXCJzZXRXaW5kb3dUaXRsZVwiXT0oZnVuY3Rpb24odGl0bGUpe2RvY3VtZW50LnRpdGxlPXRpdGxlfSl9fWVsc2V7dGhyb3dcIlVua25vd24gcnVudGltZSBlbnZpcm9ubWVudC4gV2hlcmUgYXJlIHdlP1wifWZ1bmN0aW9uIGdsb2JhbEV2YWwoeCl7dGhyb3dcIk5PX0RZTkFNSUNfRVhFQ1VUSU9OIHdhcyBzZXQsIGNhbm5vdCBldmFsXCJ9aWYoIU1vZHVsZVtcImxvYWRcIl0mJk1vZHVsZVtcInJlYWRcIl0pe01vZHVsZVtcImxvYWRcIl09ZnVuY3Rpb24gbG9hZChmKXtnbG9iYWxFdmFsKE1vZHVsZVtcInJlYWRcIl0oZikpfX1pZighTW9kdWxlW1wicHJpbnRcIl0pe01vZHVsZVtcInByaW50XCJdPShmdW5jdGlvbigpe30pfWlmKCFNb2R1bGVbXCJwcmludEVyclwiXSl7TW9kdWxlW1wicHJpbnRFcnJcIl09TW9kdWxlW1wicHJpbnRcIl19aWYoIU1vZHVsZVtcImFyZ3VtZW50c1wiXSl7TW9kdWxlW1wiYXJndW1lbnRzXCJdPVtdfWlmKCFNb2R1bGVbXCJ0aGlzUHJvZ3JhbVwiXSl7TW9kdWxlW1widGhpc1Byb2dyYW1cIl09XCIuL3RoaXMucHJvZ3JhbVwifU1vZHVsZS5wcmludD1Nb2R1bGVbXCJwcmludFwiXTtNb2R1bGUucHJpbnRFcnI9TW9kdWxlW1wicHJpbnRFcnJcIl07TW9kdWxlW1wicHJlUnVuXCJdPVtdO01vZHVsZVtcInBvc3RSdW5cIl09W107Zm9yKHZhciBrZXkgaW4gbW9kdWxlT3ZlcnJpZGVzKXtpZihtb2R1bGVPdmVycmlkZXMuaGFzT3duUHJvcGVydHkoa2V5KSl7TW9kdWxlW2tleV09bW9kdWxlT3ZlcnJpZGVzW2tleV19fXZhciBSdW50aW1lPXtzZXRUZW1wUmV0MDooZnVuY3Rpb24odmFsdWUpe3RlbXBSZXQwPXZhbHVlfSksZ2V0VGVtcFJldDA6KGZ1bmN0aW9uKCl7cmV0dXJuIHRlbXBSZXQwfSksc3RhY2tTYXZlOihmdW5jdGlvbigpe3JldHVybiBTVEFDS1RPUH0pLHN0YWNrUmVzdG9yZTooZnVuY3Rpb24oc3RhY2tUb3Ape1NUQUNLVE9QPXN0YWNrVG9wfSksZ2V0TmF0aXZlVHlwZVNpemU6KGZ1bmN0aW9uKHR5cGUpe3N3aXRjaCh0eXBlKXtjYXNlXCJpMVwiOmNhc2VcImk4XCI6cmV0dXJuIDE7Y2FzZVwiaTE2XCI6cmV0dXJuIDI7Y2FzZVwiaTMyXCI6cmV0dXJuIDQ7Y2FzZVwiaTY0XCI6cmV0dXJuIDg7Y2FzZVwiZmxvYXRcIjpyZXR1cm4gNDtjYXNlXCJkb3VibGVcIjpyZXR1cm4gODtkZWZhdWx0OntpZih0eXBlW3R5cGUubGVuZ3RoLTFdPT09XCIqXCIpe3JldHVybiBSdW50aW1lLlFVQU5UVU1fU0laRX1lbHNlIGlmKHR5cGVbMF09PT1cImlcIil7dmFyIGJpdHM9cGFyc2VJbnQodHlwZS5zdWJzdHIoMSkpO2Fzc2VydChiaXRzJTg9PT0wKTtyZXR1cm4gYml0cy84fWVsc2V7cmV0dXJuIDB9fX19KSxnZXROYXRpdmVGaWVsZFNpemU6KGZ1bmN0aW9uKHR5cGUpe3JldHVybiBNYXRoLm1heChSdW50aW1lLmdldE5hdGl2ZVR5cGVTaXplKHR5cGUpLFJ1bnRpbWUuUVVBTlRVTV9TSVpFKX0pLFNUQUNLX0FMSUdOOjE2LHByZXBWYXJhcmc6KGZ1bmN0aW9uKHB0cix0eXBlKXtpZih0eXBlPT09XCJkb3VibGVcInx8dHlwZT09PVwiaTY0XCIpe2lmKHB0ciY3KXthc3NlcnQoKHB0ciY3KT09PTQpO3B0cis9NH19ZWxzZXthc3NlcnQoKHB0ciYzKT09PTApfXJldHVybiBwdHJ9KSxnZXRBbGlnblNpemU6KGZ1bmN0aW9uKHR5cGUsc2l6ZSx2YXJhcmcpe2lmKCF2YXJhcmcmJih0eXBlPT1cImk2NFwifHx0eXBlPT1cImRvdWJsZVwiKSlyZXR1cm4gODtpZighdHlwZSlyZXR1cm4gTWF0aC5taW4oc2l6ZSw4KTtyZXR1cm4gTWF0aC5taW4oc2l6ZXx8KHR5cGU/UnVudGltZS5nZXROYXRpdmVGaWVsZFNpemUodHlwZSk6MCksUnVudGltZS5RVUFOVFVNX1NJWkUpfSksZHluQ2FsbDooZnVuY3Rpb24oc2lnLHB0cixhcmdzKXtpZihhcmdzJiZhcmdzLmxlbmd0aCl7aWYoIWFyZ3Muc3BsaWNlKWFyZ3M9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncyk7YXJncy5zcGxpY2UoMCwwLHB0cik7cmV0dXJuIE1vZHVsZVtcImR5bkNhbGxfXCIrc2lnXS5hcHBseShudWxsLGFyZ3MpfWVsc2V7cmV0dXJuIE1vZHVsZVtcImR5bkNhbGxfXCIrc2lnXS5jYWxsKG51bGwscHRyKX19KSxmdW5jdGlvblBvaW50ZXJzOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGFkZEZ1bmN0aW9uOihmdW5jdGlvbihmdW5jKXtmb3IodmFyIGk9MDtpPFJ1bnRpbWUuZnVuY3Rpb25Qb2ludGVycy5sZW5ndGg7aSsrKXtpZighUnVudGltZS5mdW5jdGlvblBvaW50ZXJzW2ldKXtSdW50aW1lLmZ1bmN0aW9uUG9pbnRlcnNbaV09ZnVuYztyZXR1cm4gMiooMStpKX19dGhyb3dcIkZpbmlzaGVkIHVwIGFsbCByZXNlcnZlZCBmdW5jdGlvbiBwb2ludGVycy4gVXNlIGEgaGlnaGVyIHZhbHVlIGZvciBSRVNFUlZFRF9GVU5DVElPTl9QT0lOVEVSUy5cIn0pLHJlbW92ZUZ1bmN0aW9uOihmdW5jdGlvbihpbmRleCl7UnVudGltZS5mdW5jdGlvblBvaW50ZXJzWyhpbmRleC0yKS8yXT1udWxsfSksd2Fybk9uY2U6KGZ1bmN0aW9uKHRleHQpe2lmKCFSdW50aW1lLndhcm5PbmNlLnNob3duKVJ1bnRpbWUud2Fybk9uY2Uuc2hvd249e307aWYoIVJ1bnRpbWUud2Fybk9uY2Uuc2hvd25bdGV4dF0pe1J1bnRpbWUud2Fybk9uY2Uuc2hvd25bdGV4dF09MTtNb2R1bGUucHJpbnRFcnIodGV4dCl9fSksZnVuY1dyYXBwZXJzOnt9LGdldEZ1bmNXcmFwcGVyOihmdW5jdGlvbihmdW5jLHNpZyl7YXNzZXJ0KHNpZyk7aWYoIVJ1bnRpbWUuZnVuY1dyYXBwZXJzW3NpZ10pe1J1bnRpbWUuZnVuY1dyYXBwZXJzW3NpZ109e319dmFyIHNpZ0NhY2hlPVJ1bnRpbWUuZnVuY1dyYXBwZXJzW3NpZ107aWYoIXNpZ0NhY2hlW2Z1bmNdKXtzaWdDYWNoZVtmdW5jXT1mdW5jdGlvbiBkeW5DYWxsX3dyYXBwZXIoKXtyZXR1cm4gUnVudGltZS5keW5DYWxsKHNpZyxmdW5jLGFyZ3VtZW50cyl9fXJldHVybiBzaWdDYWNoZVtmdW5jXX0pLGdldENvbXBpbGVyU2V0dGluZzooZnVuY3Rpb24obmFtZSl7dGhyb3dcIllvdSBtdXN0IGJ1aWxkIHdpdGggLXMgUkVUQUlOX0NPTVBJTEVSX1NFVFRJTkdTPTEgZm9yIFJ1bnRpbWUuZ2V0Q29tcGlsZXJTZXR0aW5nIG9yIGVtc2NyaXB0ZW5fZ2V0X2NvbXBpbGVyX3NldHRpbmcgdG8gd29ya1wifSksc3RhY2tBbGxvYzooZnVuY3Rpb24oc2l6ZSl7dmFyIHJldD1TVEFDS1RPUDtTVEFDS1RPUD1TVEFDS1RPUCtzaXplfDA7U1RBQ0tUT1A9U1RBQ0tUT1ArMTUmLTE2O3JldHVybiByZXR9KSxzdGF0aWNBbGxvYzooZnVuY3Rpb24oc2l6ZSl7dmFyIHJldD1TVEFUSUNUT1A7U1RBVElDVE9QPVNUQVRJQ1RPUCtzaXplfDA7U1RBVElDVE9QPVNUQVRJQ1RPUCsxNSYtMTY7cmV0dXJuIHJldH0pLGR5bmFtaWNBbGxvYzooZnVuY3Rpb24oc2l6ZSl7dmFyIHJldD1EWU5BTUlDVE9QO0RZTkFNSUNUT1A9RFlOQU1JQ1RPUCtzaXplfDA7RFlOQU1JQ1RPUD1EWU5BTUlDVE9QKzE1Ji0xNjtpZihEWU5BTUlDVE9QPj1UT1RBTF9NRU1PUlkpe3ZhciBzdWNjZXNzPWVubGFyZ2VNZW1vcnkoKTtpZighc3VjY2Vzcyl7RFlOQU1JQ1RPUD1yZXQ7cmV0dXJuIDB9fXJldHVybiByZXR9KSxhbGlnbk1lbW9yeTooZnVuY3Rpb24oc2l6ZSxxdWFudHVtKXt2YXIgcmV0PXNpemU9TWF0aC5jZWlsKHNpemUvKHF1YW50dW0/cXVhbnR1bToxNikpKihxdWFudHVtP3F1YW50dW06MTYpO3JldHVybiByZXR9KSxtYWtlQmlnSW50OihmdW5jdGlvbihsb3csaGlnaCx1bnNpZ25lZCl7dmFyIHJldD11bnNpZ25lZD8rKGxvdz4+PjApKyArKGhpZ2g+Pj4wKSorNDI5NDk2NzI5NjorKGxvdz4+PjApKyArKGhpZ2h8MCkqKzQyOTQ5NjcyOTY7cmV0dXJuIHJldH0pLEdMT0JBTF9CQVNFOjgsUVVBTlRVTV9TSVpFOjQsX19kdW1teV9fOjB9O01vZHVsZVtcIlJ1bnRpbWVcIl09UnVudGltZTt2YXIgX19USFJFV19fPTA7dmFyIEFCT1JUPWZhbHNlO3ZhciBFWElUU1RBVFVTPTA7dmFyIHVuZGVmPTA7dmFyIHRlbXBWYWx1ZSx0ZW1wSW50LHRlbXBCaWdJbnQsdGVtcEludDIsdGVtcEJpZ0ludDIsdGVtcFBhaXIsdGVtcEJpZ0ludEksdGVtcEJpZ0ludFIsdGVtcEJpZ0ludFMsdGVtcEJpZ0ludFAsdGVtcEJpZ0ludEQsdGVtcERvdWJsZSx0ZW1wRmxvYXQ7dmFyIHRlbXBJNjQsdGVtcEk2NGI7dmFyIHRlbXBSZXQwLHRlbXBSZXQxLHRlbXBSZXQyLHRlbXBSZXQzLHRlbXBSZXQ0LHRlbXBSZXQ1LHRlbXBSZXQ2LHRlbXBSZXQ3LHRlbXBSZXQ4LHRlbXBSZXQ5O2Z1bmN0aW9uIGFzc2VydChjb25kaXRpb24sdGV4dCl7aWYoIWNvbmRpdGlvbil7YWJvcnQoXCJBc3NlcnRpb24gZmFpbGVkOiBcIit0ZXh0KX19dmFyIGdsb2JhbFNjb3BlPXRoaXM7ZnVuY3Rpb24gZ2V0Q0Z1bmMoaWRlbnQpe3ZhciBmdW5jPU1vZHVsZVtcIl9cIitpZGVudF07aWYoIWZ1bmMpe2Fib3J0KFwiTk9fRFlOQU1JQ19FWEVDVVRJT04gd2FzIHNldCwgY2Fubm90IGV2YWwgLSBjY2FsbC9jd3JhcCBhcmUgbm90IGZ1bmN0aW9uYWxcIil9YXNzZXJ0KGZ1bmMsXCJDYW5ub3QgY2FsbCB1bmtub3duIGZ1bmN0aW9uIFwiK2lkZW50K1wiIChwZXJoYXBzIExMVk0gb3B0aW1pemF0aW9ucyBvciBjbG9zdXJlIHJlbW92ZWQgaXQ/KVwiKTtyZXR1cm4gZnVuY312YXIgY3dyYXAsY2NhbGw7KChmdW5jdGlvbigpe3ZhciBKU2Z1bmNzPXtcInN0YWNrU2F2ZVwiOihmdW5jdGlvbigpe1J1bnRpbWUuc3RhY2tTYXZlKCl9KSxcInN0YWNrUmVzdG9yZVwiOihmdW5jdGlvbigpe1J1bnRpbWUuc3RhY2tSZXN0b3JlKCl9KSxcImFycmF5VG9DXCI6KGZ1bmN0aW9uKGFycil7dmFyIHJldD1SdW50aW1lLnN0YWNrQWxsb2MoYXJyLmxlbmd0aCk7d3JpdGVBcnJheVRvTWVtb3J5KGFycixyZXQpO3JldHVybiByZXR9KSxcInN0cmluZ1RvQ1wiOihmdW5jdGlvbihzdHIpe3ZhciByZXQ9MDtpZihzdHIhPT1udWxsJiZzdHIhPT11bmRlZmluZWQmJnN0ciE9PTApe3JldD1SdW50aW1lLnN0YWNrQWxsb2MoKHN0ci5sZW5ndGg8PDIpKzEpO3dyaXRlU3RyaW5nVG9NZW1vcnkoc3RyLHJldCl9cmV0dXJuIHJldH0pfTt2YXIgdG9DPXtcInN0cmluZ1wiOkpTZnVuY3NbXCJzdHJpbmdUb0NcIl0sXCJhcnJheVwiOkpTZnVuY3NbXCJhcnJheVRvQ1wiXX07Y2NhbGw9ZnVuY3Rpb24gY2NhbGxGdW5jKGlkZW50LHJldHVyblR5cGUsYXJnVHlwZXMsYXJncyxvcHRzKXt2YXIgZnVuYz1nZXRDRnVuYyhpZGVudCk7dmFyIGNBcmdzPVtdO3ZhciBzdGFjaz0wO2lmKGFyZ3Mpe2Zvcih2YXIgaT0wO2k8YXJncy5sZW5ndGg7aSsrKXt2YXIgY29udmVydGVyPXRvQ1thcmdUeXBlc1tpXV07aWYoY29udmVydGVyKXtpZihzdGFjaz09PTApc3RhY2s9UnVudGltZS5zdGFja1NhdmUoKTtjQXJnc1tpXT1jb252ZXJ0ZXIoYXJnc1tpXSl9ZWxzZXtjQXJnc1tpXT1hcmdzW2ldfX19dmFyIHJldD1mdW5jLmFwcGx5KG51bGwsY0FyZ3MpO2lmKHJldHVyblR5cGU9PT1cInN0cmluZ1wiKXJldD1Qb2ludGVyX3N0cmluZ2lmeShyZXQpO2lmKHN0YWNrIT09MCl7aWYob3B0cyYmb3B0cy5hc3luYyl7RW10ZXJwcmV0ZXJBc3luYy5hc3luY0ZpbmFsaXplcnMucHVzaCgoZnVuY3Rpb24oKXtSdW50aW1lLnN0YWNrUmVzdG9yZShzdGFjayl9KSk7cmV0dXJufVJ1bnRpbWUuc3RhY2tSZXN0b3JlKHN0YWNrKX1yZXR1cm4gcmV0fTtjd3JhcD1mdW5jdGlvbiBjd3JhcChpZGVudCxyZXR1cm5UeXBlLGFyZ1R5cGVzKXtyZXR1cm4oZnVuY3Rpb24oKXtyZXR1cm4gY2NhbGwoaWRlbnQscmV0dXJuVHlwZSxhcmdUeXBlcyxhcmd1bWVudHMpfSl9fSkpKCk7TW9kdWxlW1wiY2NhbGxcIl09Y2NhbGw7TW9kdWxlW1wiY3dyYXBcIl09Y3dyYXA7ZnVuY3Rpb24gc2V0VmFsdWUocHRyLHZhbHVlLHR5cGUsbm9TYWZlKXt0eXBlPXR5cGV8fFwiaThcIjtpZih0eXBlLmNoYXJBdCh0eXBlLmxlbmd0aC0xKT09PVwiKlwiKXR5cGU9XCJpMzJcIjtzd2l0Y2godHlwZSl7Y2FzZVwiaTFcIjpIRUFQOFtwdHI+PjBdPXZhbHVlO2JyZWFrO2Nhc2VcImk4XCI6SEVBUDhbcHRyPj4wXT12YWx1ZTticmVhaztjYXNlXCJpMTZcIjpIRUFQMTZbcHRyPj4xXT12YWx1ZTticmVhaztjYXNlXCJpMzJcIjpIRUFQMzJbcHRyPj4yXT12YWx1ZTticmVhaztjYXNlXCJpNjRcIjp0ZW1wSTY0PVt2YWx1ZT4+PjAsKHRlbXBEb3VibGU9dmFsdWUsK01hdGhfYWJzKHRlbXBEb3VibGUpPj0rMT90ZW1wRG91YmxlPiswPyhNYXRoX21pbigrTWF0aF9mbG9vcih0ZW1wRG91YmxlLys0Mjk0OTY3Mjk2KSwrNDI5NDk2NzI5NSl8MCk+Pj4wOn5+K01hdGhfY2VpbCgodGVtcERvdWJsZS0gKyh+fnRlbXBEb3VibGU+Pj4wKSkvKzQyOTQ5NjcyOTYpPj4+MDowKV0sSEVBUDMyW3B0cj4+Ml09dGVtcEk2NFswXSxIRUFQMzJbcHRyKzQ+PjJdPXRlbXBJNjRbMV07YnJlYWs7Y2FzZVwiZmxvYXRcIjpIRUFQRjMyW3B0cj4+Ml09dmFsdWU7YnJlYWs7Y2FzZVwiZG91YmxlXCI6SEVBUEY2NFtwdHI+PjNdPXZhbHVlO2JyZWFrO2RlZmF1bHQ6YWJvcnQoXCJpbnZhbGlkIHR5cGUgZm9yIHNldFZhbHVlOiBcIit0eXBlKX19TW9kdWxlW1wic2V0VmFsdWVcIl09c2V0VmFsdWU7ZnVuY3Rpb24gZ2V0VmFsdWUocHRyLHR5cGUsbm9TYWZlKXt0eXBlPXR5cGV8fFwiaThcIjtpZih0eXBlLmNoYXJBdCh0eXBlLmxlbmd0aC0xKT09PVwiKlwiKXR5cGU9XCJpMzJcIjtzd2l0Y2godHlwZSl7Y2FzZVwiaTFcIjpyZXR1cm4gSEVBUDhbcHRyPj4wXTtjYXNlXCJpOFwiOnJldHVybiBIRUFQOFtwdHI+PjBdO2Nhc2VcImkxNlwiOnJldHVybiBIRUFQMTZbcHRyPj4xXTtjYXNlXCJpMzJcIjpyZXR1cm4gSEVBUDMyW3B0cj4+Ml07Y2FzZVwiaTY0XCI6cmV0dXJuIEhFQVAzMltwdHI+PjJdO2Nhc2VcImZsb2F0XCI6cmV0dXJuIEhFQVBGMzJbcHRyPj4yXTtjYXNlXCJkb3VibGVcIjpyZXR1cm4gSEVBUEY2NFtwdHI+PjNdO2RlZmF1bHQ6YWJvcnQoXCJpbnZhbGlkIHR5cGUgZm9yIHNldFZhbHVlOiBcIit0eXBlKX1yZXR1cm4gbnVsbH1Nb2R1bGVbXCJnZXRWYWx1ZVwiXT1nZXRWYWx1ZTt2YXIgQUxMT0NfTk9STUFMPTA7dmFyIEFMTE9DX1NUQUNLPTE7dmFyIEFMTE9DX1NUQVRJQz0yO3ZhciBBTExPQ19EWU5BTUlDPTM7dmFyIEFMTE9DX05PTkU9NDtNb2R1bGVbXCJBTExPQ19OT1JNQUxcIl09QUxMT0NfTk9STUFMO01vZHVsZVtcIkFMTE9DX1NUQUNLXCJdPUFMTE9DX1NUQUNLO01vZHVsZVtcIkFMTE9DX1NUQVRJQ1wiXT1BTExPQ19TVEFUSUM7TW9kdWxlW1wiQUxMT0NfRFlOQU1JQ1wiXT1BTExPQ19EWU5BTUlDO01vZHVsZVtcIkFMTE9DX05PTkVcIl09QUxMT0NfTk9ORTtmdW5jdGlvbiBhbGxvY2F0ZShzbGFiLHR5cGVzLGFsbG9jYXRvcixwdHIpe3ZhciB6ZXJvaW5pdCxzaXplO2lmKHR5cGVvZiBzbGFiPT09XCJudW1iZXJcIil7emVyb2luaXQ9dHJ1ZTtzaXplPXNsYWJ9ZWxzZXt6ZXJvaW5pdD1mYWxzZTtzaXplPXNsYWIubGVuZ3RofXZhciBzaW5nbGVUeXBlPXR5cGVvZiB0eXBlcz09PVwic3RyaW5nXCI/dHlwZXM6bnVsbDt2YXIgcmV0O2lmKGFsbG9jYXRvcj09QUxMT0NfTk9ORSl7cmV0PXB0cn1lbHNle3JldD1bX21hbGxvYyxSdW50aW1lLnN0YWNrQWxsb2MsUnVudGltZS5zdGF0aWNBbGxvYyxSdW50aW1lLmR5bmFtaWNBbGxvY11bYWxsb2NhdG9yPT09dW5kZWZpbmVkP0FMTE9DX1NUQVRJQzphbGxvY2F0b3JdKE1hdGgubWF4KHNpemUsc2luZ2xlVHlwZT8xOnR5cGVzLmxlbmd0aCkpfWlmKHplcm9pbml0KXt2YXIgcHRyPXJldCxzdG9wO2Fzc2VydCgocmV0JjMpPT0wKTtzdG9wPXJldCsoc2l6ZSZ+Myk7Zm9yKDtwdHI8c3RvcDtwdHIrPTQpe0hFQVAzMltwdHI+PjJdPTB9c3RvcD1yZXQrc2l6ZTt3aGlsZShwdHI8c3RvcCl7SEVBUDhbcHRyKys+PjBdPTB9cmV0dXJuIHJldH1pZihzaW5nbGVUeXBlPT09XCJpOFwiKXtpZihzbGFiLnN1YmFycmF5fHxzbGFiLnNsaWNlKXtIRUFQVTguc2V0KHNsYWIscmV0KX1lbHNle0hFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoc2xhYikscmV0KX1yZXR1cm4gcmV0fXZhciBpPTAsdHlwZSx0eXBlU2l6ZSxwcmV2aW91c1R5cGU7d2hpbGUoaTxzaXplKXt2YXIgY3Vycj1zbGFiW2ldO2lmKHR5cGVvZiBjdXJyPT09XCJmdW5jdGlvblwiKXtjdXJyPVJ1bnRpbWUuZ2V0RnVuY3Rpb25JbmRleChjdXJyKX10eXBlPXNpbmdsZVR5cGV8fHR5cGVzW2ldO2lmKHR5cGU9PT0wKXtpKys7Y29udGludWV9aWYodHlwZT09XCJpNjRcIil0eXBlPVwiaTMyXCI7c2V0VmFsdWUocmV0K2ksY3Vycix0eXBlKTtpZihwcmV2aW91c1R5cGUhPT10eXBlKXt0eXBlU2l6ZT1SdW50aW1lLmdldE5hdGl2ZVR5cGVTaXplKHR5cGUpO3ByZXZpb3VzVHlwZT10eXBlfWkrPXR5cGVTaXplfXJldHVybiByZXR9TW9kdWxlW1wiYWxsb2NhdGVcIl09YWxsb2NhdGU7ZnVuY3Rpb24gZ2V0TWVtb3J5KHNpemUpe2lmKCFzdGF0aWNTZWFsZWQpcmV0dXJuIFJ1bnRpbWUuc3RhdGljQWxsb2Moc2l6ZSk7aWYodHlwZW9mIF9zYnJrIT09XCJ1bmRlZmluZWRcIiYmIV9zYnJrLmNhbGxlZHx8IXJ1bnRpbWVJbml0aWFsaXplZClyZXR1cm4gUnVudGltZS5keW5hbWljQWxsb2Moc2l6ZSk7cmV0dXJuIF9tYWxsb2Moc2l6ZSl9TW9kdWxlW1wiZ2V0TWVtb3J5XCJdPWdldE1lbW9yeTtmdW5jdGlvbiBQb2ludGVyX3N0cmluZ2lmeShwdHIsbGVuZ3RoKXtpZihsZW5ndGg9PT0wfHwhcHRyKXJldHVyblwiXCI7dmFyIGhhc1V0Zj0wO3ZhciB0O3ZhciBpPTA7d2hpbGUoMSl7dD1IRUFQVThbcHRyK2k+PjBdO2hhc1V0Znw9dDtpZih0PT0wJiYhbGVuZ3RoKWJyZWFrO2krKztpZihsZW5ndGgmJmk9PWxlbmd0aClicmVha31pZighbGVuZ3RoKWxlbmd0aD1pO3ZhciByZXQ9XCJcIjtpZihoYXNVdGY8MTI4KXt2YXIgTUFYX0NIVU5LPTEwMjQ7dmFyIGN1cnI7d2hpbGUobGVuZ3RoPjApe2N1cnI9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsSEVBUFU4LnN1YmFycmF5KHB0cixwdHIrTWF0aC5taW4obGVuZ3RoLE1BWF9DSFVOSykpKTtyZXQ9cmV0P3JldCtjdXJyOmN1cnI7cHRyKz1NQVhfQ0hVTks7bGVuZ3RoLT1NQVhfQ0hVTkt9cmV0dXJuIHJldH1yZXR1cm4gTW9kdWxlW1wiVVRGOFRvU3RyaW5nXCJdKHB0cil9TW9kdWxlW1wiUG9pbnRlcl9zdHJpbmdpZnlcIl09UG9pbnRlcl9zdHJpbmdpZnk7ZnVuY3Rpb24gQXNjaWlUb1N0cmluZyhwdHIpe3ZhciBzdHI9XCJcIjt3aGlsZSgxKXt2YXIgY2g9SEVBUDhbcHRyKys+PjBdO2lmKCFjaClyZXR1cm4gc3RyO3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZShjaCl9fU1vZHVsZVtcIkFzY2lpVG9TdHJpbmdcIl09QXNjaWlUb1N0cmluZztmdW5jdGlvbiBzdHJpbmdUb0FzY2lpKHN0cixvdXRQdHIpe3JldHVybiB3cml0ZUFzY2lpVG9NZW1vcnkoc3RyLG91dFB0cixmYWxzZSl9TW9kdWxlW1wic3RyaW5nVG9Bc2NpaVwiXT1zdHJpbmdUb0FzY2lpO2Z1bmN0aW9uIFVURjhBcnJheVRvU3RyaW5nKHU4QXJyYXksaWR4KXt2YXIgdTAsdTEsdTIsdTMsdTQsdTU7dmFyIHN0cj1cIlwiO3doaWxlKDEpe3UwPXU4QXJyYXlbaWR4KytdO2lmKCF1MClyZXR1cm4gc3RyO2lmKCEodTAmMTI4KSl7c3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHUwKTtjb250aW51ZX11MT11OEFycmF5W2lkeCsrXSY2MztpZigodTAmMjI0KT09MTkyKXtzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoKHUwJjMxKTw8Nnx1MSk7Y29udGludWV9dTI9dThBcnJheVtpZHgrK10mNjM7aWYoKHUwJjI0MCk9PTIyNCl7dTA9KHUwJjE1KTw8MTJ8dTE8PDZ8dTJ9ZWxzZXt1Mz11OEFycmF5W2lkeCsrXSY2MztpZigodTAmMjQ4KT09MjQwKXt1MD0odTAmNyk8PDE4fHUxPDwxMnx1Mjw8Nnx1M31lbHNle3U0PXU4QXJyYXlbaWR4KytdJjYzO2lmKCh1MCYyNTIpPT0yNDgpe3UwPSh1MCYzKTw8MjR8dTE8PDE4fHUyPDwxMnx1Mzw8Nnx1NH1lbHNle3U1PXU4QXJyYXlbaWR4KytdJjYzO3UwPSh1MCYxKTw8MzB8dTE8PDI0fHUyPDwxOHx1Mzw8MTJ8dTQ8PDZ8dTV9fX1pZih1MDw2NTUzNil7c3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHUwKX1lbHNle3ZhciBjaD11MC02NTUzNjtzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8Y2g+PjEwLDU2MzIwfGNoJjEwMjMpfX19TW9kdWxlW1wiVVRGOEFycmF5VG9TdHJpbmdcIl09VVRGOEFycmF5VG9TdHJpbmc7ZnVuY3Rpb24gVVRGOFRvU3RyaW5nKHB0cil7cmV0dXJuIFVURjhBcnJheVRvU3RyaW5nKEhFQVBVOCxwdHIpfU1vZHVsZVtcIlVURjhUb1N0cmluZ1wiXT1VVEY4VG9TdHJpbmc7ZnVuY3Rpb24gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLG91dFU4QXJyYXksb3V0SWR4LG1heEJ5dGVzVG9Xcml0ZSl7aWYoIShtYXhCeXRlc1RvV3JpdGU+MCkpcmV0dXJuIDA7dmFyIHN0YXJ0SWR4PW91dElkeDt2YXIgZW5kSWR4PW91dElkeCttYXhCeXRlc1RvV3JpdGUtMTtmb3IodmFyIGk9MDtpPHN0ci5sZW5ndGg7KytpKXt2YXIgdT1zdHIuY2hhckNvZGVBdChpKTtpZih1Pj01NTI5NiYmdTw9NTczNDMpdT02NTUzNisoKHUmMTAyMyk8PDEwKXxzdHIuY2hhckNvZGVBdCgrK2kpJjEwMjM7aWYodTw9MTI3KXtpZihvdXRJZHg+PWVuZElkeClicmVhaztvdXRVOEFycmF5W291dElkeCsrXT11fWVsc2UgaWYodTw9MjA0Nyl7aWYob3V0SWR4KzE+PWVuZElkeClicmVhaztvdXRVOEFycmF5W291dElkeCsrXT0xOTJ8dT4+NjtvdXRVOEFycmF5W291dElkeCsrXT0xMjh8dSY2M31lbHNlIGlmKHU8PTY1NTM1KXtpZihvdXRJZHgrMj49ZW5kSWR4KWJyZWFrO291dFU4QXJyYXlbb3V0SWR4KytdPTIyNHx1Pj4xMjtvdXRVOEFycmF5W291dElkeCsrXT0xMjh8dT4+NiY2MztvdXRVOEFycmF5W291dElkeCsrXT0xMjh8dSY2M31lbHNlIGlmKHU8PTIwOTcxNTEpe2lmKG91dElkeCszPj1lbmRJZHgpYnJlYWs7b3V0VThBcnJheVtvdXRJZHgrK109MjQwfHU+PjE4O291dFU4QXJyYXlbb3V0SWR4KytdPTEyOHx1Pj4xMiY2MztvdXRVOEFycmF5W291dElkeCsrXT0xMjh8dT4+NiY2MztvdXRVOEFycmF5W291dElkeCsrXT0xMjh8dSY2M31lbHNlIGlmKHU8PTY3MTA4ODYzKXtpZihvdXRJZHgrND49ZW5kSWR4KWJyZWFrO291dFU4QXJyYXlbb3V0SWR4KytdPTI0OHx1Pj4yNDtvdXRVOEFycmF5W291dElkeCsrXT0xMjh8dT4+MTgmNjM7b3V0VThBcnJheVtvdXRJZHgrK109MTI4fHU+PjEyJjYzO291dFU4QXJyYXlbb3V0SWR4KytdPTEyOHx1Pj42JjYzO291dFU4QXJyYXlbb3V0SWR4KytdPTEyOHx1JjYzfWVsc2V7aWYob3V0SWR4KzU+PWVuZElkeClicmVhaztvdXRVOEFycmF5W291dElkeCsrXT0yNTJ8dT4+MzA7b3V0VThBcnJheVtvdXRJZHgrK109MTI4fHU+PjI0JjYzO291dFU4QXJyYXlbb3V0SWR4KytdPTEyOHx1Pj4xOCY2MztvdXRVOEFycmF5W291dElkeCsrXT0xMjh8dT4+MTImNjM7b3V0VThBcnJheVtvdXRJZHgrK109MTI4fHU+PjYmNjM7b3V0VThBcnJheVtvdXRJZHgrK109MTI4fHUmNjN9fW91dFU4QXJyYXlbb3V0SWR4XT0wO3JldHVybiBvdXRJZHgtc3RhcnRJZHh9TW9kdWxlW1wic3RyaW5nVG9VVEY4QXJyYXlcIl09c3RyaW5nVG9VVEY4QXJyYXk7ZnVuY3Rpb24gc3RyaW5nVG9VVEY4KHN0cixvdXRQdHIsbWF4Qnl0ZXNUb1dyaXRlKXtyZXR1cm4gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLEhFQVBVOCxvdXRQdHIsbWF4Qnl0ZXNUb1dyaXRlKX1Nb2R1bGVbXCJzdHJpbmdUb1VURjhcIl09c3RyaW5nVG9VVEY4O2Z1bmN0aW9uIGxlbmd0aEJ5dGVzVVRGOChzdHIpe3ZhciBsZW49MDtmb3IodmFyIGk9MDtpPHN0ci5sZW5ndGg7KytpKXt2YXIgdT1zdHIuY2hhckNvZGVBdChpKTtpZih1Pj01NTI5NiYmdTw9NTczNDMpdT02NTUzNisoKHUmMTAyMyk8PDEwKXxzdHIuY2hhckNvZGVBdCgrK2kpJjEwMjM7aWYodTw9MTI3KXsrK2xlbn1lbHNlIGlmKHU8PTIwNDcpe2xlbis9Mn1lbHNlIGlmKHU8PTY1NTM1KXtsZW4rPTN9ZWxzZSBpZih1PD0yMDk3MTUxKXtsZW4rPTR9ZWxzZSBpZih1PD02NzEwODg2Myl7bGVuKz01fWVsc2V7bGVuKz02fX1yZXR1cm4gbGVufU1vZHVsZVtcImxlbmd0aEJ5dGVzVVRGOFwiXT1sZW5ndGhCeXRlc1VURjg7ZnVuY3Rpb24gVVRGMTZUb1N0cmluZyhwdHIpe3ZhciBpPTA7dmFyIHN0cj1cIlwiO3doaWxlKDEpe3ZhciBjb2RlVW5pdD1IRUFQMTZbcHRyK2kqMj4+MV07aWYoY29kZVVuaXQ9PTApcmV0dXJuIHN0cjsrK2k7c3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVVbml0KX19TW9kdWxlW1wiVVRGMTZUb1N0cmluZ1wiXT1VVEYxNlRvU3RyaW5nO2Z1bmN0aW9uIHN0cmluZ1RvVVRGMTYoc3RyLG91dFB0cixtYXhCeXRlc1RvV3JpdGUpe2lmKG1heEJ5dGVzVG9Xcml0ZT09PXVuZGVmaW5lZCl7bWF4Qnl0ZXNUb1dyaXRlPTIxNDc0ODM2NDd9aWYobWF4Qnl0ZXNUb1dyaXRlPDIpcmV0dXJuIDA7bWF4Qnl0ZXNUb1dyaXRlLT0yO3ZhciBzdGFydFB0cj1vdXRQdHI7dmFyIG51bUNoYXJzVG9Xcml0ZT1tYXhCeXRlc1RvV3JpdGU8c3RyLmxlbmd0aCoyP21heEJ5dGVzVG9Xcml0ZS8yOnN0ci5sZW5ndGg7Zm9yKHZhciBpPTA7aTxudW1DaGFyc1RvV3JpdGU7KytpKXt2YXIgY29kZVVuaXQ9c3RyLmNoYXJDb2RlQXQoaSk7SEVBUDE2W291dFB0cj4+MV09Y29kZVVuaXQ7b3V0UHRyKz0yfUhFQVAxNltvdXRQdHI+PjFdPTA7cmV0dXJuIG91dFB0ci1zdGFydFB0cn1Nb2R1bGVbXCJzdHJpbmdUb1VURjE2XCJdPXN0cmluZ1RvVVRGMTY7ZnVuY3Rpb24gbGVuZ3RoQnl0ZXNVVEYxNihzdHIpe3JldHVybiBzdHIubGVuZ3RoKjJ9TW9kdWxlW1wibGVuZ3RoQnl0ZXNVVEYxNlwiXT1sZW5ndGhCeXRlc1VURjE2O2Z1bmN0aW9uIFVURjMyVG9TdHJpbmcocHRyKXt2YXIgaT0wO3ZhciBzdHI9XCJcIjt3aGlsZSgxKXt2YXIgdXRmMzI9SEVBUDMyW3B0citpKjQ+PjJdO2lmKHV0ZjMyPT0wKXJldHVybiBzdHI7KytpO2lmKHV0ZjMyPj02NTUzNil7dmFyIGNoPXV0ZjMyLTY1NTM2O3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxjaD4+MTAsNTYzMjB8Y2gmMTAyMyl9ZWxzZXtzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUodXRmMzIpfX19TW9kdWxlW1wiVVRGMzJUb1N0cmluZ1wiXT1VVEYzMlRvU3RyaW5nO2Z1bmN0aW9uIHN0cmluZ1RvVVRGMzIoc3RyLG91dFB0cixtYXhCeXRlc1RvV3JpdGUpe2lmKG1heEJ5dGVzVG9Xcml0ZT09PXVuZGVmaW5lZCl7bWF4Qnl0ZXNUb1dyaXRlPTIxNDc0ODM2NDd9aWYobWF4Qnl0ZXNUb1dyaXRlPDQpcmV0dXJuIDA7dmFyIHN0YXJ0UHRyPW91dFB0cjt2YXIgZW5kUHRyPXN0YXJ0UHRyK21heEJ5dGVzVG9Xcml0ZS00O2Zvcih2YXIgaT0wO2k8c3RyLmxlbmd0aDsrK2kpe3ZhciBjb2RlVW5pdD1zdHIuY2hhckNvZGVBdChpKTtpZihjb2RlVW5pdD49NTUyOTYmJmNvZGVVbml0PD01NzM0Myl7dmFyIHRyYWlsU3Vycm9nYXRlPXN0ci5jaGFyQ29kZUF0KCsraSk7Y29kZVVuaXQ9NjU1MzYrKChjb2RlVW5pdCYxMDIzKTw8MTApfHRyYWlsU3Vycm9nYXRlJjEwMjN9SEVBUDMyW291dFB0cj4+Ml09Y29kZVVuaXQ7b3V0UHRyKz00O2lmKG91dFB0cis0PmVuZFB0cilicmVha31IRUFQMzJbb3V0UHRyPj4yXT0wO3JldHVybiBvdXRQdHItc3RhcnRQdHJ9TW9kdWxlW1wic3RyaW5nVG9VVEYzMlwiXT1zdHJpbmdUb1VURjMyO2Z1bmN0aW9uIGxlbmd0aEJ5dGVzVVRGMzIoc3RyKXt2YXIgbGVuPTA7Zm9yKHZhciBpPTA7aTxzdHIubGVuZ3RoOysraSl7dmFyIGNvZGVVbml0PXN0ci5jaGFyQ29kZUF0KGkpO2lmKGNvZGVVbml0Pj01NTI5NiYmY29kZVVuaXQ8PTU3MzQzKSsraTtsZW4rPTR9cmV0dXJuIGxlbn1Nb2R1bGVbXCJsZW5ndGhCeXRlc1VURjMyXCJdPWxlbmd0aEJ5dGVzVVRGMzI7ZnVuY3Rpb24gZGVtYW5nbGUoZnVuYyl7dmFyIGhhc0xpYmN4eGFiaT0hIU1vZHVsZVtcIl9fX2N4YV9kZW1hbmdsZVwiXTtpZihoYXNMaWJjeHhhYmkpe3RyeXt2YXIgYnVmPV9tYWxsb2MoZnVuYy5sZW5ndGgpO3dyaXRlU3RyaW5nVG9NZW1vcnkoZnVuYy5zdWJzdHIoMSksYnVmKTt2YXIgc3RhdHVzPV9tYWxsb2MoNCk7dmFyIHJldD1Nb2R1bGVbXCJfX19jeGFfZGVtYW5nbGVcIl0oYnVmLDAsMCxzdGF0dXMpO2lmKGdldFZhbHVlKHN0YXR1cyxcImkzMlwiKT09PTAmJnJldCl7cmV0dXJuIFBvaW50ZXJfc3RyaW5naWZ5KHJldCl9fWNhdGNoKGUpe31maW5hbGx5e2lmKGJ1ZilfZnJlZShidWYpO2lmKHN0YXR1cylfZnJlZShzdGF0dXMpO2lmKHJldClfZnJlZShyZXQpfX12YXIgaT0zO3ZhciBiYXNpY1R5cGVzPXtcInZcIjpcInZvaWRcIixcImJcIjpcImJvb2xcIixcImNcIjpcImNoYXJcIixcInNcIjpcInNob3J0XCIsXCJpXCI6XCJpbnRcIixcImxcIjpcImxvbmdcIixcImZcIjpcImZsb2F0XCIsXCJkXCI6XCJkb3VibGVcIixcIndcIjpcIndjaGFyX3RcIixcImFcIjpcInNpZ25lZCBjaGFyXCIsXCJoXCI6XCJ1bnNpZ25lZCBjaGFyXCIsXCJ0XCI6XCJ1bnNpZ25lZCBzaG9ydFwiLFwialwiOlwidW5zaWduZWQgaW50XCIsXCJtXCI6XCJ1bnNpZ25lZCBsb25nXCIsXCJ4XCI6XCJsb25nIGxvbmdcIixcInlcIjpcInVuc2lnbmVkIGxvbmcgbG9uZ1wiLFwielwiOlwiLi4uXCJ9O3ZhciBzdWJzPVtdO3ZhciBmaXJzdD10cnVlO2Z1bmN0aW9uIGR1bXAoeCl7aWYoeClNb2R1bGUucHJpbnQoeCk7TW9kdWxlLnByaW50KGZ1bmMpO3ZhciBwcmU9XCJcIjtmb3IodmFyIGE9MDthPGk7YSsrKXByZSs9XCIgXCI7TW9kdWxlLnByaW50KHByZStcIl5cIil9ZnVuY3Rpb24gcGFyc2VOZXN0ZWQoKXtpKys7aWYoZnVuY1tpXT09PVwiS1wiKWkrKzt2YXIgcGFydHM9W107d2hpbGUoZnVuY1tpXSE9PVwiRVwiKXtpZihmdW5jW2ldPT09XCJTXCIpe2krKzt2YXIgbmV4dD1mdW5jLmluZGV4T2YoXCJfXCIsaSk7dmFyIG51bT1mdW5jLnN1YnN0cmluZyhpLG5leHQpfHwwO3BhcnRzLnB1c2goc3Vic1tudW1dfHxcIj9cIik7aT1uZXh0KzE7Y29udGludWV9aWYoZnVuY1tpXT09PVwiQ1wiKXtwYXJ0cy5wdXNoKHBhcnRzW3BhcnRzLmxlbmd0aC0xXSk7aSs9Mjtjb250aW51ZX12YXIgc2l6ZT1wYXJzZUludChmdW5jLnN1YnN0cihpKSk7dmFyIHByZT1zaXplLnRvU3RyaW5nKCkubGVuZ3RoO2lmKCFzaXplfHwhcHJlKXtpLS07YnJlYWt9dmFyIGN1cnI9ZnVuYy5zdWJzdHIoaStwcmUsc2l6ZSk7cGFydHMucHVzaChjdXJyKTtzdWJzLnB1c2goY3Vycik7aSs9cHJlK3NpemV9aSsrO3JldHVybiBwYXJ0c31mdW5jdGlvbiBwYXJzZShyYXdMaXN0LGxpbWl0LGFsbG93Vm9pZCl7bGltaXQ9bGltaXR8fEluZmluaXR5O3ZhciByZXQ9XCJcIixsaXN0PVtdO2Z1bmN0aW9uIGZsdXNoTGlzdCgpe3JldHVyblwiKFwiK2xpc3Quam9pbihcIiwgXCIpK1wiKVwifXZhciBuYW1lO2lmKGZ1bmNbaV09PT1cIk5cIil7bmFtZT1wYXJzZU5lc3RlZCgpLmpvaW4oXCI6OlwiKTtsaW1pdC0tO2lmKGxpbWl0PT09MClyZXR1cm4gcmF3TGlzdD9bbmFtZV06bmFtZX1lbHNle2lmKGZ1bmNbaV09PT1cIktcInx8Zmlyc3QmJmZ1bmNbaV09PT1cIkxcIilpKys7dmFyIHNpemU9cGFyc2VJbnQoZnVuYy5zdWJzdHIoaSkpO2lmKHNpemUpe3ZhciBwcmU9c2l6ZS50b1N0cmluZygpLmxlbmd0aDtuYW1lPWZ1bmMuc3Vic3RyKGkrcHJlLHNpemUpO2krPXByZStzaXplfX1maXJzdD1mYWxzZTtpZihmdW5jW2ldPT09XCJJXCIpe2krKzt2YXIgaUxpc3Q9cGFyc2UodHJ1ZSk7dmFyIGlSZXQ9cGFyc2UodHJ1ZSwxLHRydWUpO3JldCs9aVJldFswXStcIiBcIituYW1lK1wiPFwiK2lMaXN0LmpvaW4oXCIsIFwiKStcIj5cIn1lbHNle3JldD1uYW1lfXBhcmFtTG9vcDp3aGlsZShpPGZ1bmMubGVuZ3RoJiZsaW1pdC0tPjApe3ZhciBjPWZ1bmNbaSsrXTtpZihjIGluIGJhc2ljVHlwZXMpe2xpc3QucHVzaChiYXNpY1R5cGVzW2NdKX1lbHNle3N3aXRjaChjKXtjYXNlXCJQXCI6bGlzdC5wdXNoKHBhcnNlKHRydWUsMSx0cnVlKVswXStcIipcIik7YnJlYWs7Y2FzZVwiUlwiOmxpc3QucHVzaChwYXJzZSh0cnVlLDEsdHJ1ZSlbMF0rXCImXCIpO2JyZWFrO2Nhc2VcIkxcIjp7aSsrO3ZhciBlbmQ9ZnVuYy5pbmRleE9mKFwiRVwiLGkpO3ZhciBzaXplPWVuZC1pO2xpc3QucHVzaChmdW5jLnN1YnN0cihpLHNpemUpKTtpKz1zaXplKzI7YnJlYWt9O2Nhc2VcIkFcIjp7dmFyIHNpemU9cGFyc2VJbnQoZnVuYy5zdWJzdHIoaSkpO2krPXNpemUudG9TdHJpbmcoKS5sZW5ndGg7aWYoZnVuY1tpXSE9PVwiX1wiKXRocm93XCI/XCI7aSsrO2xpc3QucHVzaChwYXJzZSh0cnVlLDEsdHJ1ZSlbMF0rXCIgW1wiK3NpemUrXCJdXCIpO2JyZWFrfTtjYXNlXCJFXCI6YnJlYWsgcGFyYW1Mb29wO2RlZmF1bHQ6cmV0Kz1cIj9cIitjO2JyZWFrIHBhcmFtTG9vcH19fWlmKCFhbGxvd1ZvaWQmJmxpc3QubGVuZ3RoPT09MSYmbGlzdFswXT09PVwidm9pZFwiKWxpc3Q9W107aWYocmF3TGlzdCl7aWYocmV0KXtsaXN0LnB1c2gocmV0K1wiP1wiKX1yZXR1cm4gbGlzdH1lbHNle3JldHVybiByZXQrZmx1c2hMaXN0KCl9fXZhciBwYXJzZWQ9ZnVuYzt0cnl7aWYoZnVuYz09XCJPYmplY3QuX21haW5cInx8ZnVuYz09XCJfbWFpblwiKXtyZXR1cm5cIm1haW4oKVwifWlmKHR5cGVvZiBmdW5jPT09XCJudW1iZXJcIilmdW5jPVBvaW50ZXJfc3RyaW5naWZ5KGZ1bmMpO2lmKGZ1bmNbMF0hPT1cIl9cIilyZXR1cm4gZnVuYztpZihmdW5jWzFdIT09XCJfXCIpcmV0dXJuIGZ1bmM7aWYoZnVuY1syXSE9PVwiWlwiKXJldHVybiBmdW5jO3N3aXRjaChmdW5jWzNdKXtjYXNlXCJuXCI6cmV0dXJuXCJvcGVyYXRvciBuZXcoKVwiO2Nhc2VcImRcIjpyZXR1cm5cIm9wZXJhdG9yIGRlbGV0ZSgpXCJ9cGFyc2VkPXBhcnNlKCl9Y2F0Y2goZSl7cGFyc2VkKz1cIj9cIn1pZihwYXJzZWQuaW5kZXhPZihcIj9cIik+PTAmJiFoYXNMaWJjeHhhYmkpe1J1bnRpbWUud2Fybk9uY2UoXCJ3YXJuaW5nOiBhIHByb2JsZW0gb2NjdXJyZWQgaW4gYnVpbHRpbiBDKysgbmFtZSBkZW1hbmdsaW5nOyBidWlsZCB3aXRoICAtcyBERU1BTkdMRV9TVVBQT1JUPTEgIHRvIGxpbmsgaW4gbGliY3h4YWJpIGRlbWFuZ2xpbmdcIil9cmV0dXJuIHBhcnNlZH1mdW5jdGlvbiBkZW1hbmdsZUFsbCh0ZXh0KXtyZXR1cm4gdGV4dC5yZXBsYWNlKC9fX1pbXFx3XFxkX10rL2csKGZ1bmN0aW9uKHgpe3ZhciB5PWRlbWFuZ2xlKHgpO3JldHVybiB4PT09eT94OngrXCIgW1wiK3krXCJdXCJ9KSl9ZnVuY3Rpb24ganNTdGFja1RyYWNlKCl7dmFyIGVycj1uZXcgRXJyb3I7aWYoIWVyci5zdGFjayl7dHJ5e3Rocm93IG5ldyBFcnJvcigwKX1jYXRjaChlKXtlcnI9ZX1pZighZXJyLnN0YWNrKXtyZXR1cm5cIihubyBzdGFjayB0cmFjZSBhdmFpbGFibGUpXCJ9fXJldHVybiBlcnIuc3RhY2sudG9TdHJpbmcoKX1mdW5jdGlvbiBzdGFja1RyYWNlKCl7cmV0dXJuIGRlbWFuZ2xlQWxsKGpzU3RhY2tUcmFjZSgpKX1Nb2R1bGVbXCJzdGFja1RyYWNlXCJdPXN0YWNrVHJhY2U7dmFyIFBBR0VfU0laRT00MDk2O2Z1bmN0aW9uIGFsaWduTWVtb3J5UGFnZSh4KXtpZih4JTQwOTY+MCl7eCs9NDA5Ni14JTQwOTZ9cmV0dXJuIHh9dmFyIEhFQVA7dmFyIEhFQVA4LEhFQVBVOCxIRUFQMTYsSEVBUFUxNixIRUFQMzIsSEVBUFUzMixIRUFQRjMyLEhFQVBGNjQ7dmFyIFNUQVRJQ19CQVNFPTAsU1RBVElDVE9QPTAsc3RhdGljU2VhbGVkPWZhbHNlO3ZhciBTVEFDS19CQVNFPTAsU1RBQ0tUT1A9MCxTVEFDS19NQVg9MDt2YXIgRFlOQU1JQ19CQVNFPTAsRFlOQU1JQ1RPUD0wO2Z1bmN0aW9uIGFib3J0T25DYW5ub3RHcm93TWVtb3J5KCl7YWJvcnQoXCJDYW5ub3QgZW5sYXJnZSBtZW1vcnkgYXJyYXlzLiBFaXRoZXIgKDEpIGNvbXBpbGUgd2l0aCAgLXMgVE9UQUxfTUVNT1JZPVggIHdpdGggWCBoaWdoZXIgdGhhbiB0aGUgY3VycmVudCB2YWx1ZSBcIitUT1RBTF9NRU1PUlkrXCIsICgyKSBjb21waWxlIHdpdGggIC1zIEFMTE9XX01FTU9SWV9HUk9XVEg9MSAgd2hpY2ggYWRqdXN0cyB0aGUgc2l6ZSBhdCBydW50aW1lIGJ1dCBwcmV2ZW50cyBzb21lIG9wdGltaXphdGlvbnMsICgzKSBzZXQgTW9kdWxlLlRPVEFMX01FTU9SWSB0byBhIGhpZ2hlciB2YWx1ZSBiZWZvcmUgdGhlIHByb2dyYW0gcnVucywgb3IgaWYgeW91IHdhbnQgbWFsbG9jIHRvIHJldHVybiBOVUxMICgwKSBpbnN0ZWFkIG9mIHRoaXMgYWJvcnQsIGNvbXBpbGUgd2l0aCAgLXMgQUJPUlRJTkdfTUFMTE9DPTAgXCIpfWZ1bmN0aW9uIGVubGFyZ2VNZW1vcnkoKXthYm9ydE9uQ2Fubm90R3Jvd01lbW9yeSgpfXZhciBUT1RBTF9TVEFDSz1Nb2R1bGVbXCJUT1RBTF9TVEFDS1wiXXx8NTI0Mjg4MDt2YXIgVE9UQUxfTUVNT1JZPU1vZHVsZVtcIlRPVEFMX01FTU9SWVwiXXx8MzM1NTQ0MzI7dmFyIHRvdGFsTWVtb3J5PTY0KjEwMjQ7d2hpbGUodG90YWxNZW1vcnk8VE9UQUxfTUVNT1JZfHx0b3RhbE1lbW9yeTwyKlRPVEFMX1NUQUNLKXtpZih0b3RhbE1lbW9yeTwxNioxMDI0KjEwMjQpe3RvdGFsTWVtb3J5Kj0yfWVsc2V7dG90YWxNZW1vcnkrPTE2KjEwMjQqMTAyNH19aWYodG90YWxNZW1vcnkhPT1UT1RBTF9NRU1PUlkpe1RPVEFMX01FTU9SWT10b3RhbE1lbW9yeX1hc3NlcnQodHlwZW9mIEludDMyQXJyYXkhPT1cInVuZGVmaW5lZFwiJiZ0eXBlb2YgRmxvYXQ2NEFycmF5IT09XCJ1bmRlZmluZWRcIiYmISEobmV3IEludDMyQXJyYXkoMSkpW1wic3ViYXJyYXlcIl0mJiEhKG5ldyBJbnQzMkFycmF5KDEpKVtcInNldFwiXSxcIkpTIGVuZ2luZSBkb2VzIG5vdCBwcm92aWRlIGZ1bGwgdHlwZWQgYXJyYXkgc3VwcG9ydFwiKTt2YXIgYnVmZmVyO2J1ZmZlcj1uZXcgQXJyYXlCdWZmZXIoVE9UQUxfTUVNT1JZKTtIRUFQOD1uZXcgSW50OEFycmF5KGJ1ZmZlcik7SEVBUDE2PW5ldyBJbnQxNkFycmF5KGJ1ZmZlcik7SEVBUDMyPW5ldyBJbnQzMkFycmF5KGJ1ZmZlcik7SEVBUFU4PW5ldyBVaW50OEFycmF5KGJ1ZmZlcik7SEVBUFUxNj1uZXcgVWludDE2QXJyYXkoYnVmZmVyKTtIRUFQVTMyPW5ldyBVaW50MzJBcnJheShidWZmZXIpO0hFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShidWZmZXIpO0hFQVBGNjQ9bmV3IEZsb2F0NjRBcnJheShidWZmZXIpO0hFQVAzMlswXT0yNTU7YXNzZXJ0KEhFQVBVOFswXT09PTI1NSYmSEVBUFU4WzNdPT09MCxcIlR5cGVkIGFycmF5cyAyIG11c3QgYmUgcnVuIG9uIGEgbGl0dGxlLWVuZGlhbiBzeXN0ZW1cIik7TW9kdWxlW1wiSEVBUFwiXT1IRUFQO01vZHVsZVtcImJ1ZmZlclwiXT1idWZmZXI7TW9kdWxlW1wiSEVBUDhcIl09SEVBUDg7TW9kdWxlW1wiSEVBUDE2XCJdPUhFQVAxNjtNb2R1bGVbXCJIRUFQMzJcIl09SEVBUDMyO01vZHVsZVtcIkhFQVBVOFwiXT1IRUFQVTg7TW9kdWxlW1wiSEVBUFUxNlwiXT1IRUFQVTE2O01vZHVsZVtcIkhFQVBVMzJcIl09SEVBUFUzMjtNb2R1bGVbXCJIRUFQRjMyXCJdPUhFQVBGMzI7TW9kdWxlW1wiSEVBUEY2NFwiXT1IRUFQRjY0O2Z1bmN0aW9uIGNhbGxSdW50aW1lQ2FsbGJhY2tzKGNhbGxiYWNrcyl7d2hpbGUoY2FsbGJhY2tzLmxlbmd0aD4wKXt2YXIgY2FsbGJhY2s9Y2FsbGJhY2tzLnNoaWZ0KCk7aWYodHlwZW9mIGNhbGxiYWNrPT1cImZ1bmN0aW9uXCIpe2NhbGxiYWNrKCk7Y29udGludWV9dmFyIGZ1bmM9Y2FsbGJhY2suZnVuYztpZih0eXBlb2YgZnVuYz09PVwibnVtYmVyXCIpe2lmKGNhbGxiYWNrLmFyZz09PXVuZGVmaW5lZCl7UnVudGltZS5keW5DYWxsKFwidlwiLGZ1bmMpfWVsc2V7UnVudGltZS5keW5DYWxsKFwidmlcIixmdW5jLFtjYWxsYmFjay5hcmddKX19ZWxzZXtmdW5jKGNhbGxiYWNrLmFyZz09PXVuZGVmaW5lZD9udWxsOmNhbGxiYWNrLmFyZyl9fX12YXIgX19BVFBSRVJVTl9fPVtdO3ZhciBfX0FUSU5JVF9fPVtdO3ZhciBfX0FUTUFJTl9fPVtdO3ZhciBfX0FURVhJVF9fPVtdO3ZhciBfX0FUUE9TVFJVTl9fPVtdO3ZhciBydW50aW1lSW5pdGlhbGl6ZWQ9ZmFsc2U7dmFyIHJ1bnRpbWVFeGl0ZWQ9ZmFsc2U7ZnVuY3Rpb24gcHJlUnVuKCl7aWYoTW9kdWxlW1wicHJlUnVuXCJdKXtpZih0eXBlb2YgTW9kdWxlW1wicHJlUnVuXCJdPT1cImZ1bmN0aW9uXCIpTW9kdWxlW1wicHJlUnVuXCJdPVtNb2R1bGVbXCJwcmVSdW5cIl1dO3doaWxlKE1vZHVsZVtcInByZVJ1blwiXS5sZW5ndGgpe2FkZE9uUHJlUnVuKE1vZHVsZVtcInByZVJ1blwiXS5zaGlmdCgpKX19Y2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBSRVJVTl9fKX1mdW5jdGlvbiBlbnN1cmVJbml0UnVudGltZSgpe2lmKHJ1bnRpbWVJbml0aWFsaXplZClyZXR1cm47cnVudGltZUluaXRpYWxpemVkPXRydWU7Y2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVElOSVRfXyl9ZnVuY3Rpb24gcHJlTWFpbigpe2NhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRNQUlOX18pfWZ1bmN0aW9uIGV4aXRSdW50aW1lKCl7Y2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVEVYSVRfXyk7cnVudGltZUV4aXRlZD10cnVlfWZ1bmN0aW9uIHBvc3RSdW4oKXtpZihNb2R1bGVbXCJwb3N0UnVuXCJdKXtpZih0eXBlb2YgTW9kdWxlW1wicG9zdFJ1blwiXT09XCJmdW5jdGlvblwiKU1vZHVsZVtcInBvc3RSdW5cIl09W01vZHVsZVtcInBvc3RSdW5cIl1dO3doaWxlKE1vZHVsZVtcInBvc3RSdW5cIl0ubGVuZ3RoKXthZGRPblBvc3RSdW4oTW9kdWxlW1wicG9zdFJ1blwiXS5zaGlmdCgpKX19Y2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBPU1RSVU5fXyl9ZnVuY3Rpb24gYWRkT25QcmVSdW4oY2Ipe19fQVRQUkVSVU5fXy51bnNoaWZ0KGNiKX1Nb2R1bGVbXCJhZGRPblByZVJ1blwiXT1hZGRPblByZVJ1bjtmdW5jdGlvbiBhZGRPbkluaXQoY2Ipe19fQVRJTklUX18udW5zaGlmdChjYil9TW9kdWxlW1wiYWRkT25Jbml0XCJdPWFkZE9uSW5pdDtmdW5jdGlvbiBhZGRPblByZU1haW4oY2Ipe19fQVRNQUlOX18udW5zaGlmdChjYil9TW9kdWxlW1wiYWRkT25QcmVNYWluXCJdPWFkZE9uUHJlTWFpbjtmdW5jdGlvbiBhZGRPbkV4aXQoY2Ipe19fQVRFWElUX18udW5zaGlmdChjYil9TW9kdWxlW1wiYWRkT25FeGl0XCJdPWFkZE9uRXhpdDtmdW5jdGlvbiBhZGRPblBvc3RSdW4oY2Ipe19fQVRQT1NUUlVOX18udW5zaGlmdChjYil9TW9kdWxlW1wiYWRkT25Qb3N0UnVuXCJdPWFkZE9uUG9zdFJ1bjtmdW5jdGlvbiBpbnRBcnJheUZyb21TdHJpbmcoc3RyaW5neSxkb250QWRkTnVsbCxsZW5ndGgpe3ZhciBsZW49bGVuZ3RoPjA/bGVuZ3RoOmxlbmd0aEJ5dGVzVVRGOChzdHJpbmd5KSsxO3ZhciB1OGFycmF5PW5ldyBBcnJheShsZW4pO3ZhciBudW1CeXRlc1dyaXR0ZW49c3RyaW5nVG9VVEY4QXJyYXkoc3RyaW5neSx1OGFycmF5LDAsdThhcnJheS5sZW5ndGgpO2lmKGRvbnRBZGROdWxsKXU4YXJyYXkubGVuZ3RoPW51bUJ5dGVzV3JpdHRlbjtyZXR1cm4gdThhcnJheX1Nb2R1bGVbXCJpbnRBcnJheUZyb21TdHJpbmdcIl09aW50QXJyYXlGcm9tU3RyaW5nO2Z1bmN0aW9uIGludEFycmF5VG9TdHJpbmcoYXJyYXkpe3ZhciByZXQ9W107Zm9yKHZhciBpPTA7aTxhcnJheS5sZW5ndGg7aSsrKXt2YXIgY2hyPWFycmF5W2ldO2lmKGNocj4yNTUpe2NociY9MjU1fXJldC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyKSl9cmV0dXJuIHJldC5qb2luKFwiXCIpfU1vZHVsZVtcImludEFycmF5VG9TdHJpbmdcIl09aW50QXJyYXlUb1N0cmluZztmdW5jdGlvbiB3cml0ZVN0cmluZ1RvTWVtb3J5KHN0cmluZyxidWZmZXIsZG9udEFkZE51bGwpe3ZhciBhcnJheT1pbnRBcnJheUZyb21TdHJpbmcoc3RyaW5nLGRvbnRBZGROdWxsKTt2YXIgaT0wO3doaWxlKGk8YXJyYXkubGVuZ3RoKXt2YXIgY2hyPWFycmF5W2ldO0hFQVA4W2J1ZmZlcitpPj4wXT1jaHI7aT1pKzF9fU1vZHVsZVtcIndyaXRlU3RyaW5nVG9NZW1vcnlcIl09d3JpdGVTdHJpbmdUb01lbW9yeTtmdW5jdGlvbiB3cml0ZUFycmF5VG9NZW1vcnkoYXJyYXksYnVmZmVyKXtmb3IodmFyIGk9MDtpPGFycmF5Lmxlbmd0aDtpKyspe0hFQVA4W2J1ZmZlcisrPj4wXT1hcnJheVtpXX19TW9kdWxlW1wid3JpdGVBcnJheVRvTWVtb3J5XCJdPXdyaXRlQXJyYXlUb01lbW9yeTtmdW5jdGlvbiB3cml0ZUFzY2lpVG9NZW1vcnkoc3RyLGJ1ZmZlcixkb250QWRkTnVsbCl7Zm9yKHZhciBpPTA7aTxzdHIubGVuZ3RoOysraSl7SEVBUDhbYnVmZmVyKys+PjBdPXN0ci5jaGFyQ29kZUF0KGkpfWlmKCFkb250QWRkTnVsbClIRUFQOFtidWZmZXI+PjBdPTB9TW9kdWxlW1wid3JpdGVBc2NpaVRvTWVtb3J5XCJdPXdyaXRlQXNjaWlUb01lbW9yeTtmdW5jdGlvbiB1blNpZ24odmFsdWUsYml0cyxpZ25vcmUpe2lmKHZhbHVlPj0wKXtyZXR1cm4gdmFsdWV9cmV0dXJuIGJpdHM8PTMyPzIqTWF0aC5hYnMoMTw8Yml0cy0xKSt2YWx1ZTpNYXRoLnBvdygyLGJpdHMpK3ZhbHVlfWZ1bmN0aW9uIHJlU2lnbih2YWx1ZSxiaXRzLGlnbm9yZSl7aWYodmFsdWU8PTApe3JldHVybiB2YWx1ZX12YXIgaGFsZj1iaXRzPD0zMj9NYXRoLmFicygxPDxiaXRzLTEpOk1hdGgucG93KDIsYml0cy0xKTtpZih2YWx1ZT49aGFsZiYmKGJpdHM8PTMyfHx2YWx1ZT5oYWxmKSl7dmFsdWU9LTIqaGFsZit2YWx1ZX1yZXR1cm4gdmFsdWV9aWYoIU1hdGhbXCJpbXVsXCJdfHxNYXRoW1wiaW11bFwiXSg0Mjk0OTY3Mjk1LDUpIT09LTUpTWF0aFtcImltdWxcIl09ZnVuY3Rpb24gaW11bChhLGIpe3ZhciBhaD1hPj4+MTY7dmFyIGFsPWEmNjU1MzU7dmFyIGJoPWI+Pj4xNjt2YXIgYmw9YiY2NTUzNTtyZXR1cm4gYWwqYmwrKGFoKmJsK2FsKmJoPDwxNil8MH07TWF0aC5pbXVsPU1hdGhbXCJpbXVsXCJdO2lmKCFNYXRoW1wiY2x6MzJcIl0pTWF0aFtcImNsejMyXCJdPShmdW5jdGlvbih4KXt4PXg+Pj4wO2Zvcih2YXIgaT0wO2k8MzI7aSsrKXtpZih4JjE8PDMxLWkpcmV0dXJuIGl9cmV0dXJuIDMyfSk7TWF0aC5jbHozMj1NYXRoW1wiY2x6MzJcIl07dmFyIE1hdGhfYWJzPU1hdGguYWJzO3ZhciBNYXRoX2Nvcz1NYXRoLmNvczt2YXIgTWF0aF9zaW49TWF0aC5zaW47dmFyIE1hdGhfdGFuPU1hdGgudGFuO3ZhciBNYXRoX2Fjb3M9TWF0aC5hY29zO3ZhciBNYXRoX2FzaW49TWF0aC5hc2luO3ZhciBNYXRoX2F0YW49TWF0aC5hdGFuO3ZhciBNYXRoX2F0YW4yPU1hdGguYXRhbjI7dmFyIE1hdGhfZXhwPU1hdGguZXhwO3ZhciBNYXRoX2xvZz1NYXRoLmxvZzt2YXIgTWF0aF9zcXJ0PU1hdGguc3FydDt2YXIgTWF0aF9jZWlsPU1hdGguY2VpbDt2YXIgTWF0aF9mbG9vcj1NYXRoLmZsb29yO3ZhciBNYXRoX3Bvdz1NYXRoLnBvdzt2YXIgTWF0aF9pbXVsPU1hdGguaW11bDt2YXIgTWF0aF9mcm91bmQ9TWF0aC5mcm91bmQ7dmFyIE1hdGhfbWluPU1hdGgubWluO3ZhciBNYXRoX2NsejMyPU1hdGguY2x6MzI7dmFyIHJ1bkRlcGVuZGVuY2llcz0wO3ZhciBydW5EZXBlbmRlbmN5V2F0Y2hlcj1udWxsO3ZhciBkZXBlbmRlbmNpZXNGdWxmaWxsZWQ9bnVsbDtmdW5jdGlvbiBnZXRVbmlxdWVSdW5EZXBlbmRlbmN5KGlkKXtyZXR1cm4gaWR9ZnVuY3Rpb24gYWRkUnVuRGVwZW5kZW5jeShpZCl7cnVuRGVwZW5kZW5jaWVzKys7aWYoTW9kdWxlW1wibW9uaXRvclJ1bkRlcGVuZGVuY2llc1wiXSl7TW9kdWxlW1wibW9uaXRvclJ1bkRlcGVuZGVuY2llc1wiXShydW5EZXBlbmRlbmNpZXMpfX1Nb2R1bGVbXCJhZGRSdW5EZXBlbmRlbmN5XCJdPWFkZFJ1bkRlcGVuZGVuY3k7ZnVuY3Rpb24gcmVtb3ZlUnVuRGVwZW5kZW5jeShpZCl7cnVuRGVwZW5kZW5jaWVzLS07aWYoTW9kdWxlW1wibW9uaXRvclJ1bkRlcGVuZGVuY2llc1wiXSl7TW9kdWxlW1wibW9uaXRvclJ1bkRlcGVuZGVuY2llc1wiXShydW5EZXBlbmRlbmNpZXMpfWlmKHJ1bkRlcGVuZGVuY2llcz09MCl7aWYocnVuRGVwZW5kZW5jeVdhdGNoZXIhPT1udWxsKXtjbGVhckludGVydmFsKHJ1bkRlcGVuZGVuY3lXYXRjaGVyKTtydW5EZXBlbmRlbmN5V2F0Y2hlcj1udWxsfWlmKGRlcGVuZGVuY2llc0Z1bGZpbGxlZCl7dmFyIGNhbGxiYWNrPWRlcGVuZGVuY2llc0Z1bGZpbGxlZDtkZXBlbmRlbmNpZXNGdWxmaWxsZWQ9bnVsbDtjYWxsYmFjaygpfX19TW9kdWxlW1wicmVtb3ZlUnVuRGVwZW5kZW5jeVwiXT1yZW1vdmVSdW5EZXBlbmRlbmN5O01vZHVsZVtcInByZWxvYWRlZEltYWdlc1wiXT17fTtNb2R1bGVbXCJwcmVsb2FkZWRBdWRpb3NcIl09e307dmFyIG1lbW9yeUluaXRpYWxpemVyPW51bGw7dmFyIEFTTV9DT05TVFM9WyhmdW5jdGlvbigpe3tyZXR1cm4gTW9kdWxlLmdldFJhbmRvbVZhbHVlKCl9fSksKGZ1bmN0aW9uKCl7e2lmKE1vZHVsZS5nZXRSYW5kb21WYWx1ZT09PXVuZGVmaW5lZCl7dHJ5e3ZhciB3aW5kb3dfPVwib2JqZWN0XCI9PT10eXBlb2Ygd2luZG93P3dpbmRvdzpzZWxmLGNyeXB0b189dHlwZW9mIHdpbmRvd18uY3J5cHRvIT09XCJ1bmRlZmluZWRcIj93aW5kb3dfLmNyeXB0bzp3aW5kb3dfLm1zQ3J5cHRvLHJhbmRvbVZhbHVlc1N0YW5kYXJkPShmdW5jdGlvbigpe3ZhciBidWY9bmV3IFVpbnQzMkFycmF5KDEpO2NyeXB0b18uZ2V0UmFuZG9tVmFsdWVzKGJ1Zik7cmV0dXJuIGJ1ZlswXT4+PjB9KTtyYW5kb21WYWx1ZXNTdGFuZGFyZCgpO01vZHVsZS5nZXRSYW5kb21WYWx1ZT1yYW5kb21WYWx1ZXNTdGFuZGFyZH1jYXRjaChlKXt0cnl7dmFyIGNyeXB0bz1yZXF1aXJlKFwiY3J5cHRvXCIpLHJhbmRvbVZhbHVlTm9kZUpTPShmdW5jdGlvbigpe3ZhciBidWY9Y3J5cHRvLnJhbmRvbUJ5dGVzKDQpO3JldHVybihidWZbMF08PDI0fGJ1ZlsxXTw8MTZ8YnVmWzJdPDw4fGJ1ZlszXSk+Pj4wfSk7cmFuZG9tVmFsdWVOb2RlSlMoKTtNb2R1bGUuZ2V0UmFuZG9tVmFsdWU9cmFuZG9tVmFsdWVOb2RlSlN9Y2F0Y2goZSl7dGhyb3dcIk5vIHNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBmb3VuZFwifX19fX0pXTtmdW5jdGlvbiBfZW1zY3JpcHRlbl9hc21fY29uc3RfMChjb2RlKXtyZXR1cm4gQVNNX0NPTlNUU1tjb2RlXSgpfVNUQVRJQ19CQVNFPTg7U1RBVElDVE9QPVNUQVRJQ19CQVNFKzM0OTQ0O19fQVRJTklUX18ucHVzaCgpO2FsbG9jYXRlKFs4LDIwMSwxODgsMjQzLDEwMywyMzAsOSwxMDYsNTksMTY3LDIwMiwxMzIsMTMzLDE3NCwxMDMsMTg3LDQzLDI0OCwxNDgsMjU0LDExNCwyNDMsMTEwLDYwLDI0MSw1NCwyOSw5NSw1OCwyNDUsNzksMTY1LDIwOSwxMzAsMjMwLDE3MywxMjcsODIsMTQsODEsMzEsMTA4LDYyLDQzLDE0MCwxMDQsNSwxNTUsMTA3LDE4OSw2NSwyNTEsMTcxLDIxNywxMzEsMzEsMTIxLDMzLDEyNiwxOSwyNSwyMDUsMjI0LDkxLDEwMywyMzAsOSwxMDYsMTMzLDE3NCwxMDMsMTg3LDExNCwyNDMsMTEwLDYwLDU4LDI0NSw3OSwxNjUsMTI3LDgyLDE0LDgxLDE0MCwxMDQsNSwxNTUsMTcxLDIxNywxMzEsMzEsMjUsMjA1LDIyNCw5MSwxMzMsNTksMTQwLDEsMTg5LDI0MSwzNiwyNTUsMjQ4LDM3LDE5NSwxLDk2LDIyMCw1NSwwLDE4Myw3Niw2MiwyNTUsMTk1LDY2LDYxLDAsNTAsNzYsMTY0LDEsMjI1LDE2NCw3NiwyNTUsNzYsNjEsMTYzLDI1NSwxMTcsNjIsMzEsMCw4MSwxNDUsNjQsMjU1LDExOCw2NSwxNCwwLDE2MiwxMTUsMjE0LDI1NSw2LDEzOCw0NiwwLDEyNCwyMzAsMjQ0LDI1NSwxMCwxMzgsMTQzLDAsNTIsMjYsMTk0LDAsMTg0LDI0NCw3NiwwLDEyOSwxNDMsNDEsMSwxOTAsMjQ0LDE5LDI1NSwxMjMsMTcwLDEyMiwyNTUsOTgsMTI5LDY4LDAsMTIxLDIxMywxNDcsMCw4NiwxMDEsMzAsMjU1LDE2MSwxMDMsMTU1LDAsMTQwLDg5LDY3LDI1NSwyMzksMjI5LDE5MCwxLDY3LDExLDE4MSwwLDE5OCwyNDAsMTM3LDI1NCwyMzgsNjksMTg4LDI1NSw2NywxNTEsMjM4LDAsMTksNDIsMTA4LDI1NSwyMjksODUsMTEzLDEsNTAsNjgsMTM1LDI1NSwxNywxMDYsOSwwLDUwLDEwMywxLDI1NSw4MCwxLDE2OCwxLDM1LDE1MiwzMCwyNTUsMTYsMTY4LDE4NSwxLDU2LDg5LDIzMiwyNTUsMTAxLDIxMCwyNTIsMCw0MSwyNTAsNzEsMCwyMDQsMTcwLDc5LDI1NSwxNCw0NiwyMzksMjU1LDgwLDc3LDIzOSwwLDE4OSwyMTQsNzUsMjU1LDE3LDE0MSwyNDksMCwzOCw4MCw3NiwyNTUsMTkwLDg1LDExNywwLDg2LDIyOCwxNzAsMCwxNTYsMjE2LDIwOCwxLDE5NSwyMDcsMTY0LDI1NSwxNTAsNjYsNzYsMjU1LDE3NSwyMjUsMTYsMjU1LDE0MSw4MCw5OCwxLDc2LDIxOSwyNDIsMCwxOTgsMTYyLDExNCwwLDQ2LDIxOCwxNTIsMCwxNTUsNDMsMjQxLDI1NCwxNTUsMTYwLDEwNCwyNTUsNTEsMTg3LDE2NSwwLDIsMTcsMTc1LDAsNjYsODQsMTYwLDEsMjQ3LDU4LDMwLDAsMzUsNjUsNTMsMjU0LDY5LDIzNiwxOTEsMCw0NSwxMzQsMjQ1LDEsMTYzLDEyMywyMjEsMCwzMiwxMTAsMjAsMjU1LDUyLDIzLDE2NSwwLDE4NiwyMTQsNzEsMCwyMzMsMTc2LDk2LDAsMjQyLDIzOSw1NCwxLDU3LDg5LDEzOCwwLDgzLDAsODQsMjU1LDEzNiwxNjAsMTAwLDAsOTIsMTQyLDEyMCwyNTQsMTA0LDEyNCwxOTAsMCwxODEsMTc3LDYyLDI1NSwyNTAsNDEsODUsMCwxNTIsMTMwLDQyLDEsOTYsMjUyLDI0NiwwLDE1MSwxNTEsNjMsMjU0LDIzOSwxMzMsNjIsMCwzMiw1NiwxNTYsMCw0NSwxNjcsMTg5LDI1NSwxNDIsMTMzLDE3OSwxLDEzMSw4NiwyMTEsMCwxODcsMTc5LDE1MCwyNTQsMjUwLDE3MCwxNCwyNTUsMjEwLDE2Myw3OCwwLDM3LDUyLDE1MSwwLDk5LDc3LDI2LDAsMjM4LDE1NiwyMTMsMjU1LDIxMywxOTIsMjA5LDEsNzMsNDYsODQsMCwyMCw2NSw0MSwxLDU0LDIwNiw3OSwwLDIwMSwxMzEsMTQ2LDI1NCwxNzAsMTExLDI0LDI1NSwxNzcsMzMsNTAsMjU0LDE3MSwzOCwyMDMsMjU1LDc4LDI0NywxMTYsMCwyMDksMjIxLDE1MywwLDEzMywxMjgsMTc4LDEsNTgsNDQsMjUsMCwyMDEsMzksNTksMSwxODksMTksMjUyLDAsNDksMjI5LDIxMCwxLDExNywxODcsMTE3LDAsMTgxLDE3OSwxODQsMSwwLDExNCwyMTksMCw0OCw5NCwxNDcsMCwyNDUsNDEsNTYsMCwxMjUsMTMsMjA0LDI1NCwyNDQsMTczLDExOSwwLDQ0LDIyMSwzMiwyNTQsODQsMjM0LDIwLDAsMjQ5LDE2MCwxOTgsMSwyMzYsMTI2LDIzNCwyNTUsNDcsOTksMTY4LDI1NCwxNzAsMjI2LDE1MywyNTUsMTAyLDE3OSwyMTYsMCwyMjYsMTQxLDEyMiwyNTUsMTIyLDY2LDE1MywyNTQsMTgyLDI0NSwxMzQsMCwyMjcsMjI4LDI1LDEsMjE0LDU3LDIzNSwyNTUsMjE2LDE3Myw1NiwyNTUsMTgxLDIzMSwyMTAsMCwxMTksMTI4LDE1NywyNTUsMTI5LDk1LDEzNiwyNTUsMTEwLDEyNiw1MSwwLDIsMTY5LDE4MywyNTUsNywxMzAsOTgsMjU0LDY5LDE3Niw5NCwyNTUsMTE2LDQsMjI3LDEsMjE3LDI0MiwxNDUsMjU1LDIwMiwxNzMsMzEsMSwxMDUsMSwzOSwyNTUsNDYsMTc1LDY5LDAsMjI4LDQ3LDU4LDI1NSwyMTUsMjI0LDY5LDI1NCwyMDcsNTYsNjksMjU1LDE2LDI1NCwxMzksMjU1LDIzLDIwNywyMTIsMjU1LDIwMiwyMCwxMjYsMjU1LDk1LDIxMyw5NiwyNTUsOSwxNzYsMzMsMCwyMDAsNSwyMDcsMjU1LDI0MSw0MiwxMjgsMjU0LDM1LDMzLDE5MiwyNTUsMjQ4LDIyOSwxOTYsMSwxMjksMTcsMTIwLDAsMjUxLDEwMywxNTEsMjU1LDcsNTIsMTEyLDI1NSwxNDAsNTYsNjYsMjU1LDQwLDIyNiwyNDUsMjU1LDIxNyw3MCwzNywyNTQsMTcyLDIxNCw5LDI1NSw3Miw2NywxMzQsMSwxNDYsMTkyLDIxNCwyNTUsNDQsMzgsMTEyLDAsNjgsMTg0LDc1LDI1NSwyMDYsOTAsMjUxLDAsMTQ5LDIzNSwxNDEsMCwxODEsMTcwLDU4LDAsMTE2LDI0NCwyMzksMCw5MiwxNTcsMiwwLDEwMiwxNzMsOTgsMCwyMzMsMTM3LDk2LDEsMTI3LDQ5LDIwMywwLDUsMTU1LDE0OCwwLDIzLDE0OCw5LDI1NSwyMTEsMTIyLDEyLDAsMzQsMTM0LDI2LDI1NSwyMTksMjA0LDEzNiwwLDEzNCw4LDQxLDI1NSwyMjQsODMsNDMsMjU0LDg1LDI1LDI0NywwLDEwOSwxMjcsMCwyNTQsMTY5LDEzNiw0OCwwLDIzOCwxMTksMjE5LDI1NSwyMzEsMTczLDIxMywwLDIwNiwxOCwyNTQsMjU0LDgsMTg2LDcsMjU1LDEyNiw5LDcsMSwxMTEsNDIsNzIsMCwxMTEsNTIsMjM2LDI1NCw5Niw2MywxNDEsMCwxNDcsMTkxLDEyNywyNTQsMjA1LDc4LDE5MiwyNTUsMTQsMTA2LDIzNywxLDE4NywyMTksNzYsMCwxNzUsMjQzLDE4NywyNTQsMTA1LDg5LDE3MywwLDg1LDI1LDg5LDEsMTYyLDI0MywxNDgsMCwyLDExOCwyMDksMjU0LDMzLDE1OCw5LDAsMTM5LDE2Myw0NiwyNTUsOTMsNzAsNDAsMCwxMDgsNDIsMTQyLDI1NCwxMTEsMjUyLDE0MiwyNTUsMTU1LDIyMywxNDQsMCw1MSwyMjksMTY3LDI1NSw3MywyNTIsMTU1LDI1NSw5NCwxMTYsMTIsMjU1LDE1MiwxNjAsMjE4LDI1NSwxNTYsMjM4LDM3LDI1NSwxNzksMjM0LDIwNywyNTUsMTk3LDAsMTc5LDI1NSwxNTQsMTY0LDE0MSwwLDIyNSwxOTYsMTA0LDAsMTAsMzUsMjUsMjU0LDIwOSwyMTIsMjQyLDI1NSw5NywyNTMsMjIyLDI1NCwxODQsMTAxLDIyOSwwLDIyMiwxOCwxMjcsMSwxNjQsMTM2LDEzNSwyNTUsMzAsMjA3LDE0MCwyNTQsMTQ2LDk3LDI0MywwLDEyOSwxOTIsMjYsMjU0LDIwMSw4NCwzMywyNTUsMTExLDEwLDc4LDI1NSwxNDcsODEsMTc4LDI1NSw0LDQsMjQsMCwxNjEsMjM4LDIxNSwyNTUsNiwxNDEsMzMsMCw1MywyMTUsMTQsMjU1LDQxLDE4MSwyMDgsMjU1LDIzMSwxMzksMTU3LDAsMTc5LDIwMywyMjEsMjU1LDI1NSwxODUsMTEzLDAsMTg5LDIyNiwxNzIsMjU1LDExMyw2NiwyMTQsMjU1LDIwMiw2Miw0NSwyNTUsMTAyLDY0LDgsMjU1LDc4LDE3NCwxNiwyNTQsMTMzLDExNyw2OCwyNTUsMTgyLDEyMCw4OSwyNTUsMTMzLDExNCwyMTEsMCwxODksMTEwLDIxLDI1NSwxNSwxMCwxMDYsMCw0MSwxOTIsMSwwLDE1MiwyMzIsMTIxLDI1NSwxODgsNjAsMTYwLDI1NSwxNTMsMTEzLDIwNiwyNTUsMCwxODMsMjI2LDI1NCwxODAsMTMsNzIsMjU1LDE3NiwxNjAsMTQsMjU0LDIxMSwyMDEsMTM0LDI1NSwxNTgsMjQsMTQzLDAsMTI3LDEwNSw1MywwLDk2LDEyLDE4OSwwLDE2NywyMTUsMjUxLDI1NSwxNTksNzYsMTI4LDI1NCwxMDYsMTAxLDIyNSwyNTUsMzAsMjUyLDQsMCwxNDYsMTIsMTc0LDAsODksMjQxLDE3OCwyNTQsMTAsMjI5LDE2NiwyNTUsMTIzLDIyMSw0MiwyNTQsMzAsMjAsMjEyLDAsODIsMTI4LDMsMCw0OCwyMDksMjQzLDAsMTE5LDEyMSw2NCwyNTUsNTAsMjI3LDE1NiwyNTUsMCwxMTAsMTk3LDEsMTAzLDI3LDE0NCwwLDEzMyw1OSwxNDAsMSwxODksMjQxLDM2LDI1NSwyNDgsMzcsMTk1LDEsOTYsMjIwLDU1LDAsMTgzLDc2LDYyLDI1NSwxOTUsNjYsNjEsMCw1MCw3NiwxNjQsMSwyMjUsMTY0LDc2LDI1NSw3Niw2MSwxNjMsMjU1LDExNyw2MiwzMSwwLDgxLDE0NSw2NCwyNTUsMTE4LDY1LDE0LDAsMTYyLDExNSwyMTQsMjU1LDYsMTM4LDQ2LDAsMTI0LDIzMCwyNDQsMjU1LDEwLDEzOCwxNDMsMCw1MiwyNiwxOTQsMCwxODQsMjQ0LDc2LDAsMTI5LDE0Myw0MSwxLDE5MCwyNDQsMTksMjU1LDEyMywxNzAsMTIyLDI1NSw5OCwxMjksNjgsMCwxMjEsMjEzLDE0NywwLDg2LDEwMSwzMCwyNTUsMTYxLDEwMywxNTUsMCwxNDAsODksNjcsMjU1LDIzOSwyMjksMTkwLDEsNjcsMTEsMTgxLDAsMTk4LDI0MCwxMzcsMjU0LDIzOCw2OSwxODgsMjU1LDIzNCwxMTMsNjAsMjU1LDM3LDI1NSw1NywyNTUsNjksMTc4LDE4MiwyNTQsMTI4LDIwOCwxNzksMCwxMTgsMjYsMTI1LDI1NCwzLDcsMjE0LDI1NSwyNDEsNTAsNzcsMjU1LDg1LDIwMywxOTcsMjU1LDIxMSwxMzUsMjUwLDI1NSwyNSw0OCwxMDAsMjU1LDE4NywyMTMsMTgwLDI1NCwxNyw4OCwxMDUsMCw4MywyMDksMTU4LDEsNSwxMTUsOTgsMCw0LDE3NCw2MCwyNTQsMTcxLDU1LDExMCwyNTUsMjE3LDE4MSwxNywyNTUsMjAsMTg4LDE3MCwwLDE0NiwxNTYsMTAyLDI1NCw4NywyMTQsMTc0LDI1NSwxMTQsMTIyLDE1NSwxLDIzMyw0NCwxNzAsMCwxMjcsOCwyMzksMSwyMTQsMjM2LDIzNCwwLDE3NSw1LDIxOSwwLDQ5LDEwNiw2MSwyNTUsNiw2NiwyMDgsMjU1LDIsMTA2LDExMCwyNTUsODEsMjM0LDE5LDI1NSwyMTUsMTA3LDE5MiwyNTUsNjcsMTUxLDIzOCwwLDE5LDQyLDEwOCwyNTUsMjI5LDg1LDExMywxLDUwLDY4LDEzNSwyNTUsMTcsMTA2LDksMCw1MCwxMDMsMSwyNTUsODAsMSwxNjgsMSwzNSwxNTIsMzAsMjU1LDE2LDE2OCwxODUsMSw1Niw4OSwyMzIsMjU1LDEwMSwyMTAsMjUyLDAsNDEsMjUwLDcxLDAsMjA0LDE3MCw3OSwyNTUsMTQsNDYsMjM5LDI1NSw4MCw3NywyMzksMCwxODksMjE0LDc1LDI1NSwxNywxNDEsMjQ5LDAsMzgsODAsNzYsMjU1LDE5MCw4NSwxMTcsMCw4NiwyMjgsMTcwLDAsMTU2LDIxNiwyMDgsMSwxOTUsMjA3LDE2NCwyNTUsMTUwLDY2LDc2LDI1NSwxNzUsMjI1LDE2LDI1NSwxNDEsODAsOTgsMSw3NiwyMTksMjQyLDAsMTk4LDE2MiwxMTQsMCw0NiwyMTgsMTUyLDAsMTU1LDQzLDI0MSwyNTQsMTU1LDE2MCwxMDQsMjU1LDE3OCw5LDI1MiwyNTQsMTAwLDExMCwyMTIsMCwxNCw1LDE2NywwLDIzMywyMzksMTYzLDI1NSwyOCwxNTEsMTU3LDEsMTAxLDE0NiwxMCwyNTUsMjU0LDE1OCw3MCwyNTQsNzEsMjQ5LDIyOCwwLDg4LDMwLDUwLDAsNjgsNTgsMTYwLDI1NSwxOTEsMjQsMTA0LDEsMTI5LDY2LDEyOSwyNTUsMTkyLDUwLDg1LDI1NSw4LDE3OSwxMzgsMjU1LDM4LDI1MCwyMDEsMCwxMTUsODAsMTYwLDAsMTMxLDIzMCwxMTMsMCwxMjUsODgsMTQ3LDAsOTAsNjgsMTk5LDAsMjUzLDc2LDE1OCwwLDI4LDI1NSwxMTgsMCwxMTMsMjUwLDI1NCwwLDY2LDc1LDQ2LDAsMjMwLDIxOCw0MywwLDIyOSwxMjAsMTg2LDEsMTQ4LDY4LDQzLDAsMTM2LDEyNCwyMzgsMSwxODcsMTA3LDE5NywyNTUsODQsNTMsMjQ2LDI1NSw1MSwxMTYsMjU0LDI1NSw1MSwxODcsMTY1LDAsMiwxNywxNzUsMCw2Niw4NCwxNjAsMSwyNDcsNTgsMzAsMCwzNSw2NSw1MywyNTQsNjksMjM2LDE5MSwwLDQ1LDEzNCwyNDUsMSwxNjMsMTIzLDIyMSwwLDMyLDExMCwyMCwyNTUsNTIsMjMsMTY1LDAsMTg2LDIxNCw3MSwwLDIzMywxNzYsOTYsMCwyNDIsMjM5LDU0LDEsNTcsODksMTM4LDAsODMsMCw4NCwyNTUsMTM2LDE2MCwxMDAsMCw5MiwxNDIsMTIwLDI1NCwxMDQsMTI0LDE5MCwwLDE4MSwxNzcsNjIsMjU1LDI1MCw0MSw4NSwwLDE1MiwxMzAsNDIsMSw5NiwyNTIsMjQ2LDAsMTUxLDE1MSw2MywyNTQsMjM5LDEzMyw2MiwwLDMyLDU2LDE1NiwwLDQ1LDE2NywxODksMjU1LDE0MiwxMzMsMTc5LDEsMTMxLDg2LDIxMSwwLDE4NywxNzksMTUwLDI1NCwyNTAsMTcwLDE0LDI1NSw2OCwxMTMsMjEsMjU1LDIyMiwxODYsNTksMjU1LDY2LDcsMjQxLDEsNjksNiw3MiwwLDg2LDE1NiwxMDgsMjU0LDU1LDE2Nyw4OSwwLDEwOSw1MiwyMTksMjU0LDEzLDE3NiwyMywyNTUsMTk2LDQ0LDEwNiwyNTUsMjM5LDE0OSw3MSwyNTUsMTY0LDE0MCwxMjUsMjU1LDE1OSwxNzMsMSwwLDUxLDQxLDIzMSwwLDE0NSw2MiwzMywwLDEzOCwxMTEsOTMsMSwxODUsODMsNjksMCwxNDQsMTE1LDQ2LDAsOTcsMTUxLDE2LDI1NSwyNCwyMjgsMjYsMCw0OSwyMTcsMjI2LDAsMTEzLDc1LDIzNCwyNTQsMTkzLDE1MywxMiwyNTUsMTgyLDQ4LDk2LDI1NSwxNCwxMywyNiwwLDEyOCwxOTUsMjQ5LDI1NCw2OSwxOTMsNTksMCwxMzIsMzcsODEsMjU0LDEyNSwxMDYsNjAsMCwyMTQsMjQwLDE2OSwxLDE2NCwyMjcsNjYsMCwyMTAsMTYzLDc4LDAsMzcsNTIsMTUxLDAsOTksNzcsMjYsMCwyMzgsMTU2LDIxMywyNTUsMjEzLDE5MiwyMDksMSw3Myw0Niw4NCwwLDIwLDY1LDQxLDEsNTQsMjA2LDc5LDAsMjAxLDEzMSwxNDYsMjU0LDE3MCwxMTEsMjQsMjU1LDE3NywzMyw1MCwyNTQsMTcxLDM4LDIwMywyNTUsNzgsMjQ3LDExNiwwLDIwOSwyMjEsMTUzLDAsMTMzLDEyOCwxNzgsMSw1OCw0NCwyNSwwLDIwMSwzOSw1OSwxLDE4OSwxOSwyNTIsMCw0OSwyMjksMjEwLDEsMTE3LDE4NywxMTcsMCwxODEsMTc5LDE4NCwxLDAsMTE0LDIxOSwwLDQ4LDk0LDE0NywwLDI0NSw0MSw1NiwwLDEyNSwxMywyMDQsMjU0LDI0NCwxNzMsMTE5LDAsNDQsMjIxLDMyLDI1NCw4NCwyMzQsMjAsMCwyNDksMTYwLDE5OCwxLDIzNiwxMjYsMjM0LDI1NSwxNDMsNjIsMjIxLDAsMTI5LDg5LDIxNCwyNTUsNTUsMTM5LDUsMjU0LDY4LDIwLDE5MSwyNTUsMTQsMjA0LDE3OCwxLDM1LDE5NSwyMTcsMCw0Nyw1MSwyMDYsMSwzOCwyNDYsMTY1LDAsMjA2LDI3LDYsMjU0LDE1OCw4NywzNiwwLDIxNyw1MiwxNDYsMjU1LDEyNSwxMjMsMjE1LDI1NSw4NSw2MCwzMSwyNTUsMTcxLDEzLDcsMCwyMTgsMjQ1LDg4LDI1NCwyNTIsMzUsNjAsMCw1NSwyMTQsMTYwLDI1NSwxMzMsMTAxLDU2LDAsMjI0LDMyLDE5LDI1NCwxNDcsNjQsMjM0LDAsMjYsMTQ1LDE2MiwxLDExNCwxMTgsMTI1LDAsMjQ4LDI1MiwyNTAsMCwxMDEsOTQsMTk2LDI1NSwxOTgsMTQxLDIyNiwyNTQsNTEsNDIsMTgyLDAsMTM1LDEyLDksMjU0LDEwOSwxNzIsMjEwLDI1NSwxOTcsMjM2LDE5NCwxLDI0MSw2NSwxNTQsMCw0OCwxNTYsNDcsMjU1LDE1Myw2Nyw1NSwyNTUsMjE4LDE2NSwzNCwyNTQsNzQsMTgwLDE3OSwwLDIxOCw2Niw3MSwxLDg4LDEyMiw5OSwwLDIxMiwxODEsMjE5LDI1NSw5Miw0MiwyMzEsMjU1LDIzOSwwLDE1NCwwLDI0NSw3NywxODMsMjU1LDk0LDgxLDE3MCwxLDE4LDIxMywyMTYsMCwxNzEsOTMsNzEsMCw1Miw5NCwyNDgsMCwxOCwxNTEsMTYxLDI1NCwxOTcsMjA5LDY2LDI1NSwxNzQsMjQ0LDE1LDI1NCwxNjIsNDgsMTgzLDAsNDksNjEsMjQwLDI1NCwxODIsOTMsMTk1LDAsMTk5LDIyOCw2LDEsMjAwLDUsMTcsMjU1LDEzNyw0NSwyMzcsMjU1LDEwOCwxNDgsNCwwLDkwLDc5LDIzNywyNTUsMzksNjMsNzcsMjU1LDUzLDgyLDIwNywxLDE0MiwyMiwxMTgsMjU1LDEwMSwyMzIsMTgsMSw5MiwyNiw2NywwLDUsMjAwLDg4LDI1NSwzMywxNjgsMTM4LDI1NSwxNDksMjI1LDcyLDAsMiwyMDksMjcsMjU1LDQ0LDI0NSwxNjgsMSwyMjAsMjM3LDE3LDI1NSwzMCwyMTEsMTA1LDI1NCwxNDEsMjM4LDIyMSwwLDEyOCw4MCwyNDUsMjU0LDExMSwyNTQsMTQsMCwyMjIsOTUsMTkwLDEsMjIzLDksMjQxLDAsMTQ2LDc2LDIxMiwyNTUsMTA4LDIwNSwxMDQsMjU1LDYzLDExNywxNTMsMCwxNDQsNjksNDgsMCwzNSwyMjgsMTExLDAsMTkyLDMzLDE5MywyNTUsMTEyLDIxNCwxOTAsMjU0LDExNSwxNTIsMTUxLDAsMjMsMTAyLDg4LDAsNTEsNzQsMjQ4LDAsMjI2LDE5OSwxNDMsMjU0LDIwNCwxNjIsMTAxLDI1NSwyMDgsOTcsMTg5LDEsMjQ1LDEwNCwxOCwwLDIzMCwyNDYsMzAsMjU1LDIzLDE0OCw2OSwwLDExMCw4OCw1MiwyNTQsMjI2LDE4MSw4OSwyNTUsMjA4LDQ3LDkwLDI1NCwxMTQsMTYxLDgwLDI1NSwzMywxMTYsMjQ4LDAsMTc5LDE1Miw4NywyNTUsNjksMTQ0LDE3NywxLDg4LDIzOCwyNiwyNTUsNTgsMzIsMTEzLDEsMSw3Nyw2OSwwLDU5LDEyMSw1MiwyNTUsMTUyLDIzOCw4MywwLDUyLDgsMTkzLDAsMjMxLDM5LDIzMywyNTUsMTk5LDM0LDEzOCwwLDIyMiw2OCwxNzMsMCw5MSw1NywyNDIsMjU0LDIyMCwyMTAsMTI3LDI1NSwxOTIsNywyNDYsMjU0LDE1MSwzNSwxODcsMCwxOTUsMjM2LDE2NSwwLDExMSw5MywyMDYsMCwyMTIsMjQ3LDEzMywxLDE1NCwxMzMsMjA5LDI1NSwxNTUsMjMxLDEwLDAsNjQsNzgsMzgsMCwxMjIsMjQ5LDEwMCwxLDMwLDE5LDk3LDI1NSw2Miw5MSwyNDksMSwyNDgsMTMzLDc3LDAsMTk3LDYzLDE2OCwyNTQsMTE2LDEwLDgyLDAsMTg0LDIzNiwxMTMsMjU0LDIxMiwyMDMsMTk0LDI1NSw2MSwxMDAsMjUyLDI1NCwzNiw1LDIwMiwyNTUsMTE5LDkxLDE1MywyNTUsMTI5LDc5LDI5LDAsMTAzLDEwMywxNzEsMjU0LDIzNywyMTUsMTExLDI1NSwyMTYsNTMsNjksMCwyMzksMjQwLDIzLDAsMTk0LDE0OSwyMjEsMjU1LDM4LDIyNSwyMjIsMCwyMzIsMjU1LDE4MCwyNTQsMTE4LDgyLDEzMywyNTUsNTcsMjA5LDE3NywxLDEzOSwyMzIsMTMzLDAsMTU4LDE3Niw0NiwyNTQsMTk0LDExNSw0NiwwLDg4LDI0NywyMjksMSwyOCwxMDMsMTkxLDAsMjIxLDIyMiwxNzUsMjU0LDE0OSwyMzUsNDQsMCwxNTEsMjI4LDI1LDI1NCwyMTgsMTA1LDEwMywwLDE0Miw4NSwyMTAsMCwxNDksMTI5LDE5MCwyNTUsMjEzLDY1LDk0LDI1NCwxMTcsMTM0LDIyNCwyNTUsODIsMTk4LDExNywwLDE1NywyMjEsMjIwLDAsMTYzLDEwMSwzNiwwLDE5NywxMTQsMzcsMCwxMDQsMTcyLDE2NiwyNTQsMTEsMTgyLDAsMCw4MSw3MiwxODgsMjU1LDk3LDE4OCwxNiwyNTUsNjksNiwxMCwwLDE5OSwxNDcsMTQ1LDI1NSw4LDksMTE1LDEsNjUsMjE0LDE3NSwyNTUsMjE3LDE3MywyMDksMCw4MCwxMjcsMTY2LDAsMjQ3LDIyOSw0LDI1NCwxNjcsMTgzLDEyNCwyNTUsOTAsMjgsMjA0LDI1NCwxNzUsNTksMjQwLDI1NSwxMSw0MSwyNDgsMSwxMDgsNDAsNTEsMjU1LDE0NCwxNzcsMTk1LDI1NCwxNTAsMjUwLDEyNiwwLDEzOCw5MSw2NSwxLDEyMCw2MCwyMjIsMjU1LDI0NSwxOTMsMjM5LDAsMjksMjE0LDE4OSwyNTUsMTI4LDIsMjUsMCw4MCwxNTQsMTYyLDAsNzcsMjIwLDEwNywxLDIzNCwyMDUsNzQsMjU1LDU0LDE2NiwxMDMsMjU1LDExNiw3Miw5LDAsMjI4LDk0LDQ3LDI1NSwzMCwyMDAsMjUsMjU1LDM1LDIxNCw4OSwyNTUsNjEsMTc2LDE0MCwyNTUsODMsMjI2LDE2MywyNTUsNzUsMTMwLDE3MiwwLDEyOCwzOCwxNywwLDk1LDEzNywxNTIsMjU1LDIxNSwxMjQsMTU5LDEsNzksOTMsMCwwLDE0OCw4MiwxNTcsMjU0LDE5NSwxMzAsMjUxLDI1NSw0MCwyMDIsNzYsMjU1LDI1MSwxMjYsMjI0LDAsMTU3LDk5LDYyLDI1NCwyMDcsNywyMjUsMjU1LDk2LDY4LDE5NSwwLDE0MCwxODYsMTU3LDI1NSwxMzEsMTksMjMxLDI1NSw0MiwxMjgsMjU0LDAsNTIsMjE5LDYxLDI1NCwxMDIsMjAzLDcyLDAsMTQxLDcsMTEsMjU1LDE4NiwxNjQsMjEzLDAsMzEsMTIyLDExOSwwLDEzMywyNDIsMTQ1LDAsMjA4LDI1MiwyMzIsMjU1LDkxLDIxMywxODIsMjU1LDE0Myw0LDI1MCwyNTQsMjQ5LDIxNSw3NCwwLDE2NSwzMCwxMTEsMSwxNzEsOSwyMjMsMCwyMjksMTIzLDM0LDEsOTIsMTMwLDI2LDI1NSw3NywxNTUsNDUsMSwxOTUsMTM5LDI4LDI1NSw1OSwyMjQsNzgsMCwxMzYsMTcsMjQ3LDAsMTA4LDEyMSwzMiwwLDc5LDI1MCwxODksMjU1LDk2LDIyNywyNTIsMjU0LDM4LDI0MSw2MiwwLDYyLDE3NCwxMjUsMjU1LDE1NSwxMTEsOTMsMjU1LDEwLDIzMCwyMDYsMSw5NywxOTcsNDAsMjU1LDAsNDksNTcsMjU0LDY1LDI1MCwxMywwLDE4LDI1MSwxNTAsMjU1LDIyMCwxMDksMjEwLDI1NSw1LDE3NCwxNjYsMjU0LDQ0LDEyOSwxODksMCwyMzUsMzUsMTQ3LDI1NSwzNywyNDcsMTQxLDI1NSw3MiwxNDEsNCwyNTUsMTAzLDEwNywyNTUsMCwyNDcsOTAsNCwwLDUzLDQ0LDQyLDAsMiwzMCwyNDAsMCw0LDU5LDYzLDAsODgsNzgsMzYsMCwxMTMsMTY3LDE4MCwwLDE5MCw3MSwxOTMsMjU1LDE5OSwxNTgsMTY0LDI1NSw1OCw4LDE3MiwwLDc3LDMzLDEyLDAsNjUsNjMsMywwLDE1Myw3NywzMywyNTUsMTcyLDI1NCwxMDIsMSwyMjgsMjIxLDQsMjU1LDg3LDMwLDI1NCwxLDE0Niw0MSw4NiwyNTUsMTM4LDIwNCwyMzksMjU0LDEwOCwxNDEsMTcsMjU1LDE4NywyNDIsMTM1LDAsMjEwLDIwOCwxMjcsMCw2OCw0NSwxNCwyNTQsNzMsOTYsNjIsMCw4MSw2MCwyNCwyNTUsMTcwLDYsMzYsMjU1LDMsMjQ5LDI2LDAsMzUsMjEzLDEwOSwwLDIyLDEyOSw1NCwyNTUsMjEsMzUsMjI1LDI1NSwyMzQsNjEsNTYsMjU1LDU4LDIxNyw2LDAsMTQzLDEyNCw4OCwwLDIzNiwxMjYsNjYsMCwyMDksMzgsMTgzLDI1NSwzNCwyMzgsNiwyNTUsMTc0LDE0NSwxMDIsMCw5NSwyMiwyMTEsMCwxOTYsMTUsMTUzLDI1NCw0Niw4NCwyMzIsMjU1LDExNywzNCwxNDYsMSwyMzEsMjUwLDc0LDI1NSwyNywxMzQsMTAwLDEsOTIsMTg3LDE5NSwyNTUsMTcwLDE5OCwxMTIsMCwxMjAsMjgsNDIsMCwyMDksNzAsNjcsMCwyOSw4MSwzMSwwLDI5LDE2OCwxMDAsMSwxNjksMTczLDE2MCwwLDEwNywzNSwxMTcsMCw2Miw5Niw1OSwyNTUsODEsMTIsNjksMSwxMzUsMjM5LDE5MCwyNTUsMjIwLDI1MiwxOCwwLDE2MywyMjAsNTgsMjU1LDEzNywxMzcsMTg4LDI1NSw4MywxMDIsMTA5LDAsOTYsNiw3NiwwLDIzNCwyMjIsMjEwLDI1NSwxODUsMTc0LDIwNSwxLDYwLDE1OCwyMTMsMjU1LDEzLDI0MSwyMTQsMCwxNzIsMTI5LDE0MCwwLDkzLDEwNCwyNDIsMCwxOTIsMTU2LDI1MSwwLDQzLDExNywzMCwwLDIyNSw4MSwxNTgsMCwxMjcsMjMyLDIxOCwwLDIyNiwyOCwyMDMsMCwyMzMsMjcsMTUxLDI1NSwxMTcsNDMsNSwyNTUsMjQyLDE0LDQ3LDI1NSwzMywyMCw2LDAsMTM3LDI1MSw0NCwyNTQsMjcsMzEsMjQ1LDI1NSwxODMsMjE0LDEyNSwyNTQsNDAsMTIxLDE0OSwwLDE4NiwxNTgsMjEzLDI1NSw4OSw4LDIyNywwLDY5LDg4LDAsMjU0LDIwMywxMzUsMjI1LDAsMjAxLDE3NCwyMDMsMCwxNDcsNzEsMTg0LDAsMTgsMTIxLDQxLDI1NCw5NCw1LDc4LDAsMjI0LDIxNCwyNDAsMjU0LDM2LDUsMTgwLDAsMjUxLDEzNSwyMzEsMSwxNjMsMTM4LDIxMiwwLDIxMCwyNDksMTE2LDI1NCw4OCwxMjksMTg3LDAsMTksOCw0OSwyNTQsNjIsMTQsMTQ0LDI1NSwxNTksNzYsMjExLDAsMjE0LDUxLDgyLDAsMTA5LDExNywyMjgsMjU0LDEwMywyMjMsMjAzLDI1NSw3NSwyNTIsMTUsMSwxNTQsNzEsMjIwLDI1NSwyMywxMyw5MSwxLDE0MSwxNjgsOTYsMjU1LDE4MSwxODIsMTMzLDAsMjUwLDUxLDU1LDAsMjM0LDIzNCwyMTIsMjU0LDE3NSw2MywxNTgsMCwzOSwyNDAsNTIsMSwxNTgsMTg5LDM2LDI1NSwyMTMsNDAsODUsMSwzMiwxODAsMjQ3LDI1NSwxOSwxMDIsMjYsMSw4NCwyNCw5NywyNTUsNjksMjEsMjIyLDAsMTQ4LDEzOSwxMjIsMjU1LDIyMCwyMTMsMjM1LDEsMjMyLDIwMywyNTUsMCwxMjEsNTcsMTQ3LDAsMjI3LDcsMTU0LDAsNTMsMjIsMTQ3LDEsNzIsMSwyMjUsMCw4MiwxMzQsNDgsMjU0LDgzLDYwLDE1NywyNTUsMTQ1LDcyLDE2OSwwLDM0LDEwMywyMzksMCwxOTgsMjMzLDQ3LDAsMTE2LDE5LDQsMjU1LDE4NCwxMDYsOSwyNTUsMTgzLDEyOSw4MywwLDM2LDE3NiwyMzAsMSwzNCwxMDMsNzIsMCwyMTksMTYyLDEzNCwwLDI0NSw0MiwxNTgsMCwzMiwxNDksOTYsMjU0LDE2NSw0NCwxNDQsMCwyMDIsMjM5LDcyLDI1NCwyMTUsMTUwLDUsMCw0Miw2NiwzNiwxLDEzMiwyMTUsMTc1LDAsODYsMTc0LDg2LDI1NSwyNiwxOTcsMTU2LDI1NSw0OSwyMzIsMTM1LDI1NCwxMDMsMTgyLDgyLDAsMjUzLDEyOCwxNzYsMSwxNTMsMTc4LDEyMiwwLDI0NSwyNTAsMTAsMCwyMzYsMjQsMTc4LDAsMTM3LDEwNiwxMzIsMCw0MCwyOSw0MSwwLDUwLDMwLDE1MiwyNTUsMTI0LDEwNSwzOCwwLDIzMCwxOTEsNzUsMCwxNDMsNDMsMTcwLDAsNDQsMTMxLDIwLDI1NSw0NCwxMywyMywyNTUsMjM3LDI1NSwxNTUsMSwxNTksMTA5LDEwMCwyNTUsMTEyLDE4MSwyNCwyNTUsMTA0LDIyMCwxMDgsMCw1NSwyMTEsMTMxLDAsOTksMTIsMjEzLDI1NSwxNTIsMTUxLDE0NSwyNTUsMjM4LDUsMTU5LDAsOTcsMTU1LDgsMCwzMywxMDgsODEsMCwxLDMsMTAzLDAsNjIsMTA5LDM0LDI1NSwyNTAsMTU1LDE4MCwwLDMyLDcxLDE5NSwyNTUsMzgsNzAsMTQ1LDEsMTU5LDk1LDI0NSwwLDY5LDIyOSwxMDEsMSwxMzYsMjgsMjQwLDAsNzksMjI0LDI1LDAsNzgsMTEwLDEyMSwyNTUsMjQ4LDE2OCwxMjQsMCwxODcsMTI4LDI0NywwLDIsMTQ3LDIzNSwyNTQsNzksMTEsMTMyLDAsNzAsNTgsMTIsMSwxODEsOCwxNjMsMjU1LDc5LDEzNywxMzMsMjU1LDM3LDE3MCwxMSwyNTUsMTQxLDI0Myw4NSwyNTUsMTc2LDIzMSwyMTUsMjU1LDIwNCwxNTAsMTY0LDI1NSwyMzksMjE1LDM5LDI1NSw0Niw4NywxNTYsMjU0LDgsMTYzLDg4LDI1NSwxNzIsMzQsMjMyLDAsNjYsNDQsMTAyLDI1NSwyNyw1NCw0MSwyNTQsMjM2LDk5LDg3LDI1NSw0MSwxMjMsMTY5LDEsNTIsMTE0LDQzLDAsMTE3LDEzNCw0MCwwLDE1NSwxMzQsMjYsMCwyMzEsMjA3LDkxLDI1NCwzNSwxMzIsMzgsMjU1LDE5LDEwMiwxMjUsMjU0LDM2LDIyNywxMzMsMjU1LDExOCwzLDExMywyNTUsMjksMTMsMTI0LDAsMTUyLDk2LDc0LDEsODgsMTQ2LDIwNiwyNTUsMTY3LDE5MSwyMjAsMjU0LDE2MiwxOCw4OCwyNTUsMTgyLDEwMCwyMywwLDMxLDExNyw1MiwwLDgxLDQ2LDEwNiwxLDEyLDIsNywwLDY5LDgwLDIwMSwxLDIwOSwyNDYsMTcyLDAsMTIsNDgsMTQxLDEsMjI0LDIxMSw4OCwwLDExNiwyMjYsMTU5LDAsMTIyLDk4LDEzMCwwLDY1LDIzNiwyMzQsMSwyMjUsMjI2LDksMjU1LDIwNywyMjYsMTIzLDEsODksMjE0LDU5LDAsMTEyLDEzNSw4OCwxLDkwLDI0NCwyMDMsMjU1LDQ5LDExLDM4LDEsMTI5LDEwOCwxODYsMCw4OSwxMTIsMTUsMSwxMDEsNDYsMjA0LDI1NSwxMjcsMjA0LDQ1LDI1NCw3OSwyNTUsMjIxLDI1NSw1MSw3MywxOCwyNTUsMTI3LDQyLDEwMSwyNTUsMjQxLDIxLDIwMiwwLDE2MCwyMjcsNywwLDEwNSw1MCwyMzYsMCw3OSw1MiwxOTcsMjU1LDEwNCwyMDIsMjA4LDEsMTgwLDE1LDE2LDAsMTAxLDE5Nyw3OCwyNTUsOTgsNzcsMjAzLDAsNDEsMTg1LDI0MSwxLDM1LDE5MywxMjQsMCwzNSwxNTUsMjMsMjU1LDIwNyw1MywxOTIsMCwxMSwxMjUsMTYzLDEsMjQ5LDE1OCwxODUsMjU1LDQsMTMxLDQ4LDAsMjEsOTMsMTExLDI1NSw2MSwxMjEsMjMxLDEsNjksMjAwLDM2LDI1NSwxODUsNDgsMTg1LDI1NSwxMTEsMjM4LDIxLDI1NSwzOSw1MCwyNSwyNTUsOTksMjE1LDE2MywyNTUsODcsMjEyLDMwLDI1NSwxNjQsMTQ3LDUsMjU1LDEyOCw2LDM1LDEsMTA4LDIyMywxMTAsMjU1LDE5NCw3NiwxNzgsMCw3NCwxMDEsMTgwLDAsMjQzLDQ3LDQ4LDAsMTc0LDI1LDQzLDI1NSw4MiwxNzMsMjUzLDEsNTQsMTE0LDE5MiwyNTUsNDAsNTUsOTEsMCwyMTUsMTA4LDE3NiwyNTUsMTEsNTYsNywwLDIyNCwyMzMsNzYsMCwyMDksOTgsMjAyLDI1NCwyNDIsMjUsMTI1LDAsNDQsMTkzLDkzLDI1NCwyMDMsOCwxNzcsMCwxMzUsMTc2LDE5LDAsMTEyLDcxLDIxMywyNTUsMjA2LDU5LDE3NiwxLDQsNjcsMjYsMCwxNCwxNDMsMjEzLDI1NCw0Miw1NSwyMDgsMjU1LDYwLDY3LDEyMCwwLDE5MywyMSwxNjMsMCw5OSwxNjQsMTE1LDAsMTAsMjAsMTE4LDAsMTU2LDIxMiwyMjIsMjU0LDE2MCw3LDIxNywyNTUsMTE0LDI0NSw3NiwxLDExNyw1OSwxMjMsMCwxNzYsMTk0LDg2LDI1NCwyMTMsMTUsMTc2LDAsNzgsMjA2LDIwNywyNTQsMjEzLDEyOSw1OSwwLDIzMywyNTEsMjIsMSw5Niw1NSwxNTIsMjU1LDIzNiwyNTUsMTUsMjU1LDE5Nyw4OSw4NCwyNTUsOTMsMTQ5LDEzMywwLDE3NCwxNjAsMTEzLDAsMjM0LDk5LDE2OSwyNTUsMTUyLDExNiw4OCwwLDE0NCwxNjQsODMsMjU1LDk1LDI5LDE5OCwyNTUsMzQsNDcsMTUsMjU1LDk5LDEyMCwxMzQsMjU1LDUsMjM2LDE5MywwLDI0OSwyNDcsMTI2LDI1NSwxNDcsMTg3LDMwLDAsNTAsMjMwLDExNywyNTUsMTA4LDIxNywyMTksMjU1LDE2Myw4MSwxNjYsMjU1LDcyLDI1LDE2OSwyNTQsMTU1LDEyMSw3OSwyNTUsMjgsMTU1LDg5LDI1NCw3LDEyNiwxNywwLDE0Nyw2NSwzMywxLDQ3LDIzNCwyNTMsMCwyNiw1MSwxOCwwLDEwNSw4MywxOTksMjU1LDE2MywxOTYsMjMwLDAsMTEzLDI0OCwxNjQsMCwyMjYsMjU0LDIxOCwwLDE4OSwyMDksMjAzLDI1NSwxNjQsMjQ3LDIyMiwyNTQsMjU1LDM1LDE2NSwwLDQsMTg4LDI0MywxLDEyNywxNzksNzEsMCwzNywyMzcsMjU0LDI1NSwxMDAsMTg2LDI0MCwwLDUsNTcsNzEsMjU0LDEwMyw3Miw3MywyNTUsMjQ0LDE4LDgxLDI1NCwyMjksMjEwLDEzMiwyNTUsMjM4LDYsMTgwLDI1NSwxMSwyMjksMTc0LDI1NSwyMjcsMjIxLDE5MiwxLDE3LDQ5LDI4LDAsMTYzLDIxNSwxOTYsMjU0LDksMTE4LDQsMjU1LDUxLDI0MCw3MSwwLDExMywxMjksMTA5LDI1NSw3NiwyNDAsMjMxLDAsMTg4LDE3NywxMjcsMCwxMjUsNzEsNDQsMSwyNiwxNzUsMjQzLDAsOTQsMTY5LDI1LDI1NCwyNywyMzAsMjksMCwxNSwxMzksMTE5LDEsMTY4LDE3MCwxODYsMjU1LDE3MiwxOTcsNzYsMjU1LDI1Miw3NSwxODgsMCwxMzcsMTI0LDE5NiwwLDcyLDIyLDk2LDI1NSw0NSwxNTEsMjQ5LDEsMjIwLDE0NSwxMDAsMCw2NCwxOTIsMTU5LDI1NSwxMjAsMjM5LDIyNiwwLDEyOSwxNzgsMTQ2LDAsMCwxOTIsMTI1LDAsMjM1LDEzOCwyMzQsMCwxODMsMTU3LDE0NiwwLDgzLDE5OSwxOTIsMjU1LDE4NCwxNzIsNzIsMjU1LDczLDIyNSwxMjgsMCw3Nyw2LDI1MCwyNTUsMTg2LDY1LDY3LDAsMTA0LDI0NiwyMDcsMCwxODgsMzIsMTM4LDI1NSwyMTgsMjQsMjQyLDAsNjcsMTM4LDgxLDI1NCwyMzcsMTI5LDEyMSwyNTUsMjAsMjA3LDE1MCwxLDQxLDE5OSwxNiwyNTUsNiwyMCwxMjgsMCwxNTksMTE4LDUsMCwxODEsMTYsMTQzLDI1NSwyMjAsMzgsMTUsMCwyMyw2NCwxNDcsMjU0LDczLDI2LDEzLDAsODcsMjI4LDU3LDEsMjA0LDEyNCwxMjgsMCw0MywyNCwyMjMsMCwyMTksOTksMTk5LDAsMjIsNzUsMjAsMjU1LDE5LDI3LDEyNiwwLDE1Nyw2MiwyMTUsMCwxMTAsMjksMjMwLDAsMTc5LDE2NywyNTUsMSw1NCwyNTIsMTkwLDAsMjIxLDIwNCwxODIsMjU0LDE3OSwxNTgsNjUsMjU1LDgxLDE1NywzLDAsMTk0LDIxOCwxNTksMCwxNzAsMjIzLDAsMCwyMjQsMTEsMzIsMjU1LDM4LDE5Nyw5OCwwLDE2OCwxNjQsMzcsMCwyMyw4OCw3LDEsMTY0LDE4NiwxMTAsMCw5NiwzNiwxMzQsMCwyMzQsMjQyLDIyOSwwLDI1MCwxMjEsMTksMCwyNDIsMjU0LDExMiwyNTUsMyw0Nyw5NCwxLDksMjM5LDYsMjU1LDgxLDEzNCwxNTMsMjU0LDIxNCwyNTMsMTY4LDI1NSw2NywxMjQsMjI0LDAsMjQ1LDk1LDc0LDAsMjgsMzAsNDQsMjU0LDEsMTA5LDIyMCwyNTUsMTc4LDg5LDg5LDAsMjUyLDM2LDc2LDAsMjQsMTk4LDQ2LDI1NSw3Niw3NywxMTEsMCwxMzQsMjM0LDEzNiwyNTUsMzksOTQsMjksMCwxODUsNzIsMjM0LDI1NSw3MCw2OCwxMzUsMjU1LDIzMSwxMDIsNywyNTQsNzcsMjMxLDE0MCwwLDE2Nyw0Nyw1OCwxLDE0OCw5NywxMTgsMjU1LDE2LDI3LDIyNSwxLDE2NiwyMDYsMTQzLDI1NSwxMTAsMTc4LDIxNCwyNTUsMTgwLDEzMSwxNjIsMCwxNDMsMTQxLDIyNSwxLDEzLDIxOCw3OCwyNTUsMTE0LDE1MywzMywxLDk4LDEwNCwyMDQsMCwxNzUsMTE0LDExNywxLDE2NywyMDYsNzUsMCwyMDIsMTk2LDgzLDEsNTgsNjQsNjcsMCwxMzgsNDcsMTExLDEsMTk2LDI0NywxMjgsMjU1LDEzNywyMjQsMjI0LDI1NCwxNTgsMTEyLDIwNywwLDE1NCwxMDAsMjU1LDEsMTM0LDM3LDEwNywwLDE5OCwxMjgsNzksMjU1LDEyNywyMDksMTU1LDI1NSwxNjMsMjU0LDE4NSwyNTQsNjAsMTQsMjQzLDAsMzEsMjE5LDExMiwyNTQsMjksMjE3LDY1LDAsMjAwLDEzLDExNiwyNTQsMTIzLDYwLDE5NiwyNTUsMjI0LDU5LDE4NCwyNTQsMjQyLDg5LDE5NiwwLDEyMywxNiw3NSwyNTQsMTQ5LDE2LDIwNiwwLDY5LDI1NCw0OCwxLDIzMSwxMTYsMjIzLDI1NSwyMDksMTYwLDY1LDEsMjAwLDgwLDk4LDAsMzcsMTk0LDE4NCwyNTQsMTQ4LDYzLDM0LDAsMTM5LDI0MCw2NSwyNTUsMjE3LDE0NCwxMzIsMjU1LDU2LDM4LDQ1LDI1NCwxOTksMTIwLDIxMCwwLDEwOCwxNzcsMTY2LDI1NSwxNjAsMjIyLDQsMCwyMjAsMTI2LDExOSwyNTQsMTY1LDEwNywxNjAsMjU1LDgyLDIyMCwyNDgsMSwyNDEsMTc1LDEzNiwwLDE0NCwxNDEsMjMsMjU1LDE2OSwxMzgsODQsMCwxNjAsMTM3LDc4LDI1NSwyMjYsMTE4LDgwLDI1NSw1MiwyNywxMzIsMjU1LDYzLDk2LDEzOSwyNTUsMTUyLDI1MCwzOSwwLDE4OCwxNTUsMTUsMCwyMzIsNTEsMTUwLDI1NCw0MCwxNSwyMzIsMjU1LDI0MCwyMjksOSwyNTUsMTM3LDE3NSwyNywyNTUsNzUsNzMsOTcsMSwyMTgsMjEyLDExLDAsMTM1LDUsMTYyLDEsMTA3LDE4NSwyMTMsMCwyLDI0OSwxMDcsMjU1LDQwLDI0Miw3MCwwLDIxOSwyMDAsMjUsMCwyNSwxNTcsMTMsMCw2Nyw4Miw4MCwyNTUsMTk2LDI0OSwyMywyNTUsMTQ1LDIwLDE0OSwwLDUwLDcyLDE0NiwwLDk0LDc2LDE0OCwxLDI0LDI1MSw2NSwwLDMxLDE5MiwyMywwLDE4NCwyMTIsMjAxLDI1NSwxMjMsMjMzLDE2MiwxLDI0NywxNzMsNzIsMCwxNjIsODcsMjE5LDI1NCwxMjYsMTM0LDg5LDAsMTU5LDExLDEyLDI1NCwxNjYsMTA1LDI5LDAsNzMsMjcsMjI4LDEsMTEzLDEyMCwxODMsMjU1LDY2LDE2MywxMDksMSwyMTIsMTQzLDExLDI1NSwxNTksMjMxLDE2OCwxLDI1NSwxMjgsOTAsMCw1NywxNCw1OCwyNTQsODksNTIsMTAsMjU1LDI1Myw4LDE2MywxLDAsMTQ1LDIxMCwyNTUsMTAsMTI5LDg1LDEsNDYsMTgxLDI3LDAsMTAzLDEzNiwxNjAsMjU0LDEyNiwxODgsMjA5LDI1NSwzNCwzNSwxMTEsMCwyMTUsMjE5LDI0LDI1NSwyMTIsMTEsMjE0LDI1NCwxMDEsNSwxMTgsMCwyMzIsMTk3LDEzMywyNTUsMjIzLDE2NywxMDksMjU1LDIzNyw4MCw4NiwyNTUsNzAsMTM5LDk0LDAsMTU4LDE5MywxOTEsMSwxNTUsMTUsNTEsMjU1LDE1LDE5MCwxMTUsMCw3OCwxMzUsMjA3LDI1NSwyNDksMTAsMjcsMSwxODEsMTI1LDIzMywwLDk1LDE3MiwxMywyNTQsMTcwLDIxMywxNjEsMjU1LDM5LDIzNiwxMzgsMjU1LDk1LDkzLDg3LDI1NSwxOTAsMTI4LDk1LDAsMTI1LDE1LDIwNiwwLDE2NiwxNTAsMTU5LDAsMjI3LDE1LDE1OCwyNTUsMjA2LDE1OCwxMjAsMjU1LDQyLDE0MSwxMjgsMCwxMDEsMTc4LDEyMCwxLDE1NiwxMDksMTMxLDAsMjE4LDE0LDQ0LDI1NCwyNDcsMTY4LDIwNiwyNTUsMjEyLDExMiwyOCwwLDExMiwxNywyMjgsMjU1LDkwLDE2LDM3LDEsMTk3LDIyMiwxMDgsMCwyNTQsMjA3LDgzLDI1NSw5LDkwLDI0MywyNTUsMjQzLDI0NCwxNzIsMCwyNiw4OCwxMTUsMjU1LDIwNSwxMTYsMTIyLDAsMTkxLDIzMCwxOTMsMCwxODAsMTAwLDExLDEsMjE3LDM3LDk2LDI1NSwxNTQsNzgsMTU2LDAsMjM1LDIzNCwzMSwyNTUsMjA2LDE3OCwxNzgsMjU1LDE0OSwxOTIsMjUxLDAsMTgyLDI1MCwxMzUsMCwyNDYsMjIsMTA1LDAsMTI0LDE5MywxMDksMjU1LDIsMjEwLDE0OSwyNTUsMTY5LDE3LDE3MCwwLDAsOTYsMTEwLDI1NSwxMTcsOSw4LDEsNTAsMTIzLDQwLDI1NSwxOTMsMTg5LDk5LDAsMzQsMjI3LDE2MCwwLDQ4LDgwLDcwLDI1NCwyMTEsNTEsMjM2LDAsNDUsMTIyLDI0NSwyNTQsNDQsMTc0LDgsMCwxNzMsMzcsMjMzLDI1NSwxNTgsNjUsMTcxLDAsMTIyLDY5LDIxNSwyNTUsOTAsODAsMiwyNTUsMTMxLDEwNiw5NiwyNTQsMjI3LDExNCwxMzUsMCwyMDUsNDksMTE5LDI1NCwxNzYsNjIsNjQsMjU1LDgyLDUxLDE3LDI1NSwyNDEsMjAsMjQzLDI1NSwxMzAsMTMsOCwyNTQsMTI4LDIxNywyNDMsMjU1LDE2MiwyNywxLDI1NCw5MCwxMTgsMjQxLDAsMjQ2LDE5OCwyNDYsMjU1LDU1LDE2LDExOCwyNTUsMjAwLDE1OSwxNTcsMCwxNjMsMTcsMSwwLDE0MCwxMDcsMTIxLDAsODUsMTYxLDExOCwyNTUsMzgsMCwxNDksMCwxNTYsNDcsMjM4LDAsOSwxNjYsMTY2LDEsNzUsOTgsMTgxLDI1NSw1MCw3NCwyNSwwLDY2LDE1LDQ3LDAsMTM5LDIyNSwxNTksMCw3NiwzLDE0MiwyNTUsMTQsMjM4LDE4NCwwLDExLDIwNyw1MywyNTUsMTgzLDE5MiwxODYsMSwxNzEsMzIsMTc0LDI1NSwxOTEsNzYsMjIxLDEsMjQ3LDE3MCwyMTksMCwyNSwxNzIsNTAsMjU0LDIxNyw5LDIzMywwLDIwMywxMjYsNjgsMjU1LDE4Myw5Miw0OCwwLDEyNywxNjcsMTgzLDEsNjUsNDksMjU0LDAsMTYsNjMsMTI3LDEsMjU0LDIxLDE3MCwyNTUsNTksMjI0LDEyNywyNTQsMjIsNDgsNjMsMjU1LDI3LDc4LDEzMCwyNTQsNDAsMTk1LDI5LDAsMjUwLDEzMiwxMTIsMjU0LDM1LDIwMywxNDQsMCwxMDQsMTY5LDE2OCwwLDIwNywyNTMsMzAsMjU1LDEwNCw0MCwzOCwyNTQsOTQsMjI4LDg4LDAsMjA2LDE2LDEyOCwyNTUsMjEyLDU1LDEyMiwyNTUsMjIzLDIyLDIzNCwwLDIyMywxOTcsMTI3LDAsMjUzLDE4MSwxODEsMSwxNDUsMTAyLDExOCwwLDIzNiwxNTMsMzYsMjU1LDIxMiwyMTcsNzIsMjU1LDIwLDM4LDI0LDI1NCwxMzgsNjIsNjIsMCwxNTIsMTQwLDQsMCwyMzAsMjIwLDk5LDI1NSwxLDIxLDIxMiwyNTUsMTQ4LDIwMSwyMzEsMCwyNDQsMTIzLDksMjU0LDAsMTcxLDIxMCwwLDUxLDU4LDM3LDI1NSwxLDI1NSwxNCwyNTUsMjQ0LDE4MywxNDUsMjU0LDAsMjQyLDE2NiwwLDIyLDc0LDEzMiwwLDEyMSwyMTYsNDEsMCw5NSwxOTUsMTE0LDI1NCwxMzMsMjQsMTUxLDI1NSwxNTYsMjI2LDIzMSwyNTUsMjQ3LDUsNzcsMjU1LDI0NiwxNDgsMTE1LDI1NCwyMjUsOTIsODEsMjU1LDIyMiw4MCwyNDYsMjU0LDE3MCwxMjMsODksMjU1LDc0LDE5OSwxNDEsMCwyOSwyMCw4LDI1NSwxMzgsMTM2LDcwLDI1NSw5Myw3NSw5MiwwLDIyMSwxNDcsNDksMjU0LDUyLDEyNiwyMjYsMCwyMjksMTI0LDIzLDAsNDYsOSwxODEsMCwyMDUsNjQsNTIsMSwxMzEsMjU0LDI4LDAsMTUxLDE1OCwyMTIsMCwxMzEsNjQsNzgsMCwyMDYsMjUsMTcxLDAsMCwyMzAsMTM5LDAsMTkxLDI1MywxMTAsMjU0LDEwMywyNDcsMTY3LDAsNjQsNDAsNDAsMSw0MiwxNjUsMjQxLDI1NSw1OSw3NSwyMjgsMjU0LDEyNCwyNDMsMTg5LDI1NSwxOTYsOTIsMTc4LDI1NSwxMzAsMTQwLDg2LDI1NSwxNDEsODksNTYsMSwxNDcsMTk4LDUsMjU1LDIwMywyNDgsMTU4LDI1NCwxNDQsMTYyLDE0MSwwLDExLDE3MiwyMjYsMCwxMzAsNDIsMjEsMjU1LDEsMTY3LDE0MywyNTUsMTQ0LDM2LDM2LDI1NSw0OCw4OCwxNjQsMjU0LDE2OCwxNzAsMjIwLDAsOTgsNzEsMjE0LDAsOTEsMjA4LDc5LDAsMTU5LDc2LDIwMSwxLDE2Niw0MiwyMTQsMjU1LDY5LDI1NSwwLDI1NSw2LDEyOCwxMjUsMjU1LDE5MCwxLDE0MCwwLDE0Niw4MywyMTgsMjU1LDIxNSwyMzgsNzIsMSwxMjIsMTI3LDUzLDAsMTg5LDExNiwxNjUsMjU1LDg0LDgsNjYsMjU1LDIxNCwzLDIwOCwyNTUsMjEzLDExMCwxMzMsMCwxOTUsMTY4LDQ0LDEsMTU4LDIzMSw2OSwwLDE2Miw2NCwyMDAsMjU0LDkxLDU4LDEwNCwwLDE4Miw1OCwxODcsMjU0LDI0OSwyMjgsMTM2LDAsMjAzLDEzNCw3NiwyNTQsOTksMjIxLDIzMywwLDc1LDI1NCwyMTQsMjU0LDgwLDY5LDE1NCwwLDY0LDE1MiwyNDgsMjU0LDIzNiwxMzYsMjAyLDI1NSwxNTcsMTA1LDE1MywyNTQsMTQ5LDE3NSwyMCwwLDIyLDM1LDE5LDI1NSwxMjQsMTIxLDIzMywwLDE4NiwyNTAsMTk4LDI1NCwxMzIsMjI5LDEzOSwwLDEzNyw4MCwxNzQsMjU1LDE2NSwxMjUsNjgsMCwxNDQsMjAyLDE0OCwyNTQsMjM1LDIzOSwyNDgsMCwxMzUsMTg0LDExOCwwLDEwMSw5NCwxNywyNTUsMTIyLDcyLDcwLDI1NCw2OSwxMzAsMTQ2LDAsMTI3LDIyMiwyNDgsMSw2OSwxMjcsMTE4LDI1NSwzMCw4MiwyMTUsMjU0LDE4OCw3NCwxOSwyNTUsMjI5LDE2NywxOTQsMjU0LDExNywyNSw2NiwyNTUsNjUsMjM0LDU2LDI1NCwyMTMsMjIsMTU2LDAsMTUxLDU5LDkzLDI1NCw0NSwyOCwyNywyNTUsMTg2LDEyNiwxNjQsMjU1LDMyLDYsMjM5LDAsMTI3LDExNCw5OSwxLDIxOSw1MiwyLDI1NSw5OSw5NiwxNjYsMjU0LDYyLDE5MCwxMjYsMjU1LDEwOCwyMjIsMTY4LDEsNzUsMjI2LDE3NCwwLDIzMCwyMjYsMTk5LDAsNjAsMTE3LDIxOCwyNTUsMjUyLDI0OCwyMCwxLDIxNCwxODgsMjA0LDAsMzEsMTk0LDEzNCwyNTQsMTIzLDY5LDE5MiwyNTUsMTY5LDE3MywzNiwyNTQsNTUsOTgsOTEsMCwyMjMsNDIsMTAyLDI1NCwxMzcsMSwxMDIsMCwxNTcsOTAsMjUsMCwyMzksMTIyLDY0LDI1NSwyNTIsNiwyMzMsMCw3LDU0LDIwLDI1NSw4MiwxMTYsMTc0LDAsMTM1LDM3LDU0LDI1NSwxNSwxODYsMTI1LDAsMjI3LDExMiwxNzUsMjU1LDEwMCwxODAsMjI1LDI1NSw0MiwyMzcsMjQ0LDI1NSwyNDQsMTczLDIyNiwyNTQsMjQ4LDE4LDMzLDAsMTcxLDk5LDE1MCwyNTUsNzQsMjM1LDUwLDI1NSwxMTcsODIsMzIsMjU0LDEwNiwxNjgsMjM3LDAsMjA3LDEwOSwyMDgsMSwyMjgsOSwxODYsMCwxMzUsNjAsMTY5LDI1NCwxNzksOTIsMTQzLDAsMjQ0LDE3MCwxMDQsMjU1LDIzNSw0NSwxMjQsMjU1LDcwLDk5LDE4NiwwLDExNywxMzcsMTgzLDAsMjI0LDMxLDIxNSwwLDQwLDksMTAwLDAsMjYsMTYsOTUsMSw2OCwyMTcsODcsMCw4LDE1MSwyMCwyNTUsMjYsMTAwLDU4LDI1NSwxNzYsMTY1LDIwMywxLDUyLDExOCw3MCwwLDcsMzIsMjU0LDI1NCwyNDQsMjU0LDI0NSwyNTUsMTY3LDE0NCwxOTQsMjU1LDEyNSwxMTMsMjMsMjU1LDE3NiwxMjEsMTgxLDAsMTM2LDg0LDIwOSwwLDEzOCw2LDMwLDI1NSw4OSw0OCwyOCwwLDMzLDE1NSwxNCwyNTUsMjUsMjQwLDE1NCwwLDE0MSwyMDUsMTA5LDEsNzAsMTE1LDYyLDI1NSwyMCw0MCwxMDcsMjU0LDEzOCwxNTQsMTk5LDI1NSw5NCwyMjMsMjI2LDI1NSwxNTcsMTcxLDM4LDAsMTYzLDE3NywyNSwyNTQsNDUsMTE4LDMsMjU1LDE0LDIyMiwyMywxLDIwOSwxOTAsODEsMjU1LDExOCwxMjMsMjMyLDEsMTMsMjEzLDEwMSwyNTUsMTIzLDU1LDEyMywyNTQsMjcsMjQ2LDE2NSwwLDUwLDk5LDc2LDI1NSwxNDAsMjE0LDMyLDI1NSw5Nyw2NSw2NywyNTUsMjQsMTIsMjgsMCwxNzQsODYsNzgsMSw2NCwyNDcsOTYsMCwxNjAsMTM1LDY3LDAsNjYsNTUsMjQzLDI1NSwxNDcsMjA0LDk2LDI1NSwyNiw2LDMzLDI1NSw5OCw1MSw4MywxLDE1MywyMTMsMjA4LDI1NSwyLDE4NCw1NCwyNTUsMjUsMjE4LDExLDAsNDksNjcsMjQ2LDI1NCwxOCwxNDksNzIsMjU1LDEzLDI1LDcyLDAsNDIsNzksMjE0LDAsNDIsNCwzOCwxLDI3LDEzOSwxNDQsMjU1LDE0OSwxODcsMjMsMCwxOCwxNjQsMTMyLDAsMjQ1LDg0LDE4NCwyNTQsMTIwLDE5OCwxMDQsMjU1LDEyNiwyMTgsOTYsMCw1NiwxMTcsMjM0LDI1NSwxMywyOSwyMTQsMjU0LDY4LDQ3LDEwLDI1NSwxNjcsMTU0LDEzMiwyNTQsMTUyLDM4LDE5OCwwLDY2LDE3OCw4OSwyNTUsMjAwLDQ2LDE3MSwyNTUsMTMsOTksODMsMjU1LDIxMCwxODcsMjUzLDI1NSwxNzAsNDUsNDIsMSwxMzgsMjA5LDEyNCwwLDIxNCwxNjIsMTQxLDAsMTIsMjMwLDE1NiwwLDEwMiwzNiwxMTIsMjU0LDMsMTQ3LDY3LDAsNTIsMjE1LDEyMywyNTUsMjMzLDE3MSw1NCwyNTUsOTgsMTM3LDYyLDAsMjQ3LDIxOCwzOSwyNTUsMjMxLDIxOCwyMzYsMCwyNDcsMTkxLDEyNywwLDE5NSwxNDYsODQsMCwxNjUsMTc2LDkyLDI1NSwxOSwyMTIsOTQsMjU1LDE3LDc0LDIyNywwLDg4LDQwLDE1MywxLDE5OCwxNDcsMSwyNTUsMjA2LDY3LDI0NSwyNTQsMjQwLDMsMjE4LDI1NSw2MSwxNDEsMjEzLDI1NSw5NywxODMsMTA2LDAsMTk1LDIzMiwyMzUsMjU0LDk1LDg2LDE1NCwwLDIwOSw0OCwyMDUsMjU0LDExOCwyMDksMjQxLDI1NSwyNDAsMTIwLDIyMywxLDIxMywyOSwxNTksMCwxNjMsMTI3LDE0NywyNTUsMTMsMjE4LDkzLDAsODUsMjQsNjgsMjU0LDcwLDIwLDgwLDI1NSwxODksNSwxNDAsMSw4Miw5NywyNTQsMjU1LDk5LDk5LDE5MSwyNTUsMTMyLDg0LDEzMywyNTUsMTA3LDIxOCwxMTYsMjU1LDExMiwxMjIsNDYsMCwxMDUsMTcsMzIsMCwxOTQsMTYwLDYzLDI1NSw2OCwyMjIsMzksMSwyMTYsMjUzLDkyLDAsMTc3LDEwNSwyMDUsMjU1LDE0OSwyMDEsMTk1LDAsNDIsMjI1LDExLDI1NSw0MCwxNjIsMTE1LDAsOSw3LDgxLDAsMTY1LDIxOCwyMTksMCwxODAsMjIsMCwyNTQsMjksMTQ2LDI1MiwyNTUsMTQ2LDIwNywyMjUsMSwxODAsMTM1LDk2LDAsMzEsMTYzLDExMiwwLDE3NywxMSwyMTksMjU1LDEzMywxMiwxOTMsMjU0LDQzLDc4LDUwLDAsNjUsMTEzLDEyMSwxLDU5LDIxNyw2LDI1NSwxMTAsOTQsMjQsMSwxMTIsMTcyLDExMSwwLDcsMTUsOTYsMCwzNiw4NSwxMjMsMCw3MSwxNTAsMjEsMjU1LDIwOCw3MywxODgsMCwxOTIsMTEsMTY3LDEsMjEzLDI0NSwzNCwwLDksMjMwLDkyLDAsMTYyLDE0MiwzOSwyNTUsMjE1LDkwLDI3LDAsOTgsOTcsODksMCw5NCw3OSwyMTEsMCw5MCwxNTcsMjQwLDAsOTUsMjIwLDEyNiwxLDEwMiwxNzYsMjI2LDAsMzYsMzAsMjI0LDI1NCwzNSwzMSwxMjcsMCwyMzEsMjMyLDExNSwxLDg1LDgzLDEzMCwwLDIxMCw3MywyNDUsMjU1LDQ3LDE0MywxMTQsMjU1LDY4LDY1LDE5NywwLDU5LDcyLDYyLDI1NSwxODMsMTMzLDE3MywyNTQsOTMsMTIxLDExOCwyNTUsNTksMTc3LDgxLDI1NSwyMzQsNjksMTczLDI1NSwyMDUsMTI4LDE3NywwLDIyMCwyNDQsNTEsMCwyNiwyNDQsMjA5LDEsNzMsMjIyLDc3LDI1NSwxNjMsOCw5NiwyNTQsMTUwLDE0OSwyMTEsMCwxNTgsMjU0LDIwMywxLDU0LDEyNywxMzksMCwxNjEsMjI0LDU5LDAsNCwxMDksMjIsMjU1LDIyMiw0Miw0NSwyNTUsMjA4LDE0NiwxMDIsMjU1LDIzNiwxNDIsMTg3LDAsNTAsMjA1LDI0NSwyNTUsMTAsNzQsODksMjU0LDQ4LDc5LDE0MiwwLDIyMiw3NiwxMzAsMjU1LDMwLDE2Niw2MywwLDIzNiwxMiwxMywyNTUsNDksMTg0LDI0NCwwLDE4NywxMTMsMTAyLDAsMjE4LDEwMSwyNTMsMCwxNTMsNTcsMTgyLDI1NCwzMiwxNTAsNDIsMCwyNSwxOTgsMTQ2LDEsMjM3LDI0MSw1NiwwLDE0MCw2OCw1LDAsOTEsMTY0LDE3MiwyNTUsNzgsMTQ1LDE4NiwyNTQsNjcsNTIsMjA1LDAsMjE5LDIwNywxMjksMSwxMDksMTE1LDE3LDAsNTQsMTQzLDU4LDEsMjEsMjQ4LDEyMCwyNTUsMTc5LDI1NSwzMCwwLDE5MywyMzYsNjYsMjU1LDEsMjU1LDcsMjU1LDI1MywxOTIsNDgsMjU1LDE5LDY5LDIxNywxLDMsMjE0LDAsMjU1LDY0LDEwMSwxNDYsMSwyMjMsMTI1LDM1LDI1NSwyMzUsNzMsMTc5LDI1NSwyNDksMTY3LDIyNiwwLDIyNSwxNzUsMTAsMSw5NywxNjIsNTgsMCwxMDYsMTEyLDE3MSwxLDg0LDE3Miw1LDI1NSwxMzMsMTQwLDE3OCwyNTUsMTM0LDI0NSwxNDIsMCw5Nyw5MCwxMjUsMjU1LDE4NiwyMDMsMTg1LDI1NSwyMjMsNzcsMjMsMjU1LDE5Miw5MiwxMDYsMCwxNSwxOTgsMTE1LDI1NSwyMTcsMTUyLDI0OCwwLDE3MSwxNzgsMTIwLDI1NSwyMjgsMTM0LDUzLDAsMTc2LDU0LDE5MywxLDI1MCwyNTEsNTMsMCwyMTMsMTAsMTAwLDEsMzQsMTk5LDEwNiwwLDE1MSwzMSwyNDQsMjU0LDE3MiwyMjQsODcsMjU1LDE0LDIzNywyMywyNTUsMjUzLDg1LDI2LDI1NSwxMjcsMzksMTE2LDI1NSwxNzIsMTA0LDEwMCwwLDI1MSwxNCw3MCwyNTUsMjEyLDIwOCwxMzgsMjU1LDI1MywyMTEsMjUwLDAsMTc2LDQ5LDE2NSwwLDE1LDc2LDEyMywyNTUsMzcsMjE4LDE2MCwyNTUsOTIsMTM1LDE2LDEsMTAsMTI2LDExNCwyNTUsNzAsNSwyMjQsMjU1LDI0NywyNDksMTQxLDAsNjgsMjAsNjAsMSwyNDEsMjEwLDE4OSwyNTUsMTk1LDIxNywxODcsMSwxNTEsMywxMTMsMCwxNTEsOTIsMTc0LDAsMjMxLDYyLDE3OCwyNTUsMjE5LDE4MywyMjUsMCwyMywyMywzMywyNTUsMjA1LDE4MSw4MCwwLDU3LDE4NCwyNDgsMjU1LDY3LDE4MCwxLDI1NSw5MCwxMjMsOTMsMjU1LDM5LDAsMTYyLDI1NSw5NiwyNDgsNTIsMjU1LDg0LDY2LDE0MCwwLDM0LDEyNywyMjgsMjU1LDE5NCwxMzgsNywxLDE2NiwxMTAsMTg4LDAsMjEsMTcsMTU1LDEsMTU0LDE5MCwxOTgsMjU1LDIxNCw4MCw1OSwyNTUsMTgsNywxNDMsMCw3MiwyOSwyMjYsMSwxOTksMjE3LDI0OSwwLDIzMiwxNjEsNzEsMSwxNDksMTkwLDIwMSwwLDIxNywxNzUsOTUsMjU0LDExMywxNDcsNjcsMjU1LDEzOCwxNDMsMTk5LDI1NSwxMjcsMjA0LDEsMCwyOSwxODIsODMsMSwyMDYsMjMwLDE1NSwyNTUsMTg2LDIwNCw2MCwwLDEwLDEyNSw4NSwyNTUsMjMyLDk2LDI1LDI1NSwyNTUsODksMjQ3LDI1NSwyMTMsMjU0LDE3NSwxLDIzMiwxOTMsODEsMCwyOCw0MywxNTYsMjU0LDEyLDY5LDgsMCwxNDcsMjQsMjQ4LDAsMTgsMTk4LDQ5LDAsMTM0LDYwLDM1LDAsMTE4LDI0NiwxOCwyNTUsNDksODgsMjU0LDI1NCwyMjgsMjEsMTg2LDI1NSwxODIsNjUsMTEyLDEsMjE5LDIyLDEsMjU1LDIyLDEyNiw1MiwyNTUsMTg5LDUzLDQ5LDI1NSwxMTIsMjUsMTQzLDAsMzgsMTI3LDU1LDI1NSwyMjYsMTAxLDE2MywyNTQsMjA4LDEzMyw2MSwyNTUsMTM3LDY5LDE3NCwxLDE5MCwxMTgsMTQ1LDI1NSw2MCw5OCwyMTksMjU1LDIxNywxMywyNDUsMjU1LDI1MCwxMzYsMTAsMCw4NCwyNTQsMjI2LDAsMjAxLDMxLDEyNSwxLDI0MCw1MSwyNTEsMjU1LDMxLDEzMSwxMzAsMjU1LDIsMTM4LDUwLDI1NSwyMTUsMjE1LDE3NywxLDIyMywxMiwyMzgsMjU1LDI1MiwxNDksNTYsMjU1LDEyNCw5MSw2OCwyNTUsNzIsMTI2LDE3MCwyNTQsMTE5LDI1NSwxMDAsMCwxMzAsMTM1LDIzMiwyNTUsMTQsNzksMTc4LDAsMjUwLDEzMSwxOTcsMCwxMzgsMTk4LDIwOCwwLDEyMSwyMTYsMTM5LDI1NCwxMTksMTgsMzYsMjU1LDI5LDE5MywxMjIsMCwxNiw0Miw0NSwyNTUsMjEzLDI0MCwyMzUsMSwyMzAsMTkwLDE2OSwyNTUsMTk4LDM1LDIyOCwyNTQsMTEwLDE3Myw3MiwwLDIxNCwyMjEsMjQxLDI1NSw1NiwxNDgsMTM1LDAsMTkyLDExNyw3OCwyNTQsMTQxLDkzLDIwNywyNTUsMTQzLDY1LDE0OSwwLDIxLDE4LDk4LDI1NSw5NSw0NCwyNDQsMSwxMDYsMTkxLDc3LDAsMjU0LDg1LDgsMjU0LDIxNCwxMTAsMTc2LDI1NSw3MywxNzMsMTksMjU0LDE2MCwxOTYsMTk5LDI1NSwyMzcsOTAsMTQ0LDAsMTkzLDE3MiwxMTMsMjU1LDIwMCwxNTUsMTM2LDI1NCwyMjgsOTAsMjIxLDAsMTM3LDQ5LDc0LDEsMTY0LDIyMSwyMTUsMjU1LDIwOSwxODksNSwyNTUsMTA1LDIzNiw1NSwyNTUsNDIsMzEsMTI5LDEsMTkzLDI1NSwyMzYsMCw0NiwyMTcsNjAsMCwxMzgsODgsMTg3LDI1NSwyMjYsODIsMjM2LDI1NSw4MSw2OSwxNTEsMjU1LDE0MiwxOTAsMTYsMSwxMywxMzQsOCwwLDEyNywxMjIsNDgsMjU1LDgxLDY0LDE1NiwwLDE3MSwyNDMsMTM5LDAsMjM3LDM1LDI0NiwwLDEyMiwxNDMsMTkzLDI1NCwyMTIsMTIyLDE0NiwwLDk1LDQxLDI1NSwxLDg3LDEzMiw3NywwLDQsMjEyLDMxLDAsMTcsMzEsNzgsMCwzOSw0NSwxNzMsMjU0LDI0LDE0MiwyMTcsMjU1LDk1LDksNiwyNTUsMjI3LDgzLDYsMCw5OCw1OSwxMzAsMjU0LDYyLDMwLDMzLDAsOCwxMTUsMjExLDEsMTYyLDk3LDEyOCwyNTUsNywxODQsMjMsMjU0LDExNiwyOCwxNjgsMjU1LDI0OCwxMzgsMTUxLDI1NSw5OCwyNDQsMjQwLDAsMTg2LDExOCwxMzAsMCwxMTQsMjQ4LDIzNSwyNTUsMTA1LDE3MywyMDAsMSwxNjAsMTI0LDcxLDI1NSw5NCwzNiwxNjQsMSwxNzUsNjUsMTQ2LDI1NSwyMzgsMjQxLDE3MCwyNTQsMjAyLDE5OCwxOTcsMCwyMjgsNzEsMTM4LDI1NCw0NSwyNDYsMTA5LDI1NSwxOTQsNTIsMTU4LDAsMTMzLDE4NywxNzYsMCw4MywyNTIsMTU0LDI1NCw4OSwxODksMjIxLDI1NSwxNzAsNzMsMjUyLDAsMTQ4LDU4LDEyNSwwLDM2LDY4LDUxLDI1NCw0Miw2OSwxNzcsMjU1LDE2OCw3Niw4NiwyNTUsMzgsMTAwLDIwNCwyNTUsMzgsNTMsMzUsMCwxNzUsMTksOTcsMCwyMjUsMjM4LDI1MywyNTUsODEsODEsMTM1LDAsMjEwLDI3LDI1NSwyNTQsMjM1LDczLDEwNywwLDgsMjA3LDExNSwwLDgyLDEyNywxMzYsMCw4NCw5OSwyMSwyNTQsMjA3LDE5LDEzNiwwLDEwMCwxNjQsMTAxLDAsODAsMjA4LDc3LDI1NSwxMzIsMjA3LDIzNywyNTUsMTUsMywxNSwyNTUsMzMsMTY2LDExMCwwLDE1Niw5NSw4NSwyNTUsMzcsMTg1LDExMSwxLDE1MCwxMDYsMzUsMjU1LDE2NiwxNTEsNzYsMCwxMTQsODcsMTM1LDI1NSwxNTksMTk0LDY0LDAsMTIsMTIyLDMxLDI1NSwyMzIsNywxMDEsMjU0LDE3MywxMTksOTgsMCwxNTQsNzEsMjIwLDI1NCwxOTEsNTcsNTMsMjU1LDE2OCwyMzIsMTYwLDI1NSwyMjQsMzIsOTksMjU1LDIxOCwxNTYsMTY1LDAsMTUxLDE1MywxNjMsMCwyMTcsMTMsMTQ4LDEsMTk3LDExMyw4OSwwLDE0OSwyOCwxNjEsMjU0LDIwNywyMywzMCwwLDEwNSwxMzIsMjI3LDI1NSw1NCwyMzAsOTQsMjU1LDEzMywxNzMsMjA0LDI1NSw5MiwxODMsMTU3LDI1NSw4OCwxNDQsMjUyLDI1NCwxMDIsMzMsOTAsMCwxNTksOTcsMywwLDE4MSwyMTgsMTU1LDI1NSwyNDAsMTE0LDExOSwwLDEwNiwyMTQsNTMsMjU1LDE2NSwxOTAsMTE1LDEsMTUyLDkxLDIyNSwyNTUsODgsMTA2LDQ0LDI1NSwyMDgsNjEsMTEzLDAsMTUxLDUyLDEyNCwwLDE5MSwyNywxNTYsMjU1LDExMCw1NCwyMzYsMSwxNCwzMCwxNjYsMjU1LDM5LDEyNywyMDcsMSwyMjksMTk5LDI4LDAsMTg4LDIyOCwxODgsMjU0LDEwMCwxNTcsMjM1LDAsMjQ2LDIxOCwxODMsMSwxMDcsMjIsMTkzLDI1NSwyMDYsMTYwLDk1LDAsNzYsMjM5LDE0NywwLDIwNywxNjEsMTE3LDAsNTEsMTY2LDIsMjU1LDUyLDExNywxMCwyNTQsNzMsNTYsMjI3LDI1NSwxNTIsMTkzLDIyNSwwLDEzMiw5NCwxMzYsMjU1LDEwMSwxOTEsMjA5LDAsMzIsMTA3LDIyOSwyNTUsMTk4LDQzLDE4MCwxLDEwMCwyMTAsMTE4LDAsMTE0LDY3LDE1MywyNTUsMjMsODgsMjYsMjU1LDg5LDE1NCw5MiwxLDIyMCwxMjAsMTQwLDI1NSwxNDQsMTE0LDIwNywyNTUsMjUyLDExNSwyNTAsMjU1LDM0LDIwNiw3MiwwLDEzOCwxMzMsMTI3LDI1NSw4LDE3OCwxMjQsMSw4Nyw3NSw5NywwLDE1LDIyOSw5MiwyNTQsMjQwLDY3LDEzMSwyNTUsMTE4LDEyMywyMjcsMjU0LDE0NiwxMjAsMTA0LDI1NSwxNDUsMjEzLDI1NSwxLDEyOSwxODcsNzAsMjU1LDIxOSwxMTksNTQsMCwxLDE5LDE3MywwLDQ1LDE1MCwxNDgsMSwyNDgsODMsNzIsMCwyMDMsMjMzLDE2OSwxLDE0MiwxMDcsNTYsMCwyNDcsMjQ5LDM4LDEsNDUsMjQyLDgwLDI1NSwzMCwyMzMsMTAzLDAsOTYsODIsNzAsMCwyMywyMDEsMTExLDAsODEsMzksMzAsMjU1LDE2MSwxODMsNzgsMjU1LDE5NCwyMzQsMzMsMjU1LDY4LDIyNywxNDAsMjU0LDIxNiwyMDYsMTE2LDAsNzAsMjcsMjM1LDI1NSwxMDQsMTQ0LDc5LDAsMTY0LDIzMCw5MywyNTQsMjE0LDEzNSwxNTYsMCwxNTQsMTg3LDI0MiwyNTQsMTg4LDIwLDEzMSwyNTUsMzYsMTA5LDE3NCwwLDE1OSwxMTIsMjQxLDAsNSwxMTAsMTQ5LDEsMzYsMTY1LDIxOCwwLDE2NiwyOSwxOSwxLDE3OCw0Niw3MywwLDkzLDQzLDMyLDI1NCwyNDgsMTg5LDIzNywwLDEwMiwxNTUsMTQxLDAsMjAxLDkzLDE5NSwyNTUsMjQxLDEzOSwyNTMsMjU1LDE1LDExMSw5OCwyNTUsMTA4LDY1LDE2MywyNTQsMTU1LDc5LDE5MCwyNTUsNzMsMTc0LDE5MywyNTQsMjQ2LDQwLDQ4LDI1NSwxMDcsODgsMTEsMjU0LDIwMiw5Nyw4NSwyNTUsMjUzLDIwNCwxOCwyNTUsMTEzLDI0Miw2NiwwLDExMCwxNjAsMTk0LDI1NCwyMDgsMTgsMTg2LDAsODEsMjEsNjAsMCwxODgsMTA0LDE2NywyNTUsMTI0LDE2Niw5NywyNTQsMjEwLDEzMywxNDIsMCw1NiwyNDIsMTM3LDI1NCw0MSwxMTEsMTMwLDAsMTExLDE1MSw1OCwxLDExMSwyMTMsMTQxLDI1NSwxODMsMTcyLDI0MSwyNTUsMzgsNiwxOTYsMjU1LDE4NSw3LDEyMywyNTUsNDYsMTEsMjQ2LDAsMjQ1LDEwNSwxMTksMSwxNSwyLDE2MSwyNTUsOCwyMDYsNDUsMjU1LDE4LDIwMiw3NCwyNTUsODMsMTI0LDExNSwxLDIxMiwxNDEsMTU3LDAsODMsOCwyMDksMjU0LDEzOSwxNSwyMzIsMjU1LDE3Miw1NCwxNzMsMjU0LDUwLDI0NywxMzIsMCwyMTQsMTg5LDIxMywwLDE0NCwxODQsMTA1LDAsMjIzLDI1NCwyNDgsMCwyNTUsMTQ3LDI0MCwyNTUsMjMsMTg4LDcyLDAsNyw1MSw1NCwwLDE4OCwyNSwxODAsMjU0LDIyMCwxODAsMCwyNTUsODMsMTYwLDIwLDAsMTYzLDE4OSwyNDMsMjU1LDU4LDIwOSwxOTQsMjU1LDg3LDczLDYwLDAsMTA2LDI0LDQ5LDAsMjQ1LDI0OSwyMjAsMCwyMiwxNzMsMTY3LDAsMTE4LDExLDE5NSwyNTUsMTksMTI2LDIzNywwLDExMCwxNTksMzcsMjU1LDU5LDgyLDQ3LDAsMTgwLDE4Nyw4NiwwLDE4OCwxNDgsMjA4LDEsMTAwLDM3LDEzMywyNTUsNywxMTIsMTkzLDAsMTI5LDE4OCwxNTYsMjU1LDg0LDEwNiwxMjksMjU1LDEzMywyMjUsMjAyLDAsMTQsMjM2LDExMSwyNTUsNDAsMjAsMTAxLDAsMTcyLDE3Miw0OSwyNTQsNTEsNTQsNzQsMjU1LDI1MSwxODUsMTg0LDI1NSw5MywxNTUsMjI0LDI1NSwxODAsMjQ5LDIyNCwxLDIzMCwxNzgsMTQ2LDAsNzIsNTcsNTQsMjU0LDE3OCw2MiwxODQsMCwxMTksMjA1LDcyLDAsMTg1LDIzOSwyNTMsMjU1LDYxLDE1LDIxOCwwLDE5Niw2Nyw1NiwyNTUsMjM0LDMyLDE3MSwxLDQ2LDIxOSwyMjgsMCwyMDgsMTA4LDIzNCwyNTUsMjAsNjMsMjMyLDI1NSwxNjUsNTMsMTk5LDEsMTMzLDIyOCw1LDI1NSw1MiwyMDUsMTA3LDAsNzQsMjM4LDE0MCwyNTUsMTUwLDE1NiwyMTksMjU0LDIzOSwxNzIsMTc4LDI1NSwyNTEsMTg5LDIyMywyNTQsMzIsMTQyLDIxMSwyNTUsMjE4LDE1LDEzOCwxLDI0MSwxOTYsODAsMCwyOCwzNiw5OCwyNTQsMjIsMjM0LDE5OSwwLDYxLDIzNywyMjAsMjU1LDI0Niw1NywzNywwLDE0MiwxNywxNDIsMjU1LDE1Nyw2MiwyNiwwLDQzLDIzOCw5NSwyNTQsMywyMTcsNiwyNTUsMjEzLDI1LDI0MCwxLDM5LDIyMCwxNzQsMjU1LDE1NCwyMDUsNDgsMjU0LDE5LDEzLDE5MiwyNTUsMjQ0LDM0LDU0LDI1NCwxNDAsMTYsMTU1LDAsMjQwLDE4MSw1LDI1NCwxNTUsMTkzLDYwLDAsMTY2LDEyOCw0LDI1NSwzNiwxNDUsNTYsMjU1LDE1MCwyNDAsMjE5LDAsMTIwLDUxLDE0NSwwLDgyLDE1Myw0MiwxLDE0MCwyMzYsMTQ2LDAsMTA3LDkyLDI0OCwxLDE4OSwxMCwzLDAsNjMsMTM2LDI0MiwwLDIxMSwzOSwyNCwwLDE5LDIwMiwxNjEsMSwxNzMsMjcsMTg2LDI1NSwyMTAsMjA0LDIzOSwyNTQsNDEsMjA5LDE2MiwyNTUsMTgyLDI1NCwxNTksMjU1LDE3MiwxMTYsNTIsMCwxOTUsMTAzLDIyMiwyNTQsMjA1LDY5LDU5LDAsNTMsMjIsNDEsMSwyMTgsNDgsMTk0LDAsODAsMjEwLDI0MiwwLDIxMCwxODgsMjA3LDAsMTg3LDE2MSwxNjEsMjU0LDIxNiwxNywxLDAsMTM2LDIyNSwxMTMsMCwyNTAsMTg0LDYzLDAsMjIzLDMwLDk4LDI1NCw3NywxNjgsMTYyLDAsNTksNTMsMTc1LDAsMTksMjAxLDEwLDI1NSwxMzksMjI0LDE5NCwwLDE0NywxOTMsMTU0LDI1NSwyMTIsMTg5LDEyLDI1NCwxLDIwMCwxNzQsMjU1LDUwLDEzMywxMTMsMSw5NCwxNzksOTAsMCwxNzMsMTgyLDEzNSwwLDk0LDE3NywxMTMsMCw0Myw4OSwyMTUsMjU1LDEzNiwyNTIsMTA2LDI1NSwxMjMsMTM0LDgzLDI1NCw1LDI0NSw2NiwyNTUsODIsNDksMzksMSwyMjAsMiwyMjQsMCw5NywxMjksMTc3LDAsNzcsNTksODksMCw2MSwyOSwxNTUsMSwyMDMsMTcxLDIyMCwyNTUsOTIsNzgsMTM5LDAsMTQ1LDMzLDE4MSwyNTUsMTY5LDI0LDE0MSwxLDU1LDE1MCwxNzksMCwxMzksNjAsODAsMjU1LDIxOCwzOSw5NywwLDIsMTQ3LDEwNywyNTUsNjAsMjQ4LDcyLDAsMTczLDIzMCw0NywxLDYsODMsMTgyLDI1NSwxNiwxMDUsMTYyLDI1NCwxMzcsMjEyLDgxLDI1NSwxODAsMTg0LDEzNCwxLDM5LDIyMiwxNjQsMjU1LDIyMSwxMDUsMjUxLDEsMjM5LDExMiwxMjUsMCw2Myw3LDk3LDAsNjMsMTA0LDIyNywyNTUsMTQ4LDU4LDEyLDAsOTAsNjAsMjI0LDI1NSw4NCwyMTIsMjUyLDAsNzksMjE1LDE2OCwwLDI0OCwyMjEsMTk5LDEsMTE1LDEyMSwxLDAsMzYsMTcyLDEyMCwwLDMyLDE2MiwxODcsMjU1LDU3LDEwNyw0OSwyNTUsMTQ3LDQyLDIxLDAsMTA2LDE5OCw0MywxLDU3LDc0LDg3LDAsMTI2LDIwMyw4MSwyNTUsMTI5LDEzNSwxOTUsMCwxNDAsMzEsMTc3LDAsMjIxLDEzOSwxOTQsMCwzLDIyMiwyMTUsMCwxMzEsNjgsMjMxLDAsMTc3LDg2LDE3OCwyNTQsMTI0LDE1MSwxODAsMCwxODQsMTI0LDM4LDEsNzAsMTYzLDE3LDAsMjQ5LDI1MSwxODEsMSw0Miw1NSwyMjcsMCwyMjYsMTYxLDQ0LDAsMjMsMjM2LDExMCwwLDUxLDE0OSwxNDIsMSw5Myw1LDIzNiwwLDIxOCwxODMsMTA2LDI1NCw2NywyNCw3NywwLDQwLDI0NSwyMDksMjU1LDIyMiwxMjEsMTUzLDAsMTY1LDU3LDMwLDAsODMsMTI1LDYwLDAsNzAsMzgsODIsMSwyMjksNiwxODgsMCwxMDksMjIyLDE1NywyNTUsNTUsMTE4LDYzLDI1NSwyMDUsMTUxLDE4NiwwLDIyNywzMywxNDksMjU1LDI1NCwxNzYsMjQ2LDEsMjI3LDE3NywyMjcsMCwzNCwxMDYsMTYzLDI1NCwxNzYsNDMsNzksMCwxMDYsOTUsNzgsMSwxODUsMjQxLDEyMiwyNTUsMTg1LDE0LDYxLDAsMzYsMSwyMDIsMCwxMywxNzgsMTYyLDI1NSwyNDcsMTEsMTMyLDAsMTYxLDIzMCw5MiwxLDY1LDEsMTg1LDI1NSwyMTIsNTAsMTY1LDEsMTQxLDE0Niw2NCwyNTUsMTU4LDI0MiwyMTgsMCwyMSwxNjQsMTI1LDAsMjEzLDEzOSwxMjIsMSw2Nyw3MSw4NywwLDIwMywxNTgsMTc4LDEsMTUxLDkyLDQzLDAsMTUyLDExMSw1LDI1NSwzOSwzLDIzOSwyNTUsMjE3LDI1NSwyNTAsMjU1LDE3Niw2Myw3MSwyNTUsNzQsMjQ1LDc3LDEsMjUwLDE3NCwxOCwyNTUsMzQsNDksMjI3LDI1NSwyNDYsNDYsMjUxLDI1NSwxNTQsMzUsNDgsMSwxMjUsMTU3LDYxLDI1NSwxMDYsMzYsNzgsMjU1LDk3LDIzNiwxNTMsMCwxMzYsMTg3LDEyMCwyNTUsMTEzLDEzNCwxNzEsMjU1LDE5LDIxMywyMTcsMjU0LDIxNiw5NCwyMDksMjU1LDI1Miw1LDYxLDAsOTQsMywyMDIsMCwzLDI2LDE4MywyNTUsNjQsMTkxLDQzLDI1NSwzMCwyMywyMSwwLDEyOSwxNDEsNzcsMjU1LDEwMiwxMjAsNywxLDE5NCw3NiwxNDAsMCwxODgsMTc1LDUyLDI1NSwxNyw4MSwxNDgsMCwyMzIsODYsNTUsMSwyMjUsNDgsMTcyLDAsMTM0LDQyLDQyLDI1NSwyMzgsNTAsNDcsMCwxNjksMTgsMjU0LDAsMjAsMTQ3LDg3LDI1NSwxNCwxOTUsMjM5LDI1NSw2OSwyNDcsMjMsMCwyMzgsMjI5LDEyOCwyNTUsMTc3LDQ5LDExMiwwLDE2OCw5OCwyNTEsMjU1LDEyMSw3MSwyNDgsMCwyNDMsOCwxNDUsMjU0LDI0NiwyMjcsMTUzLDI1NSwyMTksMTY5LDE3NywyNTQsMjUxLDEzOSwxNjUsMjU1LDEyLDE2MywxODUsMjU1LDE2NCw0MCwxNzEsMjU1LDE1MywxNTksMjcsMjU0LDI0MywxMDksOTEsMjU1LDIyMiwyNCwxMTIsMSwxOCwyMTQsMjMxLDAsMTA3LDE1NywxODEsMjU0LDE5NSwxNDcsMCwyNTUsMTk0LDk5LDEwNCwyNTUsODksMTQwLDE5MCwyNTUsMTc3LDY2LDEyNiwyNTQsMTA2LDE4NSw2NiwwLDQ5LDIxOCwzMSwwLDI1MiwxNzQsMTU4LDAsMTg4LDc5LDIzMCwxLDIzOCw0MSwyMjQsMCwyMTIsMjM0LDgsMSwxMzYsMTEsMTgxLDAsMTY2LDExNyw4MywyNTUsNjgsMTk1LDk0LDAsNDYsMTMyLDIwMSwwLDI0MCwxNTIsODgsMCwxNjQsNTcsNjksMjU0LDE2MCwyMjQsNDIsMjU1LDU5LDIxNSw2NywyNTUsMTE5LDE5NSwxNDEsMjU1LDM2LDE4MCwxMjEsMjU0LDIwNyw0Nyw4LDI1NSwxNzQsMjEwLDIyMywwLDEwMSwxOTcsNjgsMjU1LDI1NSw4MiwxNDEsMSwyNTAsMTM3LDIzMywwLDk3LDg2LDEzMywxLDE2LDgwLDY5LDAsMTMyLDEzMSwxNTksMCwxMTYsOTMsMTAwLDAsNDUsMTQxLDEzOSwwLDE1MiwxNzIsMTU3LDI1NSw5MCw0Myw5MSwwLDcxLDE1Myw0NiwwLDM5LDE2LDExMiwyNTUsMjE3LDEzNiw5NywyNTUsMjIwLDE5OCwyNSwyNTQsMTc3LDUzLDQ5LDAsMjIyLDg4LDEzNCwyNTUsMTI4LDE1LDYwLDAsMjA3LDE5MiwxNjksMjU1LDE5MiwxMTYsMjA5LDI1NSwxMDYsNzgsMjExLDEsMjAwLDIxMywxODMsMjU1LDcsMTIsMTIyLDI1NCwyMjIsMjAzLDYwLDI1NSwzMywxMTAsMTk5LDI1NCwyNTEsMTA2LDExNywwLDIyOCwyMjUsNCwxLDEyMCw1OCw3LDI1NSwyMjEsMTkzLDg0LDI1NCwxMTIsMTMzLDI3LDAsMTg5LDIwMCwyMDEsMjU1LDEzOSwxMzUsMTUwLDAsMjM0LDU1LDE3NiwyNTUsNjEsNTAsNjUsMCwxNTIsMTA4LDE2OSwyNTUsMjIwLDg1LDEsMjU1LDExMiwxMzUsMjI3LDAsMTYyLDI2LDE4NiwwLDIwNyw5NiwxODUsMjU0LDI0NCwxMzYsMTA3LDAsOTMsMTUzLDUwLDEsMTk4LDk3LDE1MSwwLDExMCwxMSw4NiwyNTUsMTQzLDExNywxNzQsMjU1LDExNSwyMTIsMjAwLDAsNSwyMDIsMTgzLDAsMjM3LDE2NCwxMCwyNTQsMTg1LDIzOSw2MiwwLDIzNiwxMjAsMTgsMjU0LDk4LDEyMyw5OSwyNTUsMTY4LDIwMSwxOTQsMjU0LDQ2LDIzNCwyMTQsMCwxOTEsMTMzLDQ5LDI1NSw5OSwxNjksMTE5LDAsMTkwLDE4NywzNSwxLDExNSwyMSw0NSwyNTUsMjQ5LDEzMSw3MiwwLDExMiw2LDEyMywyNTUsMjE0LDQ5LDE4MSwyNTQsMTY2LDIzMywzNCwwLDkyLDE5NywxMDIsMjU0LDI1MywyMjgsMjA1LDI1NSwzLDU5LDIwMSwxLDQyLDk4LDQ2LDAsMjE5LDM3LDM1LDI1NSwxNjksMTk1LDM4LDAsOTQsMTI0LDE5MywxLDE1Niw0MywyMjMsMCw5NSw3MiwxMzMsMjU0LDEyMCwyMDYsMTkxLDAsMTIyLDE5NywyMzksMjU1LDE3NywxODcsNzksMjU1LDI1NCw0NiwyLDEsMjUwLDE2NywxOTAsMCw4NCwxMjksMTksMCwyMDMsMTEzLDE2NiwyNTUsMjQ5LDMxLDE4OSwyNTQsNzIsMTU3LDIwMiwyNTUsMjA4LDcxLDczLDI1NSwyMDcsMjQsNzIsMCwxMCwxNiwxOCwxLDIxMCw4MSw3NiwyNTUsODgsMjA4LDE5MiwyNTUsMTI2LDI0MywxMDcsMjU1LDIzOCwxNDEsMTIwLDI1NSwxOTksMTIxLDIzNCwyNTUsMTM3LDEyLDU5LDI1NSwzNiwyMjAsMTIzLDI1NSwxNDgsMTc5LDYwLDI1NCwyNDAsMTIsMjksMCw2NiwwLDk3LDEsMzYsMzAsMzgsMjU1LDExNSwxLDkzLDI1NSw5NiwxMDMsMjMxLDI1NSwxOTcsMTU4LDU5LDEsMTkyLDE2NCwyNDAsMCwyMDIsMjAyLDU3LDI1NSwyNCwxNzQsNDgsMCw4OSw3NywxNTUsMSw0Miw3NiwyMTUsMCwyNDQsMTUxLDIzMywwLDIzLDQ4LDgxLDAsMjM5LDEyNyw1MiwyNTQsMjI3LDEzMCwzNywyNTUsMjQ4LDExNiw5MywxLDEyNCwxMzIsMTE4LDAsMTczLDI1NCwxOTIsMSw2LDIzNSw4MywyNTUsMTEwLDE3NSwyMzEsMSwyNTEsMjgsMTgyLDAsMTI5LDI0OSw5MywyNTQsODQsMTg0LDEyOCwwLDc2LDE4MSw2MiwwLDE3NSwxMjgsMTg2LDAsMTAwLDUzLDEzNiwyNTQsMTA5LDI5LDIyNiwwLDIyMSwyMzMsNTgsMSwyMCw5OSw3NCwwLDAsMjIsMTYwLDAsMTM0LDEzLDIxLDAsOSw1Miw1NSwyNTUsMTcsODksMTQwLDAsMTc1LDM0LDU5LDAsODQsMTY1LDExOSwyNTUsMjI0LDIyNiwyMzQsMjU1LDcsNzIsMTY2LDI1NSwxMjMsMTE1LDI1NSwxLDE4LDIxNCwyNDYsMCwyNTAsNyw3MSwxLDIxNywyMjAsMTg1LDAsMjEyLDM1LDc2LDI1NSwzOCwxMjUsMTc1LDAsMTg5LDk3LDIxMCwwLDExNCwyMzgsNDQsMjU1LDQxLDE4OCwxNjksMjU0LDQ1LDE4NiwxNTQsMCw4MSw5MiwyMiwwLDEzMiwxNjAsMTkzLDAsMTIxLDIwOCw5OCwyNTUsMTMsODEsNDQsMjU1LDIwMywxNTYsODIsMCw3MSw1OCwyMSwyNTUsMjA4LDExNCwxOTEsMjU0LDUwLDM4LDE0NywwLDE1NCwyMTYsMTk1LDAsMTAxLDI1LDE4LDAsNjAsMjUwLDIxNSwyNTUsMjMzLDEzMiwyMzUsMjU1LDEwMywxNzUsMTQyLDEsMTYsMTQsOTIsMCwxNDEsMzEsMTEwLDI1NCwyMzgsMjQxLDQ1LDI1NSwxNTMsMjE3LDIzOSwxLDk3LDE2OCw0NywyNTUsMjQ5LDg1LDE2LDEsMjgsMTc1LDYyLDI1NSw1NywyNTQsNTQsMCwyMjIsMjMxLDEyNiwwLDE2Niw0NSwxMTcsMjU0LDE4LDE4OSw5NiwyNTUsMjI4LDc2LDUwLDAsMjAwLDI0NCw5NCwwLDE5OCwxNTIsMTIwLDEsNjgsMzQsNjksMjU1LDEyLDY1LDE2MCwyNTQsMTAxLDE5LDkwLDAsMTY3LDE5NywxMjAsMjU1LDY4LDU0LDE4NSwyNTUsNDEsMjE4LDE4OCwwLDExMywxNjgsNDgsMCw4OCwxMDUsMTg5LDEsMjYsODIsMzIsMjU1LDE4NSw5MywxNjQsMSwyMjgsMjQwLDIzNywyNTUsNjYsMTgyLDUzLDAsMTcxLDE5Nyw5MiwyNTUsMTA3LDksMjMzLDEsMTk5LDEyMCwxNDQsMjU1LDc4LDQ5LDEwLDI1NSwxMDksMTcwLDEwNSwyNTUsOTAsNCwzMSwyNTUsMjgsMjQ0LDExMywyNTUsNzQsNTgsMTEsMCw2MiwyMjAsMjQ2LDI1NSwxMjEsMTU0LDIwMCwyNTQsMTQ0LDIxMCwxNzgsMjU1LDEyNiw1NywxMjksMSw0MywyNTAsMTQsMjU1LDEwMSwxMTEsMjgsMSw0Nyw4NiwyNDEsMjU1LDYxLDcwLDE1MCwyNTUsNTMsNzMsNSwyNTUsMzAsMjYsMTU4LDAsMjA5LDI2LDg2LDAsMTM4LDIzNyw3NCwwLDE2NCw5NSwxODgsMCwxNDIsNjAsMjksMjU0LDE2MiwxMTYsMjQ4LDI1NSwxODcsMTc1LDE2MCwwLDE1MSwxOCwxNiwwLDIwOSwxMTEsNjUsMjU0LDIwMywxMzQsMzksMjU1LDg4LDEwOCw0OSwyNTUsMTMxLDI2LDcxLDI1NSwyMjEsMjcsMjE1LDI1NCwxMDQsMTA1LDkzLDI1NSwzMSwyMzYsMzEsMjU0LDEzNSwwLDIxMSwyNTUsMTQzLDEyNywxMTAsMSwyMTIsNzMsMjI5LDAsMjMzLDY3LDE2NywyNTQsMTk1LDEsMjA4LDI1NSwxMzIsMTcsMjIxLDI1NSw1MSwyMTcsOTAsMCw2NywyMzUsNTAsMjU1LDIyMywyMTAsMTQzLDAsMTc5LDUzLDEzMCwxLDIzMywxMDYsMTk4LDAsMjE3LDE3MywyMjAsMjU1LDExMiwyMjksMjQsMjU1LDE3NSwxNTQsOTMsMjU0LDcxLDIwMywyNDYsMjU1LDQ4LDY2LDEzMywyNTUsMywxMzYsMjMwLDI1NSwyMywyMjEsMTEzLDI1NCwyMzUsMTExLDIxMywwLDE3MCwxMjAsOTUsMjU0LDI1MSwyMjEsMiwwLDQ1LDEzMCwxNTgsMjU0LDEwNSw5NCwyMTcsMjU1LDI0Miw1MiwxODAsMjU0LDIxMyw2OCw0NSwyNTUsMTA0LDM4LDI4LDAsMjQ0LDE1OCw3NiwwLDE2MSwyMDAsOTYsMjU1LDIwNyw1MywxMywyNTUsMTg3LDY3LDE0OCwwLDE3MCw1NCwyNDgsMCwxMTksMTYyLDE3OCwyNTUsODMsMjAsMTEsMCw0Miw0MiwxOTIsMSwxNDYsMTU5LDE2MywyNTUsMTgzLDIzMiwxMTEsMCw3NywyMjksMjEsMjU1LDcxLDUzLDE0MywwLDI3LDc2LDM0XSxcImk4XCIsQUxMT0NfTk9ORSxSdW50aW1lLkdMT0JBTF9CQVNFKTthbGxvY2F0ZShbMjQ2LDEzNiw0NywyNTUsMjE5LDM5LDE4MiwyNTUsOTIsMjI0LDIwMSwxLDE5LDE0MiwxNCwyNTUsNjksMTgyLDI0MSwyNTUsMTYzLDExOCwyNDUsMCw5LDEwOSwxMDYsMSwxNzAsMTgxLDI0NywyNTUsNzgsNDcsMjM4LDI1NSw4NCwyMTAsMTc2LDI1NSwyMTMsMTA3LDEzOSwwLDM5LDM4LDExLDAsNzIsMjEsMTUwLDAsNzIsMTMwLDY5LDAsMjA1LDc3LDE1NSwyNTQsMTQyLDEzMywyMSwwLDcxLDExMSwxNzIsMjU0LDIyNiw0Miw1OSwyNTUsMTc5LDAsMjE1LDEsMzMsMTI4LDI0MSwwLDIzNCwyNTIsMTMsMSwxODQsNzksOCwwLDExMCwzMCw3MywyNTUsMjQ2LDE0MSwxODksMCwxNzAsMjA3LDIxOCwxLDc0LDE1NCw2OSwyNTUsMTM4LDI0Niw0OSwyNTUsMTU1LDMyLDEwMCwwLDEyNSw3NCwxMDUsMjU1LDkwLDg1LDYxLDI1NSwzNSwyMjksMTc3LDI1NSw2MiwxMjUsMTkzLDI1NSwxNTMsODYsMTg4LDEsNzMsMTIwLDIxMiwwLDIwOSwxMjMsMjQ2LDI1NCwxMzUsMjA5LDM4LDI1NSwxNTEsNTgsNDQsMSw5Miw2OSwyMTQsMjU1LDE0LDEyLDg4LDI1NSwyNTIsMTUzLDE2NiwyNTUsMjUzLDIwNywxMTIsMjU1LDYwLDc4LDgzLDI1NSwyMjcsMTI0LDExMCwwLDE4MCw5NiwyNTIsMjU1LDUzLDExNywzMywyNTQsMTY0LDIyMCw4MiwyNTUsNDEsMSwyNywyNTUsMzgsMTY0LDE2NiwyNTUsMTY0LDk5LDE2OSwyNTQsNjEsMTQ0LDcwLDI1NSwxOTIsMTY2LDE4LDAsMTA3LDI1MCw2NiwwLDE5Nyw2NSw1MCwwLDEsMTc5LDE4LDI1NSwyNTUsMTA0LDEsMjU1LDQzLDE1MywzNSwyNTUsODAsMTExLDE2OCwwLDExMCwxNzUsMTY4LDAsNDEsMTA1LDQ1LDI1NSwyMTksMTQsMjA1LDI1NSwxNjQsMjMzLDE0MCwyNTQsNDMsMSwxMTgsMCwyMzMsNjcsMTk1LDAsMTc4LDgyLDE1OSwyNTUsMTM4LDg3LDEyMiwyNTUsMjEyLDIzOCw5MCwyNTUsMTQ0LDM1LDEyNCwyNTQsMjUsMTQwLDE2NCwwLDI1MSwyMTUsNDQsMjU0LDEzMyw3MCwxMDcsMjU1LDEwMSwyMjcsODAsMjU0LDkyLDE2OSw1NSwwLDIxNSw0Miw0OSwwLDExNCwxODAsODUsMjU1LDMzLDIzMiwyNywxLDE3MiwyMTMsMjUsMCw2MiwxNzYsMTIzLDI1NCwzMiwxMzMsMjQsMjU1LDIyNSwxOTEsNjIsMCw5Myw3MCwxNTMsMCwxODEsNDIsMTA0LDEsMjIsMTkxLDIyNCwyNTUsMjAwLDIwMCwxNDAsMjU1LDI0OSwyMzQsMzcsMCwxNDksNTcsMTQxLDAsMTk1LDU2LDIwOCwyNTUsMjU0LDEzMCw3MCwyNTUsMzIsMTczLDI0MCwyNTUsMjksMjIwLDE5OSwwLDExMCwxMDAsMTE1LDI1NSwxMzIsMjI5LDI0OSwwLDIyOCwyMzMsMjIzLDI1NSwzNywyMTYsMjA5LDI1NCwxNzgsMTc3LDIwOSwyNTUsMTgzLDQ1LDE2NSwyNTQsMjI0LDk3LDExNCwwLDEzNyw5NywxNjgsMjU1LDIyNSwyMjIsMTcyLDAsMTY1LDEzLDQ5LDEsMjEwLDIzNSwyMDQsMjU1LDI1Miw0LDI4LDI1NCw3MCwxNjAsMTUxLDAsMjMyLDE5MCw1MiwyNTQsODMsMjQ4LDkzLDI1NSw2MiwyMTUsNzcsMSwxNzUsMTc1LDE3OSwyNTUsMTYwLDUwLDY2LDAsMTIxLDQ4LDIwOCwwLDYzLDE2OSwyMDksMjU1LDAsMjEwLDIwMCwwLDIyNCwxODcsNDQsMSw3MywxNjIsODIsMCw5LDE3NiwxNDMsMjU1LDE5LDc2LDE5MywyNTUsMjksNTksMTY3LDEsMjQsNDMsMTU0LDAsMjgsMTkwLDE5MCwwLDE0MSwxODgsMTI5LDAsMjMyLDIzNSwyMDMsMjU1LDIzNCwwLDEwOSwyNTUsNTQsNjUsMTU5LDAsNjAsODgsMjMyLDI1NSwxMjEsMjUzLDE1MCwyNTQsMjUyLDIzMywxMzEsMjU1LDE5OCwxMTAsNDEsMSw4Myw3Nyw3MSwyNTUsMjAwLDIyLDU5LDI1NCwxMDYsMjUzLDI0MiwyNTUsMjEsMTIsMjA3LDI1NSwyMzcsNjYsMTg5LDAsOTAsMTk4LDIwMiwxLDIyNSwxNzIsMTI3LDAsNTMsMjIsMjAyLDAsNTYsMjMwLDEzMiwwLDEsODYsMTgzLDAsMTA5LDE5MCw0MiwwLDI0Myw2OCwxNzQsMSwxMDksMjI4LDE1NCwwLDIwMCwxNzcsMTIyLDEsMzUsMTYwLDE4MywyNTUsMTc3LDQ4LDg1LDI1NSw5MCwyMTgsMTY5LDI1NSwyNDgsMTUyLDc4LDAsMjAyLDI1NCwxMTAsMCw2LDUyLDQzLDAsMTQyLDk4LDY1LDI1NSw2MywxNDUsMjIsMCw3MCwxMDYsOTMsMCwyMzIsMTM4LDEwNywxLDExMCwxNzksNjEsMjU1LDIxMSwxMjksMjE4LDEsMjQyLDIwOSw5MiwwLDM1LDkwLDIxNywxLDE4MiwxNDMsMTA2LDI1NSwxMTYsMTAxLDIxNywyNTUsMTE0LDI1MCwyMjEsMjU1LDE3MywyMDQsNiwwLDYwLDE1MCwxNjMsMCw3MywxNzIsNDQsMjU1LDIzOSwxMTAsODAsMjU1LDIzNyw3NiwxNTMsMjU0LDE2MSwxNDAsMjQ5LDAsMTQ5LDIzMiwyMjksMCwxMzMsMzEsNDAsMjU1LDE3NCwxNjQsMTE5LDAsMTEzLDUxLDIxNCwwLDEyOSwyMjgsMiwyNTQsNjQsMzQsMjQzLDAsMTA3LDIyNywyNDQsMjU1LDE3NCwxMDYsMjAwLDI1NSw4NCwxNTMsNzAsMSw1MCwzNSwxNiwwLDI1MCw3NCwyMTYsMjU0LDIzNiwxODksNjYsMjU1LDE1MywyNDksMTMsMCwyMzAsMTc4LDQsMjU1LDIyMSw0MSwyMzgsMCwxMTgsMjI3LDEyMSwyNTUsOTQsODcsMTQwLDI1NCwyNTQsMTE5LDkyLDAsNzMsMjM5LDI0NiwyNTQsMTE3LDg3LDEyOCwwLDE5LDIxMSwxNDUsMjU1LDE3Nyw0NiwyNTIsMCwyMjksOTEsMjQ2LDEsNjksMTI4LDI0NywyNTUsMjAyLDc3LDU0LDEsOCwxMSw5LDI1NSwxNTMsOTYsMTY2LDAsMjE3LDIxNCwxNzMsMjU1LDEzNCwxOTIsMiwxLDAsMjA3LDAsMCwxODksMTc0LDEwNywxLDE0MCwxMzQsMTAwLDAsMTU4LDE5MywyNDMsMSwxODIsMTAyLDE3MSwwLDIzNSwxNTQsNTEsMCwxNDIsNSwxMjMsMjU1LDYwLDE2OCw4OSwxLDIxNywxNCw5MiwyNTUsMTksMjE0LDUsMSwyMTEsMTY3LDI1NCwwLDQ0LDYsMjAyLDI1NCwxMjAsMTgsMjM2LDI1NSwxNSwxMTMsMTg0LDI1NSwxODQsMjIzLDEzOSwwLDQwLDE3NywxMTksMjU0LDE4MiwxMjMsOTAsMjU1LDE3NiwxNjUsMTc2LDAsMjQ3LDc3LDE5NCwwLDI3LDIzNCwxMjAsMCwyMzEsMCwyMTQsMjU1LDU5LDM5LDMwLDAsMTI1LDk5LDE0NSwyNTUsMTUwLDY4LDY4LDEsMTQxLDIyMiwyNDgsMCwxNTMsMTIzLDIxMCwyNTUsMTEwLDEyNywxNTIsMjU1LDIyOSwzMywyMTQsMSwxMzUsMjIxLDE5NywwLDEzNyw5NywyLDAsMTIsMTQzLDIwNCwyNTUsODEsNDEsMTg4LDAsMTE1LDc5LDEzMCwyNTUsOTQsMywxMzIsMCwxNTIsMTc1LDE4NywyNTUsMTI0LDE0MSwxMCwyNTUsMTI2LDE5MiwxNzksMjU1LDExLDEwMywxOTgsMCwxNDksNiw0NSwwLDIxOSw4NSwxODcsMSwyMzAsMTgsMTc4LDI1NSw3MiwxODIsMTUyLDAsMywxOTgsMTg0LDI1NSwxMjgsMTEyLDIyNCwxLDk3LDE2MSwyMzAsMCwyNTQsOTksMzgsMjU1LDU4LDE1OSwxOTcsMCwxNTEsNjYsMjE5LDAsNTksNjksMTQzLDI1NSwxODUsMTEyLDI0OSwwLDExOSwxMzYsNDcsMjU1LDEyMywxMzAsMTMyLDAsMTY4LDcxLDk1LDI1NSwxMTMsMTc2LDQwLDEsMjMyLDE4NSwxNzMsMCwyMDcsOTMsMTE3LDEsNjgsMTU3LDEwOCwyNTUsMTAyLDUsMTQ3LDI1NCw0OSw5NywzMywwLDg5LDY1LDExMSwyNTQsMjQ3LDMwLDE2MywyNTUsMTI0LDIxNywyMjEsMSwxMDIsMjUwLDIxNiwwLDE5OCwxNzQsNzUsMjU0LDU3LDU1LDE4LDAsMjI3LDUsMjM2LDEsMjI5LDIxMywxNzMsMCwyMDEsMTA5LDIxOCwxLDQ5LDIzMywyMzksMCwzMCw1NSwxNTgsMSwyNSwxNzgsMTA2LDAsMTU1LDExMSwxODgsMSw5NCwxMjYsMTQwLDAsMjE1LDMxLDIzOCwxLDc3LDI0MCwxNiwwLDIxMywyNDIsMjUsMSwzOCw3MSwxNjgsMCwyMDUsMTg2LDkzLDI1NCw0OSwyMTEsMTQwLDI1NSwyMTksMCwxODAsMjU1LDEzNCwxMTgsMTY1LDAsMTYwLDE0NywxMzQsMjU1LDExMCwxODYsMzUsMjU1LDE5OCwyNDMsNDIsMCwyNDMsMTQ2LDExOSwwLDEzNCwyMzUsMTYzLDEsNCwyNDEsMTM1LDI1NSwxOTMsNDYsMTkzLDI1NCwxMDMsMTgwLDc5LDI1NSwyMjUsNCwxODQsMjU0LDI0MiwxMTgsMTMwLDAsMTQ2LDEzNSwxNzYsMSwyMzQsMTExLDMwLDAsNjksNjYsMjEzLDI1NCw0MSw5NiwxMjMsMCwxMjEsOTQsNDIsMjU1LDE3OCwxOTEsMTk1LDI1NSw0NiwxMzAsNDIsMCwxMTcsODQsOCwyNTUsMjMzLDQ5LDIxNCwyNTQsMjM4LDEyMiwxMDksMCw2LDcxLDg5LDEsMjM2LDIxMSwxMjMsMCwyNDQsMTMsNDgsMjU0LDExOSwxNDgsMTQsMCwxMTQsMjgsODYsMjU1LDc1LDIzNywyNSwyNTUsMTQ1LDIyOSwxNiwyNTQsMTI5LDEwMCw1MywyNTUsMTM0LDE1MCwxMjAsMjU0LDE2OCwxNTcsNTAsMCwyMyw3MiwxMDQsMjU1LDIyNCw0OSwxNCwwLDI1NSwxMjMsMjIsMjU1LDE1MSwxODUsMTUxLDI1NSwxNzAsODAsMTg0LDEsMTM0LDE4MiwyMCwwLDQxLDEwMCwxMDEsMSwxNTMsMzMsMTYsMCw3NiwxNTQsMTExLDEsODYsMjA2LDIzNCwyNTUsMTkyLDE2MCwxNjQsMjU0LDE2NSwxMjMsOTMsMjU1LDEsMjE2LDE2NCwyNTQsNjcsMTcsMTc1LDI1NSwxNjksMTEsNTksMjU1LDE1OCw0MSw2MSwyNTUsNzMsMTg4LDE0LDI1NSwxOTUsNiwxMzcsMjU1LDIyLDE0NywyOSwyNTUsMjAsMTAzLDMsMjU1LDI0NiwxMzAsMjI3LDI1NSwxMjIsNDAsMTI4LDAsMjI2LDQ3LDI0LDI1NCwzNSwzNiwzMiwwLDE1MiwxODYsMTgzLDI1NSw2OSwyMDIsMjAsMCwxOTUsMTMzLDE5NSwwLDIyMiw1MSwyNDcsMCwxNjksMTcxLDk0LDEsMTgzLDAsMTYwLDI1NSw2NCwyMDUsMTgsMSwxNTYsODMsMTUsMjU1LDE5Nyw1OCwyNDksMjU0LDI1MSw4OSwxMTAsMjU1LDUwLDEwLDg4LDI1NCw1MSw0MywyMTYsMCw5OCwyNDIsMTk4LDEsMjQ1LDE1MSwxMTMsMCwxNzEsMjM2LDE5NCwxLDE5NywzMSwxOTksMjU1LDIyOSw4MSwzOCwxLDQxLDU5LDIwLDAsMjUzLDEwNCwyMzAsMCwxNTIsOTMsMTQsMjU1LDI0NiwyNDIsMTQ2LDI1NCwyMTQsMTY5LDI0MCwyNTUsMjQwLDEwMiwxMDgsMjU0LDE2MCwxNjcsMjM2LDAsMTU0LDIxOCwxODgsMCwxNTAsMjMzLDIwMiwyNTUsMjcsMTksMjUwLDEsMiw3MSwxMzMsMjU1LDE3NSwxMiw2MywxLDE0NSwxODMsMTk4LDAsMTA0LDEyMCwxMTUsMjU1LDEzMCwyNTEsMjQ3LDAsMTcsMjEyLDE2NywyNTUsNjIsMTIzLDEzMiwyNTUsMjQ3LDEwMCwxODksMCwxNTUsMjIzLDE1MiwwLDE0MywxOTcsMzMsMCwxNTUsNTksNDQsMjU1LDE1MCw5MywyNDAsMSwxMjcsMyw4NywyNTUsOTUsNzEsMjA3LDEsMTY3LDg1LDEsMjU1LDE4OCwxNTIsMTE2LDI1NSwxMCwyMywyMywwLDEzNywxOTUsOTMsMSw1NCw5OCw5NywwLDI0MCwwLDE2OCwyNTUsMTQ4LDE4OCwxMjcsMCwxMzQsMTA3LDE1MSwwLDc2LDI1MywxNzEsMCw5MCwxMzIsMTkyLDAsMTQ2LDIyLDU0LDAsMjI0LDY2LDU0LDI1NCwyMzAsMTg2LDIyOSwyNTUsMzksMTgyLDE5NiwwLDE0OCwyNTEsMTMwLDI1NSw2NSwxMzEsMTA4LDI1NCwxMjgsMSwxNjAsMCwxNjksNDksMTY3LDI1NCwxOTksMjU0LDE0OCwyNTUsMjUxLDYsMTMxLDAsMTg3LDI1NCwxMjksMjU1LDg1LDgyLDYyLDAsMTc4LDIzLDU4LDI1NSwyNTQsMTMyLDUsMCwxNjQsMjEzLDM5LDAsMTM0LDI1MiwxNDYsMjU0LDM3LDUzLDgxLDI1NSwxNTUsMTM0LDgyLDAsMjA1LDE2NywyMzgsMjU1LDk0LDQ1LDE4MCwyNTUsMTMyLDQwLDE2MSwwLDI1NCwxMTEsMTEyLDEsNTQsNzUsMjE3LDAsMTc5LDIzMCwyMjEsMSwyMzUsOTQsMTkxLDI1NSwyMywyNDMsNDgsMSwyMDIsMTQ1LDIwMywyNTUsMzksMTE4LDQyLDI1NSwxMTcsMTQxLDI1MywwLDI1NCwwLDIyMiwwLDQzLDI1MSw1MCwwLDU0LDE2OSwyMzQsMSw4MCw2OCwyMDgsMCwxNDgsMjAzLDI0MywyNTQsMTQ1LDcsMTM1LDAsNiwyNTQsMCwwLDI1MiwxODUsMTI3LDAsOTgsOCwxMjksMjU1LDM4LDM1LDcyLDI1NSwyMTEsMzYsMjIwLDEsNDAsMjYsODksMCwxNjgsNjQsMTk3LDI1NCwzLDIyMiwyMzksMjU1LDIsODMsMjE1LDI1NCwxODAsMTU5LDEwNSwwLDU4LDExNSwxOTQsMCwxODYsMTE2LDEwNiwyNTUsMjI5LDI0NywyMTksMjU1LDEyOSwxMTgsMTkzLDAsMjAyLDE3NCwxODMsMSwxNjYsMTYxLDcyLDAsMjAxLDEwNywxNDcsMjU0LDIzNywxMzYsNzQsMCwyMzMsMjMwLDEwNiwxLDEwNSwxMTEsMTY4LDAsNjQsMjI0LDMwLDEsMSwyMjksMywwLDEwMiwxNTEsMTc1LDI1NSwxOTQsMjM4LDIyOCwyNTUsMjU0LDI1MCwyMTIsMCwxODcsMjM3LDEyMSwwLDY3LDI1MSw5NiwxLDE5NywzMCwxMSwwLDE4Myw5NSwyMDQsMCwyMDUsODksMTM4LDAsNjQsMjIxLDM3LDEsMjU1LDIyMywzMCwyNTUsMTc4LDQ4LDIxMSwyNTUsMjQxLDIwMCw5MCwyNTUsMTY3LDIwOSw5NiwyNTUsNTcsMTMwLDIyMSwwLDQ2LDExNCwyMDAsMjU1LDYxLDE4NCw2NiwwLDU1LDE4MiwyNCwyNTQsMTEwLDE4MiwzMywwLDE3MSwxOTAsMjMyLDI1NSwxMTQsOTQsMzEsMCwxOCwyMjEsOCwwLDQ3LDIzMSwyNTQsMCwyNTUsMTEyLDgzLDAsMTE4LDE1LDIxNSwyNTUsMTczLDI1LDQwLDI1NCwxOTIsMTkzLDMxLDI1NSwyMzgsMjEsMTQ2LDI1NSwxNzEsMTkzLDExOCwyNTUsMTAxLDIzNCw1MywyNTQsMTMxLDIxMiwxMTIsMCw4OSwxOTIsMTA3LDEsOCwyMDgsMjcsMCwxODEsMjE3LDE1LDI1NSwyMzEsMTQ5LDIzMiwwLDE0MCwyMzYsMTI2LDAsMTQ0LDksMTk5LDI1NSwxMiw3OSwxODEsMjU0LDE0NywxODIsMjAyLDI1NSwxOSwxMDksMTgyLDI1NSw0OSwyMTIsMjI1LDAsNzQsMTYzLDIwMywwLDE3NSwyMzMsMTQ4LDAsMjYsMTEyLDUxLDAsMTkzLDE5Myw5LDI1NSwxNSwxMzUsMjQ5LDAsMTUwLDIyNywxMzAsMCwyMDQsMCwyMTksMSwyNCwyNDIsMjA1LDAsMjM4LDIwOCwxMTcsMjU1LDIyLDI0NCwxMTIsMCwyNiwyMjksMzQsMCwzNyw4MCwxODgsMjU1LDM4LDQ1LDIwNiwyNTQsMjQwLDkwLDIyNSwyNTUsMjksMyw0NywyNTUsNDIsMjI0LDc2LDAsMTg2LDI0MywxNjcsMCwzMiwxMzIsMTUsMjU1LDUsNTEsMTI1LDAsMTM5LDEzNSwyNCwwLDYsMjQxLDIxOSwwLDE3MiwyMjksMTMzLDI1NSwyNDYsMjE0LDUwLDAsMjMxLDExLDIwNywyNTUsMTkxLDEyNiw4MywxLDE4MCwxNjMsMTcwLDI1NSwyNDUsNTYsMjQsMSwxNzgsMTY0LDIxMSwyNTUsMywxNiwyMDIsMSw5OCw1NywxMTgsMjU1LDE0MSwxMzEsODksMjU0LDMzLDUxLDI0LDAsMjQzLDE0OSw5MSwyNTUsMjUzLDUyLDE0LDAsMzUsMTY5LDY3LDI1NCw0OSwzMCw4OCwyNTUsMTc5LDI3LDM2LDI1NSwxNjUsMTQwLDE4MywwLDU4LDE4OSwxNTEsMCw4OCwzMSwwLDAsNzUsMTY5LDY2LDAsNjYsMTAxLDE5OSwyNTUsMjQsMjE2LDE5OSwxLDEyMSwxOTYsMjYsMjU1LDE0LDc5LDIwMywyNTQsMjQwLDIyNiw4MSwyNTUsOTQsMjgsMTAsMjU1LDgzLDE5MywyNDAsMjU1LDIwNCwxOTMsMTMxLDI1NSw5NCwxNSw4NiwwLDIxOCw0MCwxNTcsMCw1MSwxOTMsMjA5LDAsMCwyNDIsMTc3LDAsMTAyLDE4NSwyNDcsMCwxNTgsMTA5LDExNiwwLDM4LDEzNSw5MSwwLDIyMywxNzUsMTQ5LDAsMjIwLDY2LDEsMjU1LDg2LDYwLDIzMiwwLDI1LDk2LDM3LDI1NSwyMjUsMTIyLDE2MiwxLDIxNSwxODcsMTY4LDI1NSwxNTgsMTU3LDQ2LDAsNTYsMTcxLDE2MiwwLDIzMiwyNDAsMTAxLDEsMTIyLDIyLDksMCw1MSw5LDIxLDI1NSw1MywyNSwyMzgsMjU1LDIxNywzMCwyMzIsMjU0LDEyNSwxNjksMTQ4LDAsMTMsMjMyLDEwMiwwLDE0OCw5LDM3LDAsMTY1LDk3LDE0MSwxLDIyOCwxMzEsNDEsMCwyMjIsMTUsMjQzLDI1NSwyNTQsMTgsMTcsMCw2LDYwLDIzNywxLDEwNiwzLDExMywwLDU5LDEzMiwxODksMCw5MiwxMTIsMzAsMCwxMDUsMjA4LDIxMywwLDQ4LDg0LDE3OSwyNTUsMTg3LDEyMSwyMzEsMjU0LDI3LDIxNiwxMDksMjU1LDE2MiwyMjEsMTA3LDI1NCw3MywyMzksMTk1LDI1NSwyNTAsMzEsNTcsMjU1LDE0OSwxMzUsODksMjU1LDE4NSwyMywxMTUsMSwzLDE2MywxNTcsMjU1LDE4LDExMiwyNTAsMCwyNSw1NywxODcsMjU1LDE2MSw5NiwxNjQsMCw0NywxNiwyNDMsMCwxMiwxNDEsMjUxLDI1NCw2NywyMzQsMTg0LDI1NSw0MSwxOCwxNjEsMCwxNzUsNiw5NiwyNTUsMTYwLDE3Miw1MiwyNTQsMjQsMTc2LDE4MywyNTUsMTk4LDE5Myw4NSwxLDEyNCwxMjEsMTM3LDI1NSwxNTEsNTAsMTE0LDI1NSwyMjAsMjAzLDYwLDI1NSwyMDcsMjM5LDUsMSwwLDM4LDEwNywyNTUsNTUsMjM4LDk0LDI1NCw3MCwxNTIsOTQsMCwyMTMsMjIwLDc3LDEsMTIwLDE3LDY5LDI1NSw4NSwxNjQsMTkwLDI1NSwyMDMsMjM0LDgxLDAsMzgsNDksMzcsMjU0LDYxLDE0NCwxMjQsMCwxMzcsNzgsNDksMjU0LDE2OCwyNDcsNDgsMCw5NSwxNjQsMjUyLDAsMTA1LDE2OSwxMzUsMCwyNTMsMjI4LDEzNCwwLDY0LDE2Niw3NSwwLDgxLDczLDIwLDI1NSwyMDcsMjEwLDEwLDAsMjM0LDEwNiwxNTAsMjU1LDk0LDM0LDkwLDI1NSwyNTQsMTU5LDU3LDI1NCwyMjAsMTMzLDk5LDAsMTM5LDE0NywxODAsMjU0LDI0LDIzLDE4NSwwLDQxLDU3LDMwLDI1NSwxODksOTcsNzYsMCw2NSwxODcsMjIzLDI1NSwyMjQsMTcyLDM3LDI1NSwzNCw2Miw5NSwxLDIzMSwxNDQsMjQwLDAsNzcsMTA2LDEyNiwyNTQsNjQsMTUyLDkxLDAsMjksOTgsMTU1LDAsMjI2LDI1MSw1MywyNTUsMjM0LDIxMSw1LDI1NSwxNDQsMjAzLDIyMiwyNTUsMTY0LDE3NiwyMjEsMjU0LDUsMjMxLDI0LDAsMTc5LDEyMiwyMDUsMCwzNiwxLDEzNCwyNTUsMTI1LDcwLDE1MSwyNTQsOTcsMjI4LDI1MiwwLDE3MiwxMjksMjMsMjU0LDQ4LDkwLDIwOSwyNTUsMTUwLDIyNCw4MiwxLDg0LDEzNCwzMCwwLDI0MSwxOTYsNDYsMCwxMDMsMTEzLDIzNCwyNTUsNDYsMTAxLDEyMSwyNTQsNDAsMTI0LDI1MCwyNTUsMTM1LDQ1LDI0MiwyNTQsOSwyNDksMTY4LDI1NSwxNDAsMTA4LDEzMSwyNTUsMTQzLDE2MywxNzEsMCw1MCwxNzMsMTk5LDI1NSw4OCwyMjIsMTQyLDI1NSwyMDAsOTUsMTU4LDAsMTQyLDE5MiwxNjMsMjU1LDcsMTE3LDEzNSwwLDExMSwxMjQsMjIsMCwyMzYsMTIsNjUsMjU0LDY4LDM4LDY1LDI1NSwyMjcsMTc0LDI1NCwwLDI0NCwyNDUsMzgsMCwyNDAsNTAsMjA4LDI1NSwxNjEsNjMsMjUwLDAsNjAsMjA5LDIzOSwwLDEyMiwzNSwxOSwwLDE0LDMzLDIzMCwyNTQsMiwxNTksMTEzLDAsMTA2LDIwLDEyNywyNTUsMjI4LDIwNSw5NiwwLDEzNywyMTAsMTc0LDI1NCwxODAsMjEyLDE0NCwyNTUsODksOTgsMTU0LDEsMzQsODgsMTM5LDAsMTY3LDE2MiwxMTIsMSw2NSwxMTAsMTk3LDAsMjQxLDM3LDE2OSwwLDY2LDU2LDEzMSwyNTUsMTAsMjAxLDgzLDI1NCwxMzMsMjUzLDE4NywyNTUsMTc3LDExMiw0NSwyNTQsMTk2LDI1MSwwLDAsMTk2LDI1MCwxNTEsMjU1LDIzOCwyMzIsMjE0LDI1NSwxNTAsMjA5LDIwNSwwLDI4LDI0MCwxMTgsMCw3MSw3Niw4MywxLDIzNiw5OSw5MSwwLDQyLDI1MCwxMzEsMSw5NiwxOCw2NCwyNTUsMTE4LDIyMiwzNSwwLDExMywyMTQsMjAzLDI1NSwxMjIsMTE5LDE4NCwyNTUsNjYsMTksMzYsMCwyMDQsNjQsMjQ5LDAsMTQ2LDg5LDEzOSwwLDEzNCw2MiwxMzUsMSwxMDQsMjMzLDEwMSwwLDE4OCw4NCwyNiwwLDQ5LDI0OSwxMjksMCwyMDgsMjE0LDc1LDI1NSwyMDcsMTMwLDc3LDI1NSwxMTUsMTc1LDIzNSwwLDE3MSwyLDEzNywyNTUsMTc1LDE0NSwxODYsMSw1NSwyNDUsMTM1LDI1NSwxNTQsODYsMTgxLDEsMTAwLDU4LDI0NiwyNTUsMTA5LDE5OSw2MCwyNTUsODIsMjA0LDEzNCwyNTUsMjE1LDQ5LDIzMCwxLDE0MCwyMjksMTkyLDI1NSwyMjIsMTkzLDI1MSwyNTUsODEsMTM2LDE1LDI1NSwxNzksMTQ5LDE2MiwyNTUsMjMsMzksMjksMjU1LDcsOTUsNzUsMjU0LDE5MSw4MSwyMjIsMCwyNDEsODEsOTAsMjU1LDEwNyw0OSwyMDEsMjU1LDI0NCwyMTEsMTU3LDAsMjIyLDE0MCwxNDksMjU1LDY1LDIxOSw1NiwyNTQsMTg5LDI0Niw5MCwyNTUsMTc4LDU5LDE1NywxLDQ4LDIxOSw1MiwwLDk4LDM0LDIxNSwwLDI4LDE3LDE4NywyNTUsMTc1LDE2OSwyNCwwLDkyLDc5LDE2MSwyNTUsMjM2LDIwMCwxOTQsMSwxNDcsMTQzLDIzNCwwLDIyOSwyMjUsNywxLDE5NywxNjgsMTQsMCwyMzUsNTEsNTMsMSwyNTMsMTIwLDE3NCwwLDE5Nyw2LDE2OCwyNTUsMjAyLDExNywxNzEsMCwxNjMsMjEsMjA2LDAsMTE0LDg1LDkwLDI1NSwxNSw0MSwxMCwyNTUsMTk0LDE5LDk5LDAsNjUsNTUsMjE2LDI1NCwxNjIsMTQ2LDExNiwwLDUwLDIwNiwyMTIsMjU1LDY0LDE0NiwyOSwyNTUsMTU4LDE1OCwxMzEsMSwxMDAsMTY1LDEzMCwyNTUsMTcyLDIzLDEyOSwyNTUsMTI1LDUzLDksMjU1LDE1LDE5MywxOCwxLDI2LDQ5LDExLDI1NSwxODEsMTc0LDIwMSwxLDEzNSwyMDEsMTQsMjU1LDEwMCwxOSwxNDksMCwyMTksOTgsNzksMCw0Miw5OSwxNDMsMjU0LDk2LDAsNDgsMjU1LDE5NywyNDksODMsMjU0LDEwNCwxNDksNzksMjU1LDIzNSwxMTAsMTM2LDI1NCw4MiwxMjgsNDQsMjU1LDY1LDQxLDM2LDI1NCw4OCwyMTEsMTAsMCwxODcsMTIxLDE4NywwLDk4LDEzNCwxOTksMCwxNzEsMTg4LDE3OSwyNTQsMjEwLDExLDIzOCwyNTUsNjYsMTIzLDEzMCwyNTQsNTIsMjM0LDYxLDAsNDgsMTEzLDIzLDI1NCw2LDg2LDEyMCwyNTUsMTE5LDE3OCwyNDUsMCw4NywxMjksMjAxLDAsMjQyLDE0MSwyMDksMCwyMDIsMTE0LDg1LDAsMTQ4LDIyLDE2MSwwLDEwMywxOTUsNDgsMCwyNSw0OSwxNzEsMjU1LDEzOCw2NywxMzAsMCwxODIsNzMsMTIyLDI1NCwxNDgsMjQsMTMwLDAsMjExLDIyOSwxNTQsMCwzMiwxNTUsMTU4LDAsODQsMTA1LDYxLDAsMTc3LDE5NCw5LDI1NSwxNjYsODksODYsMSw1NCw4MywxODcsMCwyNDksNDAsMTE3LDI1NSwxMDksMywyMTUsMjU1LDUzLDE0Niw0NCwxLDYzLDQ3LDE3OSwwLDE5NCwyMTYsMywyNTQsMTQsODQsMTM2LDAsMTM2LDE3NywxMywyNTUsNzIsMjQzLDE4NiwyNTUsMTE3LDE3LDEyNSwyNTUsMjExLDU4LDIxMSwyNTUsOTMsNzksMjIzLDAsOTAsODgsMjQ1LDI1NSwxMzksMjA5LDExMSwyNTUsNzAsMjIyLDQ3LDAsMTAsMjQ2LDc5LDI1NSwxOTgsMjE3LDE3OCwwLDIyNywyMjUsMTEsMSw3OCwxMjYsMTc5LDI1NSw2Miw0MywxMjYsMCwxMDMsMTQ4LDM1LDAsMTI5LDgsMTY1LDI1NCwyNDUsMjQwLDE0OCwwLDYxLDUxLDE0MiwwLDgxLDIwOCwxMzQsMCwxNSwxMzcsMTE1LDI1NSwyMTEsMTE5LDIzNiwyNTUsMTU5LDI0NSwyNDgsMjU1LDIsMTM0LDEzNiwyNTUsMjMwLDEzOSw1OCwxLDE2MCwxNjQsMjU0LDAsMTE0LDg1LDE0MSwyNTUsNDksMTY2LDE4MiwyNTUsMTQ0LDcwLDg0LDEsODUsMTgyLDcsMCw0Niw1Myw5MywwLDksMTY2LDE2MSwyNTUsNTUsMTYyLDE3OCwyNTUsNDUsMTg0LDE4OCwwLDE0NiwyOCw0NCwyNTQsMTY5LDkwLDQ5LDAsMTIwLDE3OCwyNDEsMSwxNCwxMjMsMTI3LDI1NSw3LDI0MSwxOTksMSwxODksNjYsNTAsMjU1LDE5OCwxNDMsMTAxLDI1NCwxODksMjQzLDEzNSwyNTUsMTQxLDI0LDI0LDI1NCw3NSw5Nyw4NywwLDExOCwyNTEsMTU0LDEsMjM3LDU0LDE1NiwwLDE3MSwxNDYsMjA3LDI1NSwxMzEsMTk2LDI0NiwyNTUsMTM2LDY0LDExMywxLDE1MSwyMzIsNTcsMCwyNDAsMjE4LDExNSwwLDQ5LDYxLDI3LDI1NSw2NCwxMjksNzMsMSwyNTIsMTY5LDI3LDI1NSw0MCwxMzIsMTAsMSw5MCwyMDEsMTkzLDI1NSwyNTIsMTIxLDI0MCwxLDE4NiwyMDYsNDEsMCw0MywxOTgsOTcsMCwxNDUsMTAwLDE4MywwLDIwNCwyMTYsODAsMjU0LDE3MiwxNTAsNjUsMCwyNDksMjI5LDE5NiwyNTQsMTA0LDEyMyw3MywyNTUsNzcsMTA0LDk2LDI1NCwxMzAsMTgwLDgsMCwxMDQsMTIzLDU3LDAsMjIwLDIwMiwyMjksMjU1LDEwMiwyNDksMjExLDAsODYsMTQsMjMyLDI1NSwxODIsNzgsMjA5LDAsMjM5LDIyNSwxNjQsMCwxMDYsMTMsMzIsMjU1LDEyMCw3MywxNywyNTUsMTM0LDY3LDIzMywwLDgzLDI1NCwxODEsMCwxODMsMjM2LDExMiwxLDQ4LDY0LDEzMSwyNTUsMjQxLDIxNiwyNDMsMjU1LDY1LDE5MywyMjYsMCwyMDYsMjQxLDEwMCwyNTQsMTAwLDEzNCwxNjYsMjU1LDIzNywyMDIsMTk3LDAsNTUsMTMsODEsMCwzMiwxMjQsMTAyLDI1NSw0MCwyMjgsMTc3LDAsMTE4LDE4MSwzMSwxLDIzMSwxNjAsMTM0LDI1NSwxMTksMTg3LDIwMiwwLDAsMTQyLDYwLDI1NSwxMjgsMzgsMTg5LDI1NSwxNjYsMjAxLDE1MCwwLDIwNywxMjAsMjYsMSw1NCwxODQsMTcyLDAsMTIsMjQyLDIwNCwyNTQsMTMzLDY2LDIzMCwwLDM0LDM4LDMxLDEsMTg0LDExMiw4MCwwLDMyLDUxLDE2NSwyNTQsMTkxLDI0Myw1NSwwLDU4LDczLDE0NiwyNTQsMTU1LDE2NywyMDUsMjU1LDEwMCwxMDQsMTUyLDI1NSwxOTcsMjU0LDIwNywyNTUsMTczLDE5LDI0NywwLDIzOCwxMCwyMDIsMCwyMzksMTUxLDI0MiwwLDk0LDU5LDM5LDI1NSwyNDAsMjksMTAyLDI1NSwxMCw5MiwxNTQsMjU1LDIyOSw4NCwyMTksMjU1LDE2MSwxMjksODAsMCwyMDgsOTAsMjA0LDEsMjQwLDIxOSwxNzQsMjU1LDE1OCwxMDIsMTQ1LDEsNTMsMTc4LDc2LDI1NSw1MiwxMDgsMTY4LDEsODMsMjIyLDEwNywwLDIxMSwzNiwxMDksMCwxMTgsNTgsNTYsMCw4LDI5LDIyLDAsMjM3LDE2MCwxOTksMCwxNzAsMjA5LDE1NywwLDEzNyw3MSw0NywwLDE0Myw4NiwzMiwwLDE5OCwyNDIsMiwwLDIxMiw0OCwxMzYsMSw5MiwxNzIsMTg2LDAsMjMwLDE1MSwxMDUsMSw5NiwxOTEsMjI5LDAsMTM4LDgwLDE5MSwyNTQsMjQwLDIxNiwxMzAsMjU1LDk4LDQzLDYsMjU0LDE2OCwxOTYsNDksMCwyNTMsMTgsOTEsMSwxNDQsNzMsMTIxLDAsNjEsMTQ2LDM5LDEsNjMsMTA0LDI0LDI1NSwxODQsMTY1LDExMiwyNTQsMTI2LDIzNSw5OCwwLDgwLDIxMyw5OCwyNTUsMTIzLDYwLDg3LDI1NSw4MiwxNDAsMjQ1LDEsMjIzLDEyMCwxNzMsMjU1LDE1LDE5OCwxMzQsMSwyMDYsNjAsMjM5LDAsMjMxLDIzNCw5MiwyNTUsMzMsMjM4LDE5LDI1NSwxNjUsMTEzLDE0MiwxLDE3NiwxMTksMzgsMCwxNjAsNDMsMTY2LDI1NCwyMzksOTEsMTA1LDAsMTA3LDYxLDE5NCwxLDI1LDQsNjgsMCwxNSwxMzksNTEsMCwxNjQsMTMyLDEwNiwyNTUsMzQsMTE2LDQ2LDI1NCwxNjgsOTUsMTk3LDAsMTM3LDIxMiwyMywwLDcyLDE1Niw1OCwwLDEzNywxMTIsNjksMjU0LDE1MCwxMDUsMTU0LDI1NSwyMzYsMjAxLDE1NywwLDIzLDIxMiwxNTQsMjU1LDEzNiw4MiwyMjcsMjU0LDIyNiw1OSwyMjEsMjU1LDk1LDE0OSwxOTIsMCw4MSwxMTgsNTIsMjU1LDMzLDQzLDIxNSwxLDE0LDE0Nyw3NSwyNTUsODksMTU2LDEyMSwyNTQsMTQsMTgsNzksMCwxNDcsMjA4LDEzOSwxLDE1MSwyMTgsNjIsMjU1LDE1Niw4OCw4LDEsMjEwLDE4NCw5OCwyNTUsMjAsMTc1LDEyMywyNTUsMTAyLDgzLDIyOSwwLDIyMCw2NSwxMTYsMSwxNTAsMjUwLDQsMjU1LDkyLDE0MiwyMjAsMjU1LDM0LDI0Nyw2NiwyNTUsMjA0LDIyNSwxNzksMjU0LDE1MSw4MSwxNTEsMCw3MSw0MCwyMzYsMjU1LDEzOCw2Myw2MiwwLDYsNzksMjQwLDI1NSwxODMsMTg1LDE4MSwwLDExOCw1MCwyNywwLDYzLDIyNywxOTIsMCwxMjMsOTksNTgsMSw1MCwyMjQsMTU1LDI1NSwxNywyMjUsMjIzLDI1NCwyMjAsMjI0LDc3LDI1NSwxNCw0NCwxMjMsMSwxNDEsMTI4LDE3NSwwLDI0OCwyMTIsMjAwLDAsMTUwLDU5LDE4MywyNTUsMTQ3LDk3LDI5LDAsMTUwLDIwNCwxODEsMCwyNTMsMzcsNzEsMCwxNDUsODUsMTE5LDAsMTU0LDIwMCwxODYsMCwyLDEyOCwyNDksMjU1LDgzLDI0LDEyNCwwLDE0LDg3LDE0MywwLDE2OCw1MSwyNDUsMSwxMjQsMTUxLDIzMSwyNTUsMjA4LDI0MCwxOTcsMSwxMjQsMTkwLDE4NSwwLDQ4LDU4LDI0NiwwLDIwLDIzMywyMzIsMCwxMjUsMTgsOTgsMjU1LDEzLDI1NCwzMSwyNTUsMjQ1LDE3NywxMzAsMjU1LDEwOCwxNDIsMzUsMCwxNzEsMTI1LDI0MiwyNTQsMTQwLDEyLDM0LDI1NSwxNjUsMTYxLDE2MiwwLDIwNiwyMDUsMTAxLDAsMjQ3LDI1LDM0LDEsMTAwLDE0NSw1NywwLDM5LDcwLDU3LDAsMTE4LDIwNCwyMDMsMjU1LDI0MiwwLDE2MiwwLDE2NSwyNDQsMzAsMCwxOTgsMTE2LDIyNiwwLDEyOCwxMTEsMTUzLDI1NSwxNDAsNTQsMTgyLDEsNjAsMTIyLDE1LDI1NSwxNTUsNTgsNTcsMSw1NCw1MCwxOTgsMCwxNzEsMjExLDI5LDI1NSwxMDcsMTM4LDE2NywyNTUsMTczLDEwNywxOTksMjU1LDEwOSwxNjEsMTkzLDAsODksNzIsMjQyLDI1NSwyMDYsMTE1LDg5LDI1NSwyNTAsMjU0LDE0MiwyNTQsMTc3LDIwMiw5NCwyNTUsODEsODksNTAsMCw3LDEwNSw2NiwyNTUsMjUsMjU0LDI1NSwyNTQsMjAzLDY0LDIzLDI1NSw3OSwyMjIsMTA4LDI1NSwzOSwyNDksNzUsMCwyNDEsMTI0LDUwLDAsMjM5LDE1MiwxMzMsMCwyMjEsMjQxLDEwNSwwLDE0NywxNTEsOTgsMCwyMTMsMTYxLDEyMSwyNTQsMjQyLDQ5LDEzNywwLDIzMywzNywyNDksMjU0LDQyLDE4MywyNywwLDE4NCwxMTksMjMwLDI1NSwyMTcsMzIsMTYzLDI1NSwyMDgsMjUxLDIyOCwxLDEzNyw2MiwxMzEsMjU1LDc5LDY0LDksMjU0LDk0LDQ4LDExMywwLDE3LDEzOCw1MCwyNTQsMTkzLDI1NSwyMiwwLDI0NywxOCwxOTcsMSw2Nyw1NSwxMDQsMCwxNiwyMDUsOTUsMjU1LDQ4LDM3LDY2LDAsNTUsMTU2LDYzLDEsNjQsODIsNzQsMjU1LDIwMCw1Myw3MSwyNTQsMjM5LDY3LDEyNSwwLDI2LDIyNCwyMjIsMCwyMjMsMTM3LDkzLDI1NSwzMCwyMjQsMjAyLDI1NSw5LDIyMCwxMzIsMCwxOTgsMzgsMjM1LDEsMTAyLDE0MSw4NiwwLDYwLDQzLDgxLDEsMTM2LDI4LDI2LDAsMjMzLDM2LDgsMjU0LDIwNywyNDIsMTQ4LDAsMTY0LDE2Miw2MywwLDUxLDQ2LDIyNCwyNTUsMTE0LDQ4LDc5LDI1NSw5LDE3NSwyMjYsMCwyMjIsMywxOTMsMjU1LDQ3LDE2MCwyMzIsMjU1LDI1NSw5MywxMDUsMjU0LDE0LDQyLDIzMCwwLDI2LDEzOCw4MiwxLDIwOCw0MywyNDQsMCwyNywzOSwzOCwyNTUsOTgsMjA4LDEyNywyNTUsNjQsMTQ5LDE4MiwyNTUsNSwyNTAsMjA5LDAsMTg3LDYwLDI4LDI1NCw0OSwyNSwyMTgsMjU1LDE2OSwxMTYsMjA1LDI1NSwxMTksMTgsMTIwLDAsMTU2LDExNiwxNDcsMjU1LDEzMiw1MywxMDksMjU1LDEzLDEwLDIwMiwwLDExMCw4MywxNjcsMCwxNTcsMjE5LDEzNywyNTUsNiwzLDEzMCwyNTUsNTAsMTY3LDMwLDI1NSw2MCwxNTksNDcsMjU1LDEyOSwxMjgsMTU3LDI1NCw5NCwzLDE4OSwwLDMsMTY2LDY4LDAsODMsMjIzLDIxNSwwLDE1MCw5MCwxOTQsMSwxNSwxNjgsNjUsMCwyMjcsODMsNTEsMjU1LDIwNSwxNzEsNjYsMjU1LDU0LDE4Nyw2MCwxLDE1MiwxMDIsNDUsMjU1LDExOSwxNTQsMjI1LDAsMjQwLDI0NywxMzYsMCwxMDAsMTk3LDE3OCwyNTUsMTM5LDcxLDIyMywyNTUsMjA0LDgyLDE2LDEsNDEsMjA2LDQyLDI1NSwxNTYsMTkyLDIyMSwyNTUsMjE2LDEyMywyNDQsMjU1LDIxOCwyMTgsMTg1LDI1NSwxODcsMTg2LDIzOSwyNTUsMjUyLDE3MiwxNjAsMjU1LDE5NSw1MiwyMiwwLDE0NCwxNzQsMTgxLDI1NCwxODcsMTAwLDExNSwyNTUsMjExLDc4LDE3NiwyNTUsMjcsNywxOTMsMCwxNDcsMjEzLDEwNCwyNTUsOTAsMjAxLDEwLDI1NSw4MCwxMjMsNjYsMSwyMiwzMywxODYsMCwxLDcsOTksMjU0LDMwLDIwNiwxMCwwLDIyOSwyMzQsNSwwLDUzLDMwLDIxMCwwLDEzOCw4LDIyMCwyNTQsNzEsNTUsMTY3LDAsNzIsMjI1LDg2LDEsMTE4LDE5MCwxODgsMCwyNTQsMTkzLDEwMSwxLDE3MSwyNDksMTcyLDI1NSw5NCwxNTgsMTgzLDI1NCw5MywyLDEwOCwyNTUsMTc2LDkzLDc2LDI1NSw3Myw5OSw3OSwyNTUsNzQsNjQsMTI5LDI1NCwyNDYsNDYsNjUsMCw5OSwyNDEsMTI3LDI1NCwyNDYsMTUxLDEwMiwyNTUsNDQsNTMsMjA4LDI1NCw1OSwxMDIsMjM0LDAsMTU0LDE3NSwxNjQsMjU1LDg4LDI0MiwzMiwwLDExMSwzOCwxLDAsMjU1LDE4MiwxOTAsMjU1LDExNSwxNzYsMTUsMjU0LDE2OSw2MCwxMjksMCwxMjIsMjM3LDI0MSwwLDkwLDc2LDYzLDAsNjIsNzQsMTIwLDI1NSwxMjIsMTk1LDExMCwwLDExOSw0LDE3OCwwLDIyMiwyNDIsMjEwLDAsMTMwLDMzLDQ2LDI1NCwxNTYsNDAsNDEsMCwxNjcsMTQ2LDExMiwxLDQ5LDE2MywxMTEsMjU1LDEyMSwxNzYsMjM1LDAsNzYsMjA3LDE0LDI1NSwzLDI1LDE5OCwxLDQxLDIzNSwyMTMsMCw4NSwzNiwyMTQsMSw0OSw5MiwxMDksMjU1LDIwMCwyNCwzMCwyNTQsMTY4LDIzNiwxOTUsMCwxNDUsMzksMTI0LDEsMjM2LDE5NSwxNDksMCw5MCwzNiwxODQsMjU1LDY3LDg1LDE3MCwyNTUsMzgsMzUsMjYsMjU0LDEzMSwxMjQsNjgsMjU1LDIzOSwxNTUsMzUsMjU1LDU0LDIwMSwxNjQsMCwxOTYsMjIsMTE3LDI1NSw0OSwxNSwyMDUsMCwyNCwyMjQsMjksMSwxMjYsMTEzLDE0NCwwLDExNywyMSwxODIsMCwyMDMsMTU5LDE0MSwwLDIyMywxMzUsNzcsMCwxNzYsMjMwLDE3NiwyNTUsMTkwLDIyOSwyMTUsMjU1LDk5LDM3LDE4MSwyNTUsNTEsMjEsMTM4LDI1NSwyNSwxODksODksMjU1LDQ5LDQ4LDE2NSwyNTQsMTUyLDQ1LDI0NywwLDE3MCwxMDgsMjIyLDAsODAsMjAyLDUsMCwyNyw2OSwxMDMsMjU0LDIwNCwyMiwxMjksMjU1LDE4MCwyNTIsNjIsMjU0LDIxMCwxLDkxLDI1NSwxNDYsMTEwLDI1NCwyNTUsMjE5LDE2MiwyOCwwLDIyMywyNTIsMjEzLDEsNTksOCwzMywwLDIwNiwxNiwyNDQsMCwxMjksMjExLDQ4LDAsMTA3LDE2MCwyMDgsMCwxMTIsNTksMjA5LDAsMTA5LDc3LDIxNiwyNTQsMzQsMjEsMTg1LDI1NSwyNDYsOTksNTYsMjU1LDE3OSwxMzksMTksMjU1LDE4NSwyOSw1MCwyNTUsODQsODksMTksMCw3NCwyNTAsOTgsMjU1LDIyNSw0MiwyMDAsMjU1LDE5MiwyMTcsMjA1LDI1NSwyMTAsMTYsMTY3LDAsOTksMTMyLDk1LDEsNDMsMjMwLDU3LDAsMjU0LDExLDIwMywyNTUsOTksMTg4LDYzLDI1NSwxMTksMTkzLDI1MSwyNTQsODAsMTA1LDU0LDAsMjMyLDE4MSwxODksMSwxODMsNjksMTEyLDI1NSwyMDgsMTcxLDE2NSwyNTUsNDcsMTA5LDE4MCwyNTUsMTIzLDgzLDE2NSwwLDE0NiwxNjIsNTIsMjU1LDE1NCwxMSw0LDI1NSwxNTEsMjI3LDkwLDI1NSwxNDYsMTM3LDk3LDI1NCw2MSwyMzMsNDEsMjU1LDk0LDQyLDU1LDI1NSwxMDgsMTY0LDIzNiwwLDE1Miw2OCwyNTQsMCwxMCwxNDAsMTMxLDI1NSwxMCwxMDYsNzksMjU0LDI0MywxNTgsMTM3LDAsNjcsMTc4LDY2LDI1NCwxNzcsMTIzLDE5OCwyNTUsMTUsNjIsMzQsMCwxOTcsODgsNDIsMjU1LDE0OSw5NSwxNzcsMjU1LDE1MiwwLDE5OCwyNTUsMTQ5LDI1NCwxMTMsMjU1LDIyNSw5MCwxNjMsMjU1LDEyNSwyMTcsMjQ3LDAsMTgsMTcsMjI0LDAsMTI4LDY2LDEyMCwyNTQsMTkyLDI1LDksMjU1LDUwLDIyMSwyMDUsMCw0OSwyMTIsNzAsMCwyMzMsMjU1LDE2NCwwLDIsMjA5LDksMCwyMjEsNTIsMjE5LDI1NCwxNzIsMjI0LDI0NCwyNTUsOTQsNTYsMjA2LDEsMjQyLDE3OSwyLDI1NSwzMSw5MSwxNjQsMSwyMzAsNDYsMTM4LDI1NSwxODksMjMwLDIyMCwwLDU3LDQ3LDYxLDI1NSwxMTEsMTEsMTU3LDAsMTc3LDkxLDE1MiwwLDI4LDIzMCw5OCwwLDk3LDg3LDEyNiwwLDE5OCw4OSwxNDUsMjU1LDE2Nyw3OSwxMDcsMCwyNDksNzcsMTYwLDEsMjksMjMzLDIzMCwyNTUsMTUwLDIxLDg2LDI1NCw2MCwxMSwxOTMsMCwxNTEsMzcsMzYsMjU0LDE4NSwxNTAsMjQzLDI1NSwyMjgsMjEyLDgzLDEsMTcyLDE1MSwxODAsMCwyMDEsMTY5LDE1NSwwLDI0NCw2MCwyMzQsMCwxNDIsMjM1LDQsMSw2NywyMTgsNjAsMCwxOTIsMTEzLDc1LDEsMTE2LDI0MywyMDcsMjU1LDY1LDE3MiwxNTUsMCw4MSwzMCwxNTYsMjU1LDgwLDcyLDMzLDI1NCwxOCwyMzEsMTA5LDI1NSwxNDIsMTA3LDIxLDI1NCwxMjUsMjYsMTMyLDI1NSwxNzYsMTYsNTksMjU1LDE1MCwyMDEsNTgsMCwyMDYsMTY5LDIwMSwwLDIwOCwxMjEsMjI2LDAsNDAsMTcyLDE0LDI1NSwxNTAsNjEsOTQsMjU1LDU2LDU3LDE1NiwyNTUsMTQxLDYwLDE0NSwyNTUsNDUsMTA4LDE0OSwyNTUsMjM4LDE0NSwxNTUsMjU1LDIwOSw4NSwzMSwyNTQsMTkyLDEyLDIxMCwwLDk5LDk4LDkzLDI1NCwxNTIsMTYsMTUxLDAsMjI1LDE4NSwyMjAsMCwxNDEsMjM1LDQ0LDI1NSwxNjAsMTcyLDIxLDI1NCw3MSwyNiwzMSwyNTUsMTMsNjQsOTMsMjU0LDI4LDU2LDE5OCwwLDE3Nyw2MiwyNDgsMSwxODIsOCwyNDEsMCwxNjYsMTAxLDE0OCwyNTUsNzgsODEsMTMzLDI1NSwxMjksMjIyLDIxNSwxLDE4OCwxNjksMTI5LDI1NSwyMzIsNyw5NywwLDQ5LDExMiw2MCwyNTUsMjE3LDIyOSwyNTEsMCwxMTksMTA4LDEzOCwwLDM5LDE5LDEyMywyNTQsMTMxLDQ5LDIzNSwwLDEzMiw4NCwxNDUsMCwxMzAsMjMwLDE0OCwyNTUsMjUsNzQsMTg3LDAsNSwyNDUsNTQsMjU1LDE4NSwyMTksMjQxLDEsMTgsMTk0LDIyOCwyNTUsMjQxLDIwMiwxMDIsMCwxMDUsMTEzLDIwMiwwLDE1NSwyMzUsNzksMCwyMSw5LDE3OCwyNTUsMTU2LDEsMjM5LDAsMjAwLDE0OCw2MSwwLDExNSwyNDcsMjEwLDI1NSw0OSwyMjEsMTM1LDAsNTgsMTg5LDgsMSwzNSw0Niw5LDAsODEsNjUsNSwyNTUsNTIsMTU4LDE4NSwyNTUsMTI1LDExNiw0NiwyNTUsNzQsMTQwLDEzLDI1NSwyMTAsOTIsMTcyLDI1NCwxNDcsMjMsNzEsMCwyMTcsMjI0LDI1MywyNTQsMTE1LDEwOCwxODAsMjU1LDE0NSw1OCw0OCwyNTQsMjE5LDE3NywyNCwyNTUsMTU2LDI1NSw2MCwxLDE1NCwxNDcsMjQyLDAsMjUzLDEzNCw4NywwLDUzLDc1LDIyOSwwLDQ4LDE5NSwyMjIsMjU1LDMxLDE3NSw1MCwyNTUsMTU2LDIxMCwxMjAsMjU1LDIwOCwzNSwyMjIsMjU1LDE4LDI0OCwxNzksMSwyLDEwLDEwMSwyNTUsMTU3LDE5NCwyNDgsMjU1LDE1OCwyMDQsMTAxLDI1NSwxMDQsMjU0LDE5NywyNTUsNzksNjIsNCwwLDE3OCwxNzIsMTAxLDEsOTYsMTQ2LDI1MSwyNTUsNjUsMTAsMTU2LDAsMiwxMzcsMTY1LDI1NSwxMTYsNCwyMzEsMCwyNDIsMjE1LDEsMCwxOSwzNSwyOSwyNTUsNDMsMTYxLDc5LDAsNTksMTQ5LDI0NiwxLDI1MSw2NiwxNzYsMCwyMDAsMzMsMywyNTUsODAsMTEwLDE0MiwyNTUsMTk1LDE2MSwxNywxLDIyOCw1Niw2NiwyNTUsMTIzLDQ3LDE0NSwyNTQsMTMyLDQsMTY0LDAsNjcsMTc0LDE3MiwwLDI1LDI1MywxMTQsMCw4Nyw5Nyw4NywxLDI1MCwyMjAsODQsMCw5Niw5MSwyMDAsMjU1LDM3LDEyNSw1OSwwLDE5LDY1LDExOCwwLDE2MSw1MiwyNDEsMjU1LDIzNywxNzIsNiwyNTUsMTc2LDE5MSwyNTUsMjU1LDEsNjUsMTMwLDI1NCwyMjMsMTkwLDIzMCwwLDEwMSwyNTMsMjMxLDI1NSwxNDYsMzUsMTA5LDAsMjUwLDI5LDc3LDEsNDksMCwxOSwwLDEyMyw5MCwxNTUsMSwyMiw4NiwzMiwyNTUsMjE4LDIxMyw2NSwwLDExMSw5MywxMjcsMCw2MCw5MywxNjksMjU1LDgsMTI3LDE4MiwwLDE3LDE4NiwxNCwyNTQsMjUzLDEzNywyNDYsMjU1LDIxMywyNSw0OCwyNTQsNzYsMjM4LDAsMjU1LDI0OCw5Miw3MCwyNTUsOTksMjI0LDEzOSwwLDE4NCw5LDI1NSwxLDcsMTY0LDIwOCwwLDIwNSwxMzEsMTk4LDEsODcsMjE0LDE5OSwwLDEzMCwyMTQsOTUsMCwyMjEsMTQ5LDIyMiwwLDIzLDM4LDE3MSwyNTQsMTk3LDExMCwyMTMsMCw0MywxMTUsMTQwLDI1NCwyMTUsMTc3LDExOCwwLDk2LDUyLDY2LDEsMTE3LDE1OCwyMzcsMCwxNCw2NCwxODIsMjU1LDQ2LDYzLDE3NCwyNTUsMTU4LDk1LDE5MCwyNTUsMjI1LDIwNSwxNzcsMjU1LDQzLDUsMTQyLDI1NSwxNzIsOTksMjEyLDI1NSwyNDQsMTg3LDE0NywwLDI5LDUxLDE1MywyNTUsMjI4LDExNiwyNCwyNTQsMzAsMTAxLDIwNywwLDE5LDI0NiwxNTAsMjU1LDEzNCwyMzEsNSwwLDEyNSwxMzQsMjI2LDEsNzcsNjUsOTgsMCwyMzYsMTMwLDMzLDI1NSw1LDExMCw2MiwwLDY5LDEwOCwxMjcsMjU1LDcsMTEzLDIyLDAsMTQ1LDIwLDgzLDI1NCwxOTQsMTYxLDIzMSwyNTUsMTMxLDE4MSw2MCwwLDIxNywyMDksMTc3LDI1NSwyMjksMTQ4LDIxMiwyNTQsMywxMzEsMTg0LDAsMTE3LDE3NywxODcsMSwyOCwxNCwzMSwyNTUsMTc2LDEwMiw4MCwwLDUwLDg0LDE1MSwyNTUsMTI1LDMxLDU0LDI1NSwyMSwxNTcsMTMzLDI1NSwxOSwxNzksMTM5LDEsMjI0LDIzMiwyNiwwLDM0LDExNywxNzAsMjU1LDE2NywyNTIsMTcxLDI1NSw3MywxNDEsMjA2LDI1NCwxMjksMjUwLDM1LDAsNzIsNzksMjM2LDEsMjIwLDIyOSwyMCwyNTUsNDEsMjAyLDE3MywyNTUsOTksNzYsMjM4LDI1NSwxOTgsMjIsMjI0LDI1NSwxMDgsMTk4LDE5NSwyNTUsMzYsMTQxLDk2LDEsMjM2LDE1OCw1OSwyNTUsMTA2LDEwMCw4NywwLDExMCwyMjYsMiwwLDIyNywyMzQsMjIyLDAsMTU0LDkzLDExOSwyNTUsNzQsMTEyLDE2NCwyNTUsNjcsOTEsMiwyNTUsMjEsMTQ1LDMzLDI1NSwxMDIsMjE0LDEzNywyNTUsMTc1LDIzMCwxMDMsMjU0LDE2MywyNDYsMTY2LDAsOTMsMjQ3LDExNiwyNTQsMTY3LDIyNCwyOCwyNTUsMjIwLDIsNTcsMSwxNzEsMjA2LDg0LDAsMTIzLDIyOCwxNywyNTUsMjcsMTIwLDExOSwwLDExOSwxMSwxNDcsMSwxODAsNDcsMjI1LDI1NSwxMDQsMjAwLDE4NSwyNTQsMTY1LDIsMTE0LDAsNzcsNzgsMjEyLDAsNDUsMTU0LDE3NywyNTUsMjQsMTk2LDEyMSwyNTQsODIsMTU3LDE4MiwwLDkwLDE2LDE5MCwxLDEyLDE0NywxOTcsMCw5NSwyMzksMTUyLDI1NSwxMSwyMzUsNzEsMCw4NiwxNDYsMTE5LDI1NSwxNzIsMTM0LDIxNCwwLDYwLDEzMSwxOTYsMCwxNjEsMjI1LDEyOSwwLDMxLDEzMCwxMjAsMjU0LDk1LDIwMCw1MSwwLDEwNSwyMzEsMjEwLDI1NSw1OCw5LDE0OCwyNTUsNDMsMTY4LDIyMSwyNTUsMTI0LDIzNywxNDIsMCwxOTgsMjExLDUwLDI1NCw0NiwyNDUsMTAzLDAsMTY0LDI0OCw4NCwwLDE1Miw3MCwyMDgsMjU1LDE4MCwxMTcsMTc3LDAsNzAsNzksMTg1LDAsMjQzLDc0LDMyLDAsMTQ5LDE1NiwyMDcsMCwxOTcsMTk2LDE2MSwxLDI0NSw1MywyMzksMCwxNSw5MywyNDYsMjU0LDEzOSwyNDAsNDksMjU1LDE5Niw4OCwzNiwyNTUsMTYyLDM4LDEyMywwLDEyOCwyMDAsMTU3LDEsMTc0LDc2LDEwMywyNTUsMTczLDE2OSwzNCwyNTQsMjE2LDEsMTcxLDI1NSwxMTQsNTEsMTcsMCwxMzYsMjI4LDE5NCwwLDExMCwxNTAsNTYsMjU0LDEwNiwyNDYsMTU5LDAsMTksMTg0LDc5LDI1NSwxNTAsNzcsMjQwLDI1NSwxNTUsODAsMTYyLDAsMCw1MywxNjksMjU1LDI5LDE1MSw4NiwwLDY4LDk0LDE2LDAsOTIsNywxMTAsMjU0LDk4LDExNywxNDksMjU1LDI0OSw3NywyMzAsMjU1LDI1MywxMCwxNDAsMCwyMTQsMTI0LDkyLDI1NCwzNSwxMTgsMjM1LDAsODksNDgsNTcsMSwyMiw1MywxNjYsMCwxODQsMTQ0LDYxLDI1NSwxNzksMjU1LDE5NCwwLDIxNCwyNDgsNjEsMjU0LDU5LDExMCwyNDYsMCwxMjEsMjEsODEsMjU0LDE2NiwzLDIyOCwwLDEwNiw2NCwyNiwyNTUsNjksMjMyLDEzNCwyNTUsMjQyLDIyMCw1MywyNTQsNDYsMjIwLDg1LDAsMTEzLDE0OSwyNDcsMjU1LDk3LDE3OSwxMDMsMjU1LDE5MCwxMjcsMTEsMCwxMzUsMjA5LDE4MiwwLDk1LDUyLDEyOSwxLDE3MCwxNDQsMjA2LDI1NSwxMjIsMjAwLDIwNCwyNTUsMTY4LDEwMCwxNDYsMCw2MCwxNDQsMTQ5LDI1NCw3MCw2MCw0MCwwLDEyMiw1MiwxNzcsMjU1LDI0NiwyMTEsMTAxLDI1NSwxNzQsMjM3LDgsMCw3LDUxLDEyMCwwLDE5LDMxLDE3MywwLDEyNiwyMzksMTU2LDI1NSwxNDMsMTg5LDIwMywwLDE5NiwxMjgsODgsMjU1LDIzMywxMzMsMjI2LDI1NSwzMCwxMjUsMTczLDI1NSwyMDEsMTA4LDUwLDAsMTIzLDEwMCw1OSwyNTUsMjU0LDE2MywzLDEsMjIxLDE0OCwxODEsMjU1LDIxNCwxMzYsNTcsMjU0LDIyMiwxODAsMTM3LDI1NSwyMDcsODgsNTQsMjU1LDI4LDMzLDI1MSwyNTUsNjcsMjE0LDUyLDEsMjEwLDIwOCwxMDAsMCw4MSwxNzAsOTQsMCwxNDUsNDAsNTMsMCwyMjQsMTExLDIzMSwyNTQsMzUsMjgsMjQ0LDI1NSwyMjYsMTk5LDE5NSwyNTQsMjM4LDE3LDIzMCwwLDIxNywyMTcsMTY0LDI1NCwxNjksMTU3LDIyMSwwLDIxOCw0NiwxNjIsMSwxOTksMjA3LDE2MywyNTUsMTA4LDExNSwxNjIsMSwxNCw5NiwxODcsMjU1LDExOCw2MCw3NiwwLDE4NCwxNTksMTUyLDAsMjA5LDIzMSw3MSwyNTQsNDIsMTY0LDE4NiwyNTUsMTg2LDE1Myw1MSwyNTQsMjIxLDE3MSwxODIsMjU1LDE2MiwxNDIsMTczLDAsMjM1LDQ3LDE5MywwLDcsMTM5LDE2LDEsOTUsMTY0LDY0LDI1NSwxNiwyMjEsMTY2LDAsMjE5LDE5NywxNiwwLDEzMiwyOSw0NCwyNTUsMTAwLDY5LDExNywyNTUsNjAsMjM1LDg4LDI1NCw0MCw4MSwxNzMsMCw3MSwxOTAsNjEsMjU1LDE4Nyw4OCwxNTcsMCwyMzEsMTEsMjMsMCwyMzcsMTE3LDE2NCwwLDIyNSwxNjgsMjIzLDI1NSwxNTQsMTE0LDExNiwyNTUsMTYzLDE1MiwyNDIsMSwyNCwzMiwxNzAsMCwxMjUsOTgsMTEzLDI1NCwxNjgsMTksNzYsMCwxNywxNTcsMjIwLDI1NCwxNTUsNTIsNSwwLDE5LDExMSwxNjEsMjU1LDcxLDkwLDI1MiwyNTUsMTczLDExMCwyNDAsMCwxMCwxOTgsMTIxLDI1NSwyNTMsMjU1LDI0MCwyNTUsNjYsMTIzLDIxMCwwLDIyMSwxOTQsMjE1LDI1NCwxMjEsMTYzLDE3LDI1NSwyMjUsNyw5OSwwLDE5MCw0OSwxODIsMCwxMTUsOSwxMzMsMSwyMzIsMjYsMTM4LDI1NSwyMTMsNjgsMTMyLDAsNDQsMTE5LDEyMiwyNTUsMTc5LDk4LDUxLDAsMTQ5LDkwLDEwNiwwLDcxLDUwLDIzMCwyNTUsMTAsMTUzLDExOCwyNTUsMTc3LDcwLDI1LDAsMTY1LDg3LDIwNSwwLDU1LDEzOCwyMzQsMCwyMzgsMzAsOTcsMCwxMTMsMTU1LDIwNywwLDk4LDE1MywxMjcsMCwzNCwxMDcsMjE5LDI1NCwxMTcsMTE0LDE3MiwyNTUsNzYsMTgwLDI1NSwyNTQsMjQyLDU3LDE3OSwyNTUsMjIxLDM0LDE3MiwyNTQsNTYsMTYyLDQ5LDI1NSw4MywzLDI1NSwyNTUsMTEzLDIyMSwxODksMjU1LDE4OCwyNSwyMjgsMjU0LDE2LDg4LDg5LDI1NSw3MSwyOCwxOTgsMjU0LDIyLDE3LDE0OSwyNTUsMjQzLDEyMSwyNTQsMjU1LDEwNywyMDIsOTksMjU1LDksMjA2LDE0LDEsMjIwLDQ3LDE1MywwLDEwNywxMzcsMzksMSw5Nyw0OSwxOTQsMjU1LDE0OSw1MSwxOTcsMjU0LDE4Niw1OCwxMSwyNTUsMTA3LDQzLDIzMiwxLDIwMCw2LDE0LDI1NSwxODEsMTMzLDY1LDI1NCwyMjEsMjI4LDE3MSwyNTUsMTIzLDYyLDIzMSwxLDIyNywyMzQsMTc5LDI1NSwzNCwxODksMjEyLDI1NCwyNDQsMTg3LDI0OSwwLDE5MCwxMyw4MCwxLDEzMCw4OSwxLDAsMjIzLDEzMywxNzMsMCw5LDIyMiwxOTgsMjU1LDY2LDEyNyw3NCwwLDE2NywyMTYsOTMsMjU1LDE1NSwxNjgsMTk4LDEsNjYsMTQ1LDAsMCw2OCwxMDIsNDYsMSwxNzIsOTAsMTU0LDAsMjE2LDEyOCw3NSwyNTUsMTYwLDQwLDUxLDAsMTU4LDE3LDI3LDEsMTI0LDI0MCw0OSwwLDIzNiwyMDIsMTc2LDI1NSwxNTEsMTI0LDE5MiwyNTUsMzgsMTkzLDE5MCwwLDk1LDE4Miw2MSwwLDE2MywxNDcsMTI0LDI1NSwyNTUsMTY1LDUxLDI1NSwyOCw0MCwxNywyNTQsMjE1LDk2LDc4LDAsODYsMTQ1LDIxOCwyNTQsMzEsMzYsMjAyLDI1NSw4Niw5LDUsMCwxMTEsNDEsMjAwLDI1NSwyMzcsMTA4LDk3LDAsNTcsNjIsNDQsMCwxMTcsMTg0LDE1LDEsNDUsMjQxLDExNiwwLDE1MiwxLDIyMCwyNTUsMTU3LDE2NSwxODgsMCwyNTAsMTUsMTMxLDEsNjAsNDQsMTI1LDI1NSw2NSwyMjAsMjUxLDI1NSw3NSw1MCwxODQsMCw1Myw5MCwxMjgsMjU1LDIzMSw4MCwxOTQsMjU1LDEzNiwxMjksMTI3LDEsMjEsMTgsMTg3LDI1NSw0NSw1OCwxNjEsMjU1LDcxLDE0NywzNCwwLDE3NCwyNDksMTEsMjU0LDM1LDE0MSwyOSwwLDIzOSw2OCwxNzcsMjU1LDExNSwxMTAsNTgsMCwyMzgsMTkwLDE3NywxLDg3LDI0NSwxNjYsMjU1LDE5MCw0OSwyNDcsMjU1LDE0Niw4MywxODQsMjU1LDE3MywxNCwzOSwyNTUsMTQ2LDIxNSwxMDQsMCwxNDIsMjIzLDEyMCwwLDE0OSwyMDAsMTU1LDI1NSwyMTIsMjA3LDE0NSwxLDE2LDE4MSwyMTcsMCwxNzMsMzIsODcsMjU1LDI1NSwzNSwxODEsMCwxMTksMjIzLDE2MSwxLDIwMCwyMjMsOTQsMjU1LDcwLDYsMTg2LDI1NSwxOTIsNjcsODUsMjU1LDUwLDE2OSwxNTIsMCwxNDQsMjYsMTIzLDI1NSw1NiwyNDMsMTc5LDI1NCwyMCw2OCwxMzYsMCwzOSwxNDAsMTg4LDI1NCwyNTMsMjA4LDUsMjU1LDIwMCwxMTUsMTM1LDEsNDMsMTcyLDIyOSwyNTUsMTU2LDEwNCwxODcsMCwxNTEsMjUxLDE2NywwLDUyLDEzNSwyMywwLDE1MSwxNTMsNzIsMCwxNDcsMTk3LDEwNywyNTQsMTQ4LDE1OCw1LDI1NSwyMzgsMTQzLDIwNiwwLDEyNiwxNTMsMTM3LDI1NSw4OCwxNTIsMTk3LDI1NCw3LDY4LDE2NywwLDI1MiwxNTksMTY1LDI1NSwyMzksNzgsNTQsMjU1LDI0LDYzLDU1LDI1NSwzOCwyMjIsOTQsMCwyMzcsMTgzLDEyLDI1NSwyMDYsMjA0LDIxMCwwLDE5LDM5LDI0NiwyNTQsMzAsNzQsMjMxLDAsMTM1LDEwOCwyOSwxLDE3OSwxMTUsMCwwLDExNywxMTgsMTE2LDEsMTMyLDYsMjUyLDI1NSwxNDUsMTI5LDE2MSwxLDEwNSw2NywxNDEsMCw4MiwzNywyMjYsMjU1LDIzOCwyMjYsMjI4LDI1NSwyMDQsMjE0LDEyOSwyNTQsMTYyLDEyMywxMDAsMjU1LDE4NSwxMjEsMjM0LDAsNDUsMTA4LDIzMSwwLDY2LDgsNTYsMjU1LDEzMiwxMzYsMTI4LDAsMTcyLDIyNCw2NiwyNTQsMTc1LDE1NywxODgsMCwyMzAsMjIzLDIyNiwyNTQsMjQyLDIxOSw2OSwwLDE4NCwxNCwxMTksMSw4MiwxNjIsNTYsMCwxMTQsMTIzLDIwLDAsMTYyLDEwMyw4NSwyNTUsNDksMjM5LDk5LDI1NCwxNTYsMTM1LDIxNSwwLDExMSwyNTUsMTY3LDI1NCwzOSwxOTYsMjE0LDAsMTQ0LDM4LDc5LDEsMjQ5LDE2OCwxMjUsMCwxNTUsOTcsMTU2LDI1NSwyMyw1MiwyMTksMjU1LDE1MCwyMiwxNDQsMCw0NCwxNDksMTY1LDI1NSw0MCwxMjcsMTgzLDAsMTk2LDc3LDIzMywyNTUsMTE4LDEyOSwyMTAsMjU1LDE3MCwxMzUsMjMwLDI1NSwyMTQsMTE5LDE5OCwwLDIzMywyNDAsMzUsMCwyNTMsNTIsNywyNTUsMTE3LDEwMiw0OCwyNTUsMjEsMjA0LDE1NCwyNTUsMTc5LDEzNiwxNzcsMjU1LDIzLDIsMywxLDE0OSwxMzAsODksMjU1LDI1MiwxNywxNTksMSw3MCw2MCwyNiwwLDE0NCwxMDcsMTcsMCwxODAsMTkwLDYwLDI1NSw1NiwxODIsNTksMjU1LDExMCw3MSw1NCwyNTUsMTk4LDE4LDEyOSwyNTUsMTQ5LDIyNCw4NywyNTUsMjIzLDIxLDE1MiwyNTUsMTM4LDIyLDE4MiwyNTUsMjUwLDE1NiwyMDUsMCwyMzYsNDUsMjA4LDI1NSw3OSwxNDgsMjQyLDEsMTAxLDcwLDIwOSwwLDEwMyw3OCwxNzQsMCwxMDEsMTQ0LDE3MiwyNTUsMTUyLDEzNiwyMzcsMSwxOTEsMTk0LDEzNiwwLDExMyw4MCwxMjUsMSwxNTIsNCwxNDEsMCwxNTUsMTUwLDUzLDI1NSwxOTYsMTE2LDI0NSwwLDIzOSwxMTQsNzMsMjU0LDE5LDgyLDE3LDI1NSwxMjQsMTI1LDIzNCwyNTUsNDAsNTIsMTkxLDAsNDIsMjEwLDE1OCwyNTUsMTU1LDEzMiwxNjUsMCwxNzgsNSw0MiwxLDY0LDkyLDQwLDI1NSwzNiw4NSw3NywyNTUsMTc4LDIyOCwxMTgsMCwxMzcsNjYsOTYsMjU0LDExNSwyMjYsNjYsMCwxMTAsMjQwLDY5LDI1NCwxNTEsMTExLDgwLDAsMTY3LDE3NCwyMzYsMjU1LDIyNywxMDgsMTA3LDI1NSwxODgsMjQyLDY1LDI1NSwxODMsODEsMjU1LDAsNTcsMjA2LDE4MSwyNTUsNDcsMzQsMTgxLDI1NSwyMTMsMjQwLDE1OCwxLDcxLDc1LDk1LDAsMTU2LDQwLDI0LDI1NSwxMDIsMjEwLDgxLDAsMTcxLDE5OSwyMjgsMjU1LDE1NCwzNCw0MSwwLDIyNywxNzUsNzUsMCwyMSwyMzksMTk1LDAsMTM4LDIyOSw5NSwxLDc2LDE5Miw0OSwwLDExNywxMjMsODcsMSwyMjcsMjI1LDEzMCwwLDEyNSw2Miw2MywyNTUsMiwxOTgsMTcxLDAsMjU0LDM2LDEzLDI1NCwxNDUsMTg2LDIwNiwwLDE0OCwyNTUsMjQ0LDI1NSwzNSwwLDE2NiwwLDMwLDE1MCwyMTksMSw5MiwyMjgsMjEyLDAsOTIsMTk4LDYwLDI1NCw2MiwxMzMsMjAwLDI1NSwyMDEsNDEsNTksMCwxMjUsMjM4LDEwOSwyNTUsMTgwLDE2MywyMzgsMSwxNDAsMTIyLDgyLDAsOSwyMiw4OCwyNTUsMTk3LDE1Nyw0NywyNTUsMTUzLDk0LDU3LDAsODgsMzAsMTgyLDAsODQsMTYxLDg1LDAsMTc4LDE0NiwxMjQsMCwxNjYsMTY2LDcsMjU1LDIxLDIwOCwyMjMsMCwxNTYsMTgyLDI0MiwwLDE1NSwxMjEsMTg1LDAsODMsMTU2LDE3NCwyNTQsMTU0LDE2LDExOCwyNTUsMTg2LDgzLDIzMiwxLDIyMyw1OCwxMjEsMjU1LDI5LDIzLDg4LDAsMzUsMTI1LDEyNywyNTUsMTcwLDUsMTQ5LDI1NCwxNjQsMTIsMTMwLDI1NSwxNTUsMTk2LDI5LDAsMTYxLDk2LDEzNiwwLDcsMzUsMjksMSwxNjIsMzcsMjUxLDAsMyw0NiwyNDIsMjU1LDAsMjE3LDE4OCwwLDU3LDE3NCwyMjYsMSwyMDYsMjMzLDIsMCw1NywxODcsMTM2LDI1NCwxMjMsMTg5LDksMjU1LDIwMSwxMTcsMTI3LDI1NSwxODYsMzYsMjA0LDAsMjMxLDI1LDIxNiwwLDgwLDc4LDEwNSwwLDE5LDEzNCwxMjksMjU1LDE0OCwyMDMsNjgsMCwxNDEsODEsMTI1LDI1NCwyNDgsMTY1LDIwMCwyNTUsMjE0LDE0NCwxMzUsMCwxNTEsNTUsMTY2LDI1NSwzOCwyMzUsOTEsMCwyMSw0NiwxNTQsMCwyMjMsMjU0LDE1MCwyNTUsMzUsMTUzLDE4MCwyNTUsMTI1LDE3NiwyOSwxLDQzLDk4LDMwLDI1NSwyMTYsMTIyLDIzMCwyNTUsMjMzLDE2MCwxMiwwLDU3LDE4NSwxMiwyNTQsMjQwLDExMyw3LDI1NSw1LDksMTYsMjU0LDI2LDkxLDEwOCwwLDEwOSwxOTgsMjAzLDAsOCwxNDcsNDAsMCwxMjksMTM0LDIyOCwyNTUsMTI0LDE4Niw0MCwyNTUsMTE0LDk4LDEzMiwyNTQsMTY2LDEzMiwyMywwLDk5LDY5LDQ0LDAsOSwyNDIsMjM4LDI1NSwxODQsNTMsNTksMCwxMzIsMTI5LDEwMiwyNTUsNTIsMzIsMjQzLDI1NCwxNDcsMjIzLDIwMCwyNTUsMTIzLDgzLDE3OSwyNTQsMTM1LDE0NCwyMDEsMjU1LDE0MSwzNyw1NiwxLDE1MSw2MCwyMjcsMjU1LDkwLDczLDE1NiwxLDIwMywxNzIsMTg3LDAsODAsMTUxLDQ3LDI1NSw5NCwxMzcsMjMxLDI1NSwzNiwxOTEsNTksMjU1LDIyNSwyMDksMTgxLDI1NSw3NCwyMTUsMjEzLDI1NCw2LDExOCwxNzksMjU1LDE1Myw1NCwxOTMsMSw1MCwwLDIzMSwwLDEwNCwxNTcsNzIsMSwxNDAsMjI3LDE1NCwyNTUsMTgyLDIyNiwxNiwyNTQsOTYsMjI1LDkyLDI1NSwxMTUsMjAsMTcwLDI1NCw2LDI1MCw3OCwwLDI0OCw3NSwxNzMsMjU1LDUzLDg5LDYsMjU1LDAsMTgwLDExOCwwLDcyLDE3MywxLDAsNjQsOCwyMDYsMSwxNzQsMTMzLDIyMywwLDE4NSw2MiwxMzMsMjU1LDIxNCwxMSw5OCwwLDE5NywzMSwyMDgsMCwxNzEsMTY3LDI0NCwyNTUsMjIsMjMxLDE4MSwxLDE1MCwyMTgsMTg1LDAsMjQ3LDE2OSw5NywxLDE2NSwxMzksMjQ3LDI1NSw0NywxMjAsMTQ5LDEsMTAzLDI0OCw1MSwwLDYwLDY5LDI4LDI1NCwyNSwxNzksMTk2LDAsMTI0LDcsMjE4LDI1NCw1OCwxMDcsODEsMCwxODQsMjMzLDE1NiwyNTUsMjUyLDc0LDM2LDAsMTE4LDE4OCw2NywwLDE0MSw5NSw1MywyNTUsMjIyLDk0LDE2NSwyNTQsNDYsNjEsNTMsMCwyMDYsNTksMTE1LDI1NSw0NywyMzYsMjUwLDI1NSw3NCw1LDMyLDEsMTI5LDE1NCwyMzgsMjU1LDEwNiwzMiwyMjYsMCwxMjEsMTg3LDYxLDI1NSwzLDE2NiwyNDEsMjU0LDY3LDE3MCwxNzIsMjU1LDI5LDIxNiwxNzgsMjU1LDIzLDIwMSwyNTIsMCwyNTMsMTEwLDI0MywwLDIwMCwxMjUsNTcsMCwxMDksMTkyLDk2LDI1NSw1MiwxMTUsMjM4LDAsMzgsMTIxLDI0MywyNTUsMjAxLDU2LDMzLDAsMTk0LDExOCwxMzAsMCw3NSw5NiwyNSwyNTUsMTcwLDMwLDIzMCwyNTQsMzksNjMsMjUzLDAsMzYsNDUsMjUwLDI1NSwyNTEsMSwyMzksMCwxNjAsMjEyLDkyLDEsNDUsMjA5LDIzNywwLDI0MywzMyw4NywyNTQsMjM3LDg0LDIwMSwyNTUsMjEyLDE4LDE1NywyNTQsMjEyLDk5LDEyNywyNTUsMjE3LDk4LDE2LDI1NCwxMzksMTcyLDIzOSwwLDE2OCwyMDEsMTMwLDI1NSwxNDMsMTkzLDE2OSwyNTUsMjM4LDE1MSwxOTMsMSwyMTUsMTA0LDQxLDAsMjM5LDYxLDE2NSwyNTQsMiwzLDI0MiwwLDIyLDIwMywxNzcsMjU0LDE3NywyMDQsMjIsMCwxNDksMTI5LDIxMywyNTQsMzEsMTEsNDEsMjU1LDAsMTU5LDEyMSwyNTQsMTYwLDI1LDExNCwyNTUsMTYyLDgwLDIwMCwwLDE1NywxNTEsMTEsMCwxNTQsMTM0LDc4LDEsMjE2LDU0LDI1MiwwLDQ4LDEwMywxMzMsMCwxMDUsMjIwLDE5NywwLDI1MywxNjgsNzcsMjU0LDUzLDE3OSwyMywwLDI0LDEyMSwyNDAsMSwyNTUsNDYsOTYsMjU1LDEwNyw2MCwxMzUsMjU0LDk4LDIwNSwyNDksMjU1LDYzLDI0OSwxMTksMjU1LDEyMCw1OSwyMTEsMjU1LDExNCwxODAsNTUsMjU0LDkxLDg1LDIzNywwLDE0OSwyMTIsNzcsMSw1Niw3Myw0OSwwLDg2LDE5OCwxNTAsMCw5MywyMDksMTYwLDAsNjksMjA1LDE4MiwyNTUsMjQ0LDkwLDQzLDAsMjAsMzYsMTc2LDAsMTIyLDExNiwyMjEsMCw1MSwxNjcsMzksMSwyMzEsMSw2MywyNTUsMTMsMTk3LDEzNCwwLDMsMjA5LDM0LDI1NSwxMzUsNTksMjAyLDAsMTY3LDEwMCw3OCwwLDQ3LDIyMyw3NiwwLDE4NSw2MCw2MiwwLDE3OCwxNjYsMTIzLDEsMTMyLDEyLDE2MSwyNTUsNjEsMTc0LDQzLDAsMTk1LDY5LDE0NCwwLDEyNyw0NywxOTEsMSwzNCw0NCw3OCwwLDU3LDIzNCw1MiwxLDI1NSwyMiw0MCwyNTUsMjQ2LDk0LDE0NiwwLDgzLDIyOCwxMjgsMCw2MCw3OCwyMjQsMjU1LDAsOTYsMjEwLDI1NSwxNTMsMTc1LDIzNiwwLDE1OSwyMSw3MywwLDE4MCwxMTUsMTk2LDI1NCwxMzEsMjI1LDEwNiwwLDI1NSwxNjcsMTM0LDAsMTU5LDgsMTEyLDI1NSwxMjAsNjgsMTk0LDI1NSwxNzYsMTk2LDE5OCwyNTUsMTE4LDQ4LDE2OCwyNTUsOTMsMTY5LDEsMCwxMTIsMjAwLDEwMiwxLDc0LDI0LDI1NCwwLDE5LDE0MSw0LDI1NCwxNDIsNjIsNjMsMCwxMzEsMTc5LDE4NywyNTUsNzcsMTU2LDE1NSwyNTUsMTE5LDg2LDE2NCwwLDE3MCwyMDgsMTQ2LDI1NSwyMDgsMTMzLDE1NCwyNTUsMTQ4LDE1NSw1OCwyNTUsMTYyLDEyMCwyMzIsMjU0LDI1MiwyMTMsMTU1LDAsMjQxLDEzLDQyLDAsOTQsNTAsMTMxLDAsMTc5LDE3MCwxMTIsMCwxNDAsODMsMTUxLDI1NSw1NSwxMTksODQsMSwxNDAsMzUsMjM5LDI1NSwxNTMsNDUsNjcsMSwyMzYsMTc1LDM5LDAsNTQsMTUxLDEwMywyNTUsMTU4LDQyLDY1LDI1NSwxOTYsMjM5LDEzNSwyNTQsODYsNTMsMjAzLDAsMTQ5LDk3LDQ3LDI1NCwyMTYsMzUsMTcsMjU1LDcwLDMsNzAsMSwxMDMsMzYsOTAsMjU1LDQwLDI2LDE3MywwLDE4NCw0OCwxMywwLDE2MywyMTksMjE3LDI1NSw4MSw2LDEsMjU1LDIyMSwxNzAsMTA4LDI1NCwyMzMsMjA4LDkzLDAsMTAwLDIwMSwyNDksMjU0LDg2LDM2LDM1LDI1NSwyMDksMTU0LDMwLDEsMjI3LDIwMSwyNTEsMjU1LDIsMTg5LDE2NywyNTQsMTAwLDU3LDMsMCwxMywxMjgsNDEsMCwxOTcsMTAwLDc1LDAsMTUwLDIwNCwyMzUsMjU1LDE0NSwxNzQsNTksMCwxMjAsMjQ4LDE0OSwyNTUsODUsNTUsMjI1LDAsMTE0LDIxMCw1MywyNTQsMTk5LDIwNCwxMTksMCwxNCwyNDcsNzQsMSw2MywyNTEsMTI5LDAsNjcsMTA0LDE1MSwxLDEzNSwxMzAsODAsMCw3OSw4OSw1NSwyNTUsMTE3LDIzMCwxNTcsMjU1LDI1LDk2LDE0MywwLDIxMywxNDUsNSwwLDY5LDI0MSwxMjAsMSwxNDksMjQzLDk1LDI1NSwxMTQsNDIsMjAsMCwxMzEsNzIsMiwwLDE1NCw1MywyMCwyNTUsNzMsNjIsMTA5LDAsMTk2LDEwMiwxNTIsMCw0MSwxMiwyMDQsMjU1LDEyMiwzOCwxMSwxLDI1MCwxMCwxNDUsMCwyMDcsMTI1LDE0OCwwLDI0NiwyNDQsMjIyLDI1NSw0MSwzMiw4NSwxLDExMiwyMTMsMTI2LDAsMTYyLDI0OSw4NiwxLDcxLDE5OCwxMjcsMjU1LDgxLDksMjEsMSw5OCwzOSw0LDI1NSwyMDQsNzEsNDUsMSw3NSwxMTEsMTM3LDAsMjM0LDU5LDIzMSwwLDMyLDQ4LDk1LDI1NSwyMDQsMzEsMTE0LDEsMjksMTk2LDE4MSwyNTUsNTEsMjQxLDE2NywyNTQsOTMsMTA5LDE0MiwwLDEwNCwxNDQsNDUsMCwyMzUsMTIsMTgxLDI1NSw1MiwxMTIsMTY0LDAsNzYsMjU0LDIwMiwyNTUsMTc0LDE0LDE2MiwwLDYxLDIzNSwxNDcsMjU1LDQzLDY0LDE4NSwyNTQsMjMzLDEyNSwyMTcsMCwyNDMsODgsMTY3LDI1NCw3NCw0OSw4LDAsMTU2LDIwNCw2NiwwLDEyNCwyMTQsMTIzLDAsMzgsMjIxLDExOCwxLDE0NiwxMTIsMjM2LDAsMTE0LDk4LDE3NywwLDE1MSw4OSwxOTksMCw4NywxOTcsMTEyLDAsMTg1LDE0OSwxNjEsMCw0NCw5NiwxNjUsMCwyNDgsMTc5LDIwLDI1NSwxODgsMjE5LDIxNiwyNTQsNDAsNjIsMTMsMCwyNDMsMTQyLDE0MSwwLDIyOSwyMjcsMjA2LDI1NSwxNzIsMjAyLDM1LDI1NSwxMTcsMTc2LDIyNSwyNTUsODIsMTEwLDM4LDEsNDIsMjQ1LDE0LDI1NSwyMCw4Myw5NywwLDQ5LDE3MSwxMCwwLDI0MiwxMTksMTIwLDAsMjUsMjMyLDYxLDAsMjEyLDI0MCwxNDcsMjU1LDQsMTE1LDU2LDI1NSwxNDUsMTcsMjM5LDI1NCwyMDIsMTcsMjUxLDI1NSwyNDksMTgsMjQ1LDI1NSw5OSwxMTcsMjM5LDAsMTg0LDQsMTc5LDI1NSwyNDYsMjM3LDUxLDI1NSwzNywyMzksMTM3LDI1NSwxNjYsMTEyLDE2NiwyNTUsODEsMTg4LDMzLDI1NSwxODUsMjUwLDE0MiwyNTUsNTQsMTg3LDE3MywwLDIwOCwxMTIsMjAxLDAsMjQ2LDQzLDIyOCwxLDEwNCwxODQsODgsMjU1LDIxMiw1MiwxOTYsMjU1LDUxLDExNywxMDgsMjU1LDI1NCwxMTcsMTU1LDAsNDYsOTEsMTUsMjU1LDg3LDE0LDE0NCwyNTUsODcsMjI3LDIwNCwwLDgzLDI2LDgzLDEsMTU5LDc2LDIyNywwLDE1OSwyNywyMTMsMSwyNCwxNTEsMTA4LDAsMTE3LDE0NCwxNzksMjU0LDEzNywyMDksODIsMCwzOCwxNTksMTAsMCwxMTUsMTMzLDIwMSwwLDIyMywxODIsMTU2LDEsMTEwLDE5Niw5MywyNTUsNTcsNjAsMjMzLDAsNSwxNjcsMTA1LDI1NSwxNTQsMTk3LDE2NCwwLDk2LDM0LDE4NiwyNTUsMTQ3LDEzMywzNywxLDIyMCw5OSwxOTAsMCwxLDE2Nyw4NCwyNTUsMjAsMTQ1LDE3MSwwLDE5NCwxOTcsMjUxLDI1NCw5NSw3OCwxMzMsMjU1LDI1MiwyNDgsMjQzLDI1NSwyMjUsOTMsMTMxLDI1NSwxODcsMTM0LDE5NiwyNTUsMjE2LDE1MywxNzAsMCwyMCwxMTgsMTU4LDI1NCwxNDAsMSwxMTgsMCw4NiwxNTgsMTUsMSw0NSwyMTEsNDEsMjU1LDE0NywxLDEwMCwyNTQsMTEzLDExNiw3NiwyNTUsMjExLDEyNywxMDgsMSwxMDMsMTUsNDgsMCwxOTMsMTYsMTAyLDEsNjksNTEsOTUsMjU1LDEwNywxMjgsMTU3LDAsMTM3LDE3MSwyMzMsMCw5MCwxMjQsMTQ0LDEsMTA2LDE2MSwxODIsMCwxNzUsNzYsMjM2LDEsMjAwLDE0MSwxNzIsMjU1LDE2Myw1OCwxMDQsMCwyMzMsMTgwLDUyLDI1NSwyNDAsMjUzLDE0LDI1NSwxNjIsMTEzLDI1NCwyNTUsMzgsMjM5LDEzOCwyNTQsNTIsNDYsMTY2LDAsMjQxLDEwMSwzMywyNTQsMTMxLDE4NiwxNTYsMCwxMTEsMjA4LDYyLDI1NSwxMjQsOTQsMTYwLDI1NSwzMSwxNzIsMjU0LDAsMTEyLDE3NCw1NiwyNTUsMTg4LDk5LDI3LDI1NSw2NywxMzgsMjUxLDAsMTI1LDU4LDEyOCwxLDE1NiwxNTIsMTc0LDI1NSwxNzgsMTIsMjQ3LDI1NSwyNTIsODQsMTU4LDAsODIsMTk3LDE0LDI1NCwxNzIsMjAwLDgzLDI1NSwzNywzOSw0NiwxLDEwNiwyMDcsMTY3LDAsMjQsMTg5LDM0LDAsMTMxLDE3OCwxNDQsMCwyMDYsMjEzLDQsMCwxNjEsMjI2LDIxMCwwLDcyLDUxLDEwNSwyNTUsOTcsNDUsMTg3LDI1NSw3OCwxODQsMjIzLDI1NSwxNzYsMjksMjUxLDAsNzksMTYwLDg2LDI1NSwxMTYsMzcsMTc4LDAsODIsNzcsMjEzLDEsODIsODQsMTQxLDI1NSwyMjYsMTAxLDIxMiwxLDE3NSw4OCwxOTksMjU1LDI0NSw5NCwyNDcsMSwxNzIsMTE4LDEwOSwyNTUsMTY2LDE4NSwxOTAsMCwxMzEsMTgxLDEyMCwwLDg3LDI1NCw5MywyNTUsMTM0LDI0MCw3MywyNTUsMzIsMjQ1LDE0MywyNTUsMTM5LDE2MiwxMDMsMjU1LDE3OSw5OCwxOCwyNTQsMjE3LDIwNCwxMTIsMCwxNDcsMjIzLDEyMCwyNTUsNTMsMTAsMjQzLDAsMTY2LDE0MCwxNTAsMCwxMjUsODAsMjAwLDI1NSwxNCwxMDksMjE5LDI1NSw5MSwyMTgsMSwyNTUsMjUyLDI1Miw0NywyNTQsMTA5LDE1NiwxMTYsMjU1LDExNSw0OSwxMjcsMSwyMDQsODcsMjExLDI1NSwxNDgsMjAyLDIxNywyNTUsMjYsODUsMjQ5LDI1NSwxNCwyNDUsMTM0LDEsNzYsODksMTY5LDI1NSwyNDIsNDUsMjMwLDAsNTksOTgsMTcyLDI1NSwxMTQsNzMsMTMyLDI1NCw3OCwxNTUsNDksMjU1LDE1OCwxMjYsODQsMCw0OSwxNzUsNDMsMjU1LDE2LDE4Miw4NCwyNTUsMTU3LDEwMywzNSwwLDEwNCwxOTMsMTA5LDI1NSw2NywyMjEsMTU0LDAsMjAxLDE3MiwxLDI1NCw4LDE2Miw4OCwwLDE2NSwxLDI5LDI1NSwxMjUsMTU1LDIyOSwyNTUsMzAsMTU0LDIyMCwxLDEwMywyMzksOTIsMCwyMjAsMSwxMDksMjU1LDIwMiwxOTgsMSwwLDk0LDIsMTQyLDEsMzYsNTQsNDQsMCwyMzUsMjI2LDE1OCwyNTUsMTcwLDI1MSwyMTQsMjU1LDE4NSw3Nyw5LDAsOTcsNzQsMjQyLDAsMjE5LDE2MywxNDksMjU1LDI0MCwzNSwxMTgsMjU1LDIyMywxMTQsODgsMjU0LDE5MiwxOTksMywwLDEwNiwzNywyNCwyNTUsMjAxLDE2MSwxMTgsMjU1LDk3LDg5LDk5LDEsMjI0LDU4LDEwMywyNTUsMTAxLDE5OSwxNDcsMjU0LDIyMiw2MCw5OSwwLDIzNCwyNSw1OSwxLDUyLDEzNSwyNywwLDEwMiwzLDkxLDI1NCwxNjgsMjE2LDIzNSwwLDIyOSwyMzIsMTM2LDAsMTA0LDYwLDEyOSwwLDQ2LDE2OCwyMzgsMCwzOSwxOTEsNjcsMCw3NSwxNjMsNDcsMCwxNDMsOTcsOTgsMjU1LDU2LDIxNiwxNjgsMSwxNjgsMjMzLDI1MiwyNTUsMzUsMTExLDIyLDI1NSw5Miw4NCw0MywwLDI2LDIwMCw4NywxLDkxLDI1MywxNTIsMCwyMDIsNTYsNzAsMCwxNDIsOCw3NywwLDgwLDEwLDE3NSwxLDI1MiwxOTksNzYsMCwyMiwxMTAsODIsMjU1LDEyOSwxLDE5NCwwLDExLDEyOCw2MSwxLDg3LDE0LDE0NSwyNTUsMjUzLDIyMiwxOTAsMSwxNSw3MiwxNzQsMCw4NSwxNjMsODYsMjU0LDU4LDk5LDQ0LDI1NSw0NSwyNCwxODgsMjU0LDI2LDIwNSwxNSwwLDE5LDIyOSwyMTAsMjU0LDI0OCw2NywxOTUsMCw5OSw3MSwxODQsMCwxNTQsMTk5LDM3LDI1NSwxNTEsMjQzLDEyMSwyNTUsMzgsNTEsNzUsMjU1LDIwMSw4NSwxMzAsMjU0LDQ0LDY1LDI1MCwwLDU3LDE0NywyNDMsMjU0LDE0Niw0Myw1OSwyNTUsODksMjgsNTMsMCwzMyw4NCwyNCwyNTUsMTc5LDUxLDE4LDI1NCwxODksNzAsODMsMCwxMSwxNTYsMTc5LDEsOTgsMTM0LDExOSwwLDE1OCwxMTEsMTExLDAsMTE5LDE1NCw3MywyNTUsMjAwLDYzLDE0MCwyNTQsNDUsMTMsMTMsMjU1LDE1NCwxOTIsMiwyNTQsODEsNzIsNDIsMCw0NiwxNjAsMTg1LDI1NCw0NCwxMTIsNiwwLDE0NiwyMTUsMTQ5LDEsMjYsMTc2LDEwNCwwLDY4LDI4LDg3LDEsMjM2LDUwLDE1MywyNTUsMTc5LDEyOCwyNTAsMjU0LDIwNiwxOTMsMTkxLDI1NSwxNjYsOTIsMTM3LDI1NCw1Myw0MCwyMzksMCwyMTAsMSwyMDQsMjU0LDE2OCwxNzMsMzUsMCwxNDEsMjQzLDQ1LDEsMzYsNTAsMTA5LDI1NSwxNSwyNDIsMTk0LDI1NSwyMjcsMTU5LDEyMiwyNTUsMTc2LDE3NSwyMDIsMjU0LDcwLDU3LDcyLDAsNDAsMjIzLDU2LDAsMjA4LDE2Miw1OCwyNTUsMTgzLDk4LDkzLDAsMTUsMTExLDEyLDAsMzAsOCw3NiwyNTUsMTMyLDEyNywyNDYsMjU1LDQ1LDI0MiwxMDMsMCw2OSwxODEsMTUsMjU1LDEwLDIwOSwzMCwwLDMsMTc5LDEyMSwwLDI0MSwyMzIsMjE4LDEsMTIzLDE5OSw4OCwyNTUsMiwyMTAsMjAyLDEsMTg4LDEzMCw4MSwyNTUsOTQsMTAxLDIwOCwxLDEwMywzNiw0NSwwLDc2LDE5MywyNCwxLDk1LDI2LDI0MSwyNTUsMTY1LDE2MiwxODcsMCwzNiwxMTQsMTQwLDAsMjAyLDY2LDUsMjU1LDM3LDU2LDE0NywwLDE1MiwxMSwyNDMsMSwxMjcsODUsMjMyLDI1NSwyNTAsMTM1LDIxMiwxLDE4NSwxNzcsMTEzLDAsOTAsMjIwLDc1LDI1NSw2OSwyNDgsMTQ2LDAsNTAsMTExLDUwLDAsOTIsMjIsODAsMCwyNDQsMzYsMTE1LDI1NCwxNjMsMTAwLDgyLDI1NSwyNSwxOTMsNiwxLDEyNyw2MSwzNiwwLDI1Myw2NywzMCwyNTQsNjUsMjM2LDE3MCwyNTUsMTYxLDE3LDIxNSwyNTQsNjMsMTc1LDE0MCwwLDU1LDEyNyw0LDAsNzksMTEyLDIzMywwLDEwOSwxNjAsNDAsMCwxNDMsODMsNywyNTUsNjUsMjYsMjM4LDI1NSwyMTcsMTY5LDE0MCwyNTUsNzgsOTQsMTg5LDI1NSwwLDE0NywxOTAsMjU1LDE0Nyw3MSwxODYsMjU0LDEwNiw3NywxMjcsMjU1LDIzMywxNTcsMjMzLDEsMTM1LDg3LDIzNywyNTUsMjA4LDEzLDIzNiwxLDE1NSwxMDksMzYsMjU1LDE4MCwxMDAsMjE4LDAsMTgwLDE2MywxOCwwLDE5MCwxMTAsOSwxLDE3LDYzLDEyMywyNTUsMTc5LDEzNiwxODAsMjU1LDE2NSwxMjMsMTIzLDI1NSwxNDQsMTg4LDgxLDI1NCw3MSwyNDAsMTA4LDI1NSwyNSwxMTIsMTEsMjU1LDIyNywyMTgsNTEsMjU1LDE2Nyw1MCwyMzQsMjU1LDExNCw3OSwxMDgsMjU1LDMxLDE5LDExNSwyNTUsMTgzLDI0MCw5OSwwLDIyNyw4NywxNDMsMjU1LDcyLDIxNywyNDgsMjU1LDEwMiwxNjksOTUsMSwxMjksMTQ5LDE0OSwwLDIzOCwxMzMsMTIsMSwyMjcsMjA0LDM1LDAsMjA4LDExNSwyNiwxLDEwMiw4LDIzNCwwLDExMiw4OCwxNDMsMSwxNDQsMjQ5LDE0LDAsMjQwLDE1OCwxNzIsMjU0LDEwMCwxMTIsMTE5LDAsMTk0LDE0MSwxNTMsMjU0LDQwLDU2LDgzLDI1NSwxMjEsMTc2LDQ2LDAsNDIsNTMsNzYsMjU1LDE1OCwxOTEsMTU0LDAsOTEsMjA5LDkyLDAsMTczLDEzLDE2LDEsNSw3MiwyMjYsMjU1LDIwNCwyNTQsMTQ5LDAsODAsMTg0LDIwNywwLDEwMCw5LDEyMiwyNTQsMTE4LDEwMSwxNzEsMjU1LDI1MiwyMDMsMCwyNTQsMTYwLDIwNyw1NCwwLDU2LDcyLDI0OSwxLDU2LDE0MCwxMywyNTUsMTAsNjQsMTA3LDI1NCw5MSwxMDEsNTIsMjU1LDIyNSwxODEsMjQ4LDEsMTM5LDI1NSwxMzIsMCwyMzAsMTQ1LDE3LDAsMjMzLDU2LDIzLDAsMTE5LDEsMjQxLDI1NSwyMTMsMTY5LDE1MSwyNTUsOTksOTksOSwyNTQsMTg1LDE1LDE5MSwyNTUsMTczLDEwMywxMDksMSwxNzQsMTMsMjUxLDI1NSwxNzgsODgsNywyNTQsMjcsNTksNjgsMjU1LDEwLDMzLDIsMjU1LDI0OCw5Nyw1OSwwLDI2LDMwLDE0NiwxLDE3NiwxNDcsMTAsMCw5NSwxMjEsMjA3LDEsMTg4LDg4LDI0LDAsMTg1LDk0LDI1NCwyNTQsMTE1LDU1LDIwMSwwLDI0LDUwLDcwLDAsMTIwLDUzLDYsMCwxNDIsNjYsMTQ2LDAsMjI4LDIyNiwyNDksMjU1LDEwNCwxOTIsMjIyLDEsMTczLDY4LDIxOSwwLDE2MiwxODQsMzYsMjU1LDE0MywxMDIsMTM3LDI1NSwxNTcsMTEsMjMsMCwxMjUsNDUsOTgsMCwyMzUsOTMsMjI1LDI1NCw1NiwxMTIsMTYwLDI1NSw3MCwxMTYsMjQzLDEsMTUzLDI0OSw1NSwyNTUsMTI5LDM5LDE3LDEsMjQxLDgwLDI0NCwwLDg3LDY5LDIxLDEsOTQsMjI4LDczLDI1NSw3OCw2Niw2NSwyNTUsMTk0LDIyNywyMzEsMCw2MSwxNDYsODcsMjU1LDE3MywxNTUsMjMsMjU1LDExMiwxMTYsMjE5LDI1NCwyMTYsMzgsMTEsMjU1LDEzMSwxODYsMTMzLDAsOTQsMjEyLDE4NywwLDEwMCw0Nyw5MSwwLDIwNCwyNTQsMTc1LDI1NSwyMjIsMTgsMjE1LDI1NCwxNzMsNjgsMTA4LDI1NSwyMjcsMjI4LDc5LDI1NSwzOCwyMjEsMjEzLDAsMTYzLDIyNywxNTAsMjU0LDMxLDE5MCwxOCwwLDE2MCwxNzksMTEsMSwxMCw5MCw5NCwyNTUsMjIwLDE3NCw4OCwwLDE2MywyMTEsMjI5LDI1NSwxOTksMTM2LDUyLDAsMTMwLDk1LDIyMSwyNTUsMTQwLDE4OCwyMzEsMjU0LDEzOSwxMTMsMTI4LDI1NSwxMTcsMTcxLDIzNiwyNTQsNDksMjIwLDIwLDI1NSw1OSwyMCwxNzEsMjU1LDIyOCwxMDksMTg4LDAsMjAsMjI1LDMyLDI1NCwxOTUsMTYsMTc0LDAsMjI3LDI1NCwxMzYsMSwxMzUsMzksMTA1LDAsMTUwLDc3LDIwNiwyNTUsMjEwLDIzOCwyMjZdLFwiaThcIixBTExPQ19OT05FLFJ1bnRpbWUuR0xPQkFMX0JBU0UrMTAyNDApO2FsbG9jYXRlKFs1NSwyMTIsMTMyLDI1NCwyMzksNTcsMTI0LDAsMTcwLDE5NCw5MywyNTUsMjQ5LDE2LDI0NywyNTUsMjQsMTUxLDYyLDI1NSwxMCwxNTEsMTAsMCw3OSwxMzksMTc4LDI1NSwxMjAsMjQyLDIwMiwwLDI2LDIxOSwyMTMsMCw2MiwxMjUsMzUsMjU1LDE0NCwyLDEwOCwyNTUsMjMwLDMzLDgzLDI1NSw4MSw0NSwyMTYsMSwyMjQsNjIsMTcsMCwyMTQsMjE3LDEyNSwwLDk4LDE1MywxNTMsMjU1LDE3OSwxNzYsMTA2LDI1NCwxMzEsOTMsMTM4LDI1NSwxMDksNjIsMzYsMjU1LDE3OCwxMjEsMzIsMjU1LDEyMCwyNTIsNzAsMCwyMjAsMjQ4LDM3LDAsMjA0LDg4LDEwMywxLDEyOCwyMjAsMjUxLDI1NSwyMzYsMjI3LDcsMSwxMDYsNDksMTk4LDI1NSw2MCw1NiwxMDcsMCw5OSwxMTQsMjM4LDAsMjIwLDIwNCw5NCwxLDczLDE4NywxLDAsODksMTU0LDM0LDAsNzgsMjE3LDE2NSwyNTUsMTQsMTk1LDI0OSwyNTUsOSwyMzAsMjUzLDI1NSwyMDUsMTM1LDI0NSwwLDI2LDI1Miw3LDI1NSw4NCwyMDUsMjcsMSwxMzQsMiwxMTIsMCwzNywxNTgsMzIsMCwyMzEsOTEsMjM3LDI1NSwxOTEsMTcwLDIwNCwyNTUsMTUyLDcsMjIyLDAsMTA5LDE5Miw0OSwwLDE5MywxNjYsMTQ2LDI1NSwyMzIsMTksMTgxLDI1NSwxMDUsMTQyLDUyLDI1NSwxMDMsMTYsMjcsMSwyNTMsMjAwLDE2NSwwLDE5NSwyMTcsNCwyNTUsNTIsMTg5LDE0NCwyNTUsMTIzLDE1NSwxNjAsMjU0LDg3LDEzMCw1NCwyNTUsNzgsMTIwLDYxLDI1NSwxNCw1Niw0MSwwLDI1LDQxLDEyNSwyNTUsODcsMTY4LDI0NSwwLDIxNCwxNjUsNzAsMCwyMTIsMTY5LDYsMjU1LDIxOSwyMTEsMTk0LDI1NCw3Miw5MywxNjQsMjU1LDE5NywzMywxMDMsMjU1LDQzLDE0MiwxNDEsMCwxMzEsMjI1LDE3MiwwLDI0NCwxMDUsMjgsMCw2OCw2OCwyMjUsMCwxMzYsODQsMTMsMjU1LDEzMCw1Nyw0MCwyNTQsMTM5LDc3LDU2LDAsODQsMTUwLDUzLDAsNTQsOTUsMTU3LDAsMTQ0LDEzLDE3NywyNTQsOTUsMTE1LDE4NiwwLDExNywyMywxMTgsMjU1LDI0NCwxNjYsMjQxLDI1NSwxMSwxODYsMTM1LDAsMTc4LDEwNiwyMDMsMjU1LDk3LDIxOCw5MywwLDQzLDI1Myw0NSwwLDE2NCwxNTIsNCwwLDEzOSwxMTgsMjM5LDAsOTYsMSwyNCwyNTQsMjM1LDE1MywyMTEsMjU1LDE2OCwxMTAsMjAsMjU1LDUwLDIzOSwxNzYsMCwxMTQsNDEsMjMyLDAsMTkzLDI1MCw1MywwLDI1NCwxNjAsMTExLDI1NCwxMzYsMTIyLDQxLDI1NSw5NywxMDgsNjcsMCwyMTUsMTUyLDIzLDI1NSwxNDAsMjA5LDIxMiwwLDQyLDE4OSwxNjMsMCwyMDIsNDIsNTAsMjU1LDEwNiwxMDYsMTg5LDI1NSwxOTAsNjgsMjE3LDI1NSwyMzMsNTgsMTE3LDAsMjI5LDIyMCwyNDMsMSwxOTcsMyw0LDAsMzcsMTIwLDU0LDI1NCw0LDE1NiwxMzQsMjU1LDM2LDYxLDE3MSwyNTQsMTY1LDEzNiwxMDAsMjU1LDIxMiwyMzIsMTQsMCw5MCwxNzQsMTAsMCwyMTYsMTk4LDY1LDI1NSwxMiwzLDY0LDAsMTE2LDExMywxMTUsMjU1LDI0OCwxMDMsOCwwLDIzMSwxMjUsMTgsMjU1LDE2MCwyOCwxOTcsMCwzMCwxODQsMzUsMSwyMjMsNzMsMjQ5LDI1NSwxMjMsMjAsNDYsMjU0LDEzNSw1NiwzNywyNTUsMTczLDEzLDIyOSwxLDExOSwxNjEsMzQsMjU1LDI0NSw2MSw3MywwLDIwNSwxMjUsMTEyLDAsMTM3LDEwNCwxMzQsMCwyMTcsMjQ2LDMwLDI1NSwyMzcsMTQyLDE0MywwLDY1LDE1OSwxMDIsMjU1LDEwOCwxNjQsMTkwLDAsMjE5LDExNywxNzMsMjU1LDM0LDM3LDEyMCwyNTQsMjAwLDY5LDgwLDAsMzEsMTI0LDIxOCwyNTQsNzQsMjcsMTYwLDI1NSwxODYsMTU0LDE5OSwyNTUsNzEsMTk5LDI1MiwwLDEwNCw4MSwxNTksMSwxNywyMDAsMzksMCwyMTEsNjEsMTkyLDEsMjYsMjM4LDkxLDAsMTQ4LDIxNywxMiwwLDU5LDkxLDIxMywyNTUsMTEsODEsMTgzLDI1NSwxMjksMjMwLDEyMiwyNTUsMTE0LDIwMywxNDUsMSwxMTksMTgwLDY2LDI1NSw3MiwxMzgsMTgwLDAsMjI0LDE0OSwxMDYsMCwxMTksODIsMTA0LDI1NSwyMDgsMTQwLDQzLDAsOTgsOSwxODIsMjU1LDIwNSwxMDEsMTM0LDI1NSwxOCwxMDEsMzgsMCw5NSwxOTcsMTY2LDI1NSwyMDMsMjQxLDE0NywwLDYyLDIwOCwxNDUsMjU1LDEzMywyNDYsMjUxLDAsMiwxNjksMTQsMCwxMywyNDcsMTg0LDAsMTQyLDcsMjU0LDAsMzYsMjAwLDIzLDI1NSw4OCwyMDUsMjIzLDAsOTEsMTI5LDUyLDI1NSwyMSwxODYsMzAsMCwxNDMsMjI4LDIxMCwxLDI0NywyMzQsMjQ4LDI1NSwyMzAsNjksMzEsMjU0LDE3NiwxODYsMTM1LDI1NSwyMzgsMjA1LDUyLDEsMTM5LDc5LDQzLDAsMTcsMTc2LDIxNywyNTQsMzIsMjQzLDY3LDAsMjQyLDExMSwyMzMsMCw0NCwzNSw5LDI1NSwyMjcsMTE0LDgxLDEsNCw3MSwxMiwyNTUsMzgsMTA1LDE5MSwwLDcsMTE3LDUwLDI1NSw4MSw3OSwxNiwwLDYzLDY4LDY1LDI1NSwxNTcsMzYsMTEwLDI1NSw3NywyNDEsMywyNTUsMjI2LDQ1LDI1MSwxLDE0MiwyNSwyMDYsMCwxMjAsMTIzLDIwOSwxLDI4LDI1NCwyMzgsMjU1LDUsMTI4LDEyNiwyNTUsOTEsMjIyLDIxNSwyNTUsMTYyLDE1LDE5MSwwLDg2LDI0MCw3MywwLDEzNSwxODUsODEsMjU0LDQ0LDI0MSwxNjMsMCwyMTIsMjE5LDIxMCwyNTUsMTEyLDE2MiwxNTUsMCwyMDcsMTAxLDExOCwwLDE2OCw3Miw1NiwyNTUsMTk2LDUsNTIsMCw3MiwxNzIsMjQyLDI1NSwxMjYsMjIsMTU3LDI1NSwxNDYsOTYsNTksMjU1LDE2MiwxMjEsMTUyLDI1NCwxNDAsMTYsOTUsMCwxOTUsMjU0LDIwMCwyNTQsODIsMTUwLDE2MiwwLDExOSw0MywxNDUsMjU0LDIwNCwxNzIsNzgsMjU1LDE2NiwyMjQsMTU5LDAsMTA0LDE5LDIzNywyNTUsMjQ1LDEyNiwyMDgsMjU1LDIyNiw1OSwyMTMsMCwxMTcsMjE3LDE5NywwLDE1Miw3MiwyMzcsMCwyMjAsMzEsMjMsMjU0LDE0LDkwLDIzMSwyNTUsMTg4LDIxMiw2NCwxLDYwLDEwMSwyNDYsMjU1LDg1LDI0LDg2LDAsMSwxNzcsMTA5LDAsMTQ2LDgzLDMyLDEsNzUsMTgyLDE5MiwwLDExOSwyNDEsMjI0LDAsMTg1LDIzNywyNywyNTUsMTg0LDEwMSw4MiwxLDIzNSwzNyw3NywyNTUsMjUzLDEzNCwxOSwwLDIzMiwyNDYsMTIyLDAsNjAsMTA2LDE3OSwwLDE5NSwxMSwxMiwwLDEwOSw2NiwyMzUsMSwxMjUsMTEzLDU5LDAsNjEsNDAsMTY0LDAsMTc1LDEwNCwyNDAsMCwyLDQ3LDE4NywyNTUsNTAsMTIsMTQxLDAsMTk0LDEzOSwxODEsMjU1LDEzNSwyNTAsMTA0LDAsOTcsOTIsMjIyLDI1NSwyMTcsMTQ5LDIwMSwyNTUsMjAzLDI0MSwxMTgsMjU1LDc5LDE1MSw2NywwLDEyMiwxNDIsMjE4LDI1NSwxNDksMjQ1LDIzOSwwLDEzOCw0MiwyMDAsMjU0LDgwLDM3LDk3LDI1NSwxMjQsMTEyLDE2NywyNTUsMzYsMTM4LDg3LDI1NSwxMzAsMjksMTQ3LDI1NSwyNDEsODcsNzgsMjU1LDIwNCw5NywxOSwxLDE3NywyMDksMjIsMjU1LDI0NywyMjcsMTI3LDI1NCw5OSwxMTksODMsMjU1LDIxMiwyNSwxOTgsMSwxNiwxNzksMTc5LDAsMTQ1LDc3LDE3MiwyNTQsODksMTUzLDE0LDI1NSwyMTgsMTg5LDE2NywwLDEwNywyMzMsNTksMjU1LDM1LDMzLDI0MywyNTQsNDQsMTEyLDExMiwyNTUsMTYxLDEyNyw3OSwxLDIwNCwxNzUsMTAsMCw0MCwyMSwxMzgsMjU0LDEwNCwxMTYsMjI4LDAsMTk5LDk1LDEzNywyNTUsMTMzLDE5MCwxNjgsMjU1LDE0NiwxNjUsMjM0LDEsMTgzLDk5LDM5LDAsMTgzLDIyMCw1NCwyNTQsMjU1LDIyMiwxMzMsMCwxNjIsMjE5LDEyMSwyNTQsNjMsMjM5LDYsMCwyMjUsMTAyLDU0LDI1NSwyNTEsMTgsMjQ2LDAsNCwzNCwxMjksMSwxMzUsMzYsMTMxLDAsMjA2LDUwLDU5LDEsMTUsOTcsMTgzLDAsMTcxLDIxNiwxMzUsMjU1LDEwMSwxNTIsNDMsMjU1LDE1MCwyNTEsOTEsMCwzOCwxNDUsOTUsMCwzNCwyMDQsMzgsMjU0LDE3OCwxNDAsODMsMjU1LDI1LDEyOSwyNDMsMjU1LDc2LDE0NCwzNywwLDEwNiwzNiwyNiwyNTQsMTE4LDE0NCwxNzIsMjU1LDY4LDE4NiwyMjksMjU1LDEwNywxNjEsMjEzLDI1NSw0NiwxNjMsNjgsMjU1LDE0OSwxNzAsMjUzLDAsMTg3LDE3LDE1LDAsMjE4LDE2MCwxNjUsMjU1LDE3MSwzNSwyNDYsMSw5NiwxMywxOSwwLDE2NSwyMDMsMTE3LDAsMjE0LDEwNywxOTIsMjU1LDI0NCwxMjMsMTc3LDEsMTAwLDMsMTA0LDAsMTc4LDI0Miw5NywyNTUsMjUxLDc2LDEzMCwyNTUsMjExLDc3LDQyLDEsMjUwLDc5LDcwLDI1NSw2MywyNDQsODAsMSwxMDUsMTAxLDI0NiwwLDYxLDEzNiw1OCwxLDIzOCw5MSwyMTMsMCwxNCw1OSw5OCwyNTUsMTY3LDg0LDc3LDAsMTcsMTMyLDQ2LDI1NCw1NywxNzUsMTk3LDI1NSwxODUsNjIsMTg0LDAsNzYsNjQsMjA3LDAsMTcyLDE3NSwyMDgsMjU0LDE3NSw3NCwzNywwLDEzOCwyNywyMTEsMjU0LDE0OCwxMjUsMTk0LDAsMTAsODksODEsMCwxNjgsMjAzLDEwMSwyNTUsNDMsMjEzLDIwOSwxLDIzNSwyNDUsNTQsMCwzMCwzNSwyMjYsMjU1LDksMTI2LDcwLDAsMjI2LDEyNSw5NCwyNTQsMTU2LDExNywyMCwyNTUsNTcsMjQ4LDExMiwxLDIzMCw0OCw2NCwyNTUsMTY0LDkyLDE2NiwxLDIyNCwyMTQsMjMwLDI1NSwzNiwxMjAsMTQzLDAsNTUsOCw0MywyNTUsMjUxLDEsMjQ1LDEsMTA2LDk4LDE2NSwwLDc0LDEwNywxMDYsMjU0LDUzLDQsNTQsMjU1LDkwLDE3OCwxNTAsMSwzLDEyMCwxMjMsMjU1LDI0NCw1LDg5LDEsMTE0LDI1MCw2MSwyNTUsMjU0LDE1Myw4MiwxLDc3LDE1LDE3LDAsNTcsMjM4LDkwLDEsOTUsMjIzLDIzMCwwLDIzNiw1Miw0NywyNTQsMTAzLDE0OCwxNjQsMjU1LDEyMSwyMDcsMzYsMSwxOCwxNiwxODUsMjU1LDc1LDIwLDc0LDAsMTg3LDExLDEwMSwwLDQ2LDQ4LDEyOSwyNTUsMjIsMjM5LDIxMCwyNTUsNzcsMjM2LDEyOSwyNTUsMTExLDc3LDIwNCwyNTUsNjEsNzIsOTcsMjU1LDE5OSwyMTcsMjUxLDI1NSw0MiwyMTUsMjA0LDAsMTMzLDE0NSwyMDEsMjU1LDU3LDIzMCwxNDYsMSwyMzUsMTAwLDE5OCwwLDE0Niw3MywzNSwyNTQsMTA4LDE5OCwyMCwyNTUsMTgyLDc5LDIxMCwyNTUsODIsMTAzLDEzNiwwLDI0NiwxMDgsMTc2LDAsMzQsMTcsNjAsMjU1LDE5LDc0LDExNCwyNTQsMTY4LDE3MCw3OCwyNTUsMTU3LDIzOSwyMCwyNTUsMTQ5LDQxLDE2OCwwLDU4LDEyMSwyOCwwLDc5LDE3OSwxMzQsMjU1LDIzMSwxMjEsMTM1LDI1NSwxNzQsMjA5LDk4LDI1NSwyNDMsMTIyLDE5MCwwLDE3MSwxNjYsMjA1LDAsMjEyLDExNiw0OCwwLDI5LDEwOCw2NiwyNTUsMTYyLDIyMiwxODIsMSwxNCwxMTksMjEsMCwyMTMsMzksMjQ5LDI1NSwyNTQsMjIzLDIyOCwyNTUsMTgzLDE2NSwxOTgsMCwxMzMsMTkwLDQ4LDAsMTI0LDIwOCwxMDksMjU1LDExOSwxNzUsODUsMjU1LDksMjA5LDEyMSwxLDQ4LDE3MSwxODksMjU1LDE5NSw3MSwxMzQsMSwxMzYsMjE5LDUxLDI1NSwxODIsOTEsMTQxLDI1NCw0OSwxNTksNzIsMCwzNSwxMTgsMjQ1LDI1NSwxMTIsMTg2LDIyNywyNTUsNTksMTM3LDMxLDAsMTM3LDQ0LDE2MywwLDExNCwxMDMsNjAsMjU0LDgsMjEzLDE1MCwwLDE2MiwxMCwxMTMsMjU1LDE5NCwxMDQsNzIsMCwyMjAsMTMxLDExNiwyNTUsMTc4LDc5LDkyLDAsMjAzLDI1MCwyMTMsMjU0LDkzLDE5MywxODksMjU1LDEzMCwyNTUsMzQsMjU0LDIxMiwxODgsMTUxLDAsMTM2LDE3LDIwLDI1NSwyMCwxMDEsODMsMjU1LDIxMiwyMDYsMTY2LDAsMjI5LDIzOCw3MywyNTUsMTUxLDc0LDMsMjU1LDE2OCw4NywyMTUsMCwxNTUsMTg4LDEzMywyNTUsMTY2LDEyOSw3MywwLDI0MCw3OSwxMzMsMjU1LDE3OCwyMTEsODEsMjU1LDIwMyw3MiwxNjMsMjU0LDE5MywxNjgsMTY1LDAsMTQsMTY0LDE5OSwyNTQsMzAsMjU1LDIwNCwwLDY1LDcyLDkxLDEsMTY2LDc0LDEwMiwyNTUsMjAwLDQyLDAsMjU1LDE5NCwxMTMsMjI3LDI1NSw2NiwyMywyMDgsMCwyMjksMjE2LDEwMCwyNTUsMjQsMjM5LDI2LDAsMTAsMjMzLDYyLDI1NSwxMjMsMTAsMTc4LDEsMjYsMzYsMTc0LDI1NSwxMTksMjE5LDE5OSwxLDQ1LDE2MywxOTAsMCwxNiwxNjgsNDIsMCwxNjYsNTcsMTk4LDI1NSwyOCwyNiwyNiwwLDEyNiwxNjUsMjMxLDAsMjUxLDEwOCwxMDAsMjU1LDYxLDIyOSwxMjEsMjU1LDU4LDExOCwxMzgsMCw3NiwyMDcsMTcsMCwxMywzNCwxMTIsMjU0LDg5LDE2LDE2OCwwLDM3LDIwOCwxMDUsMjU1LDM1LDIwMSwyMTUsMjU1LDQwLDEwNiwxMDEsMjU0LDYsMjM5LDExNCwwLDQwLDEwMywyMjYsMjU0LDI0NiwxMjcsMTEwLDI1NSw2MywxNjcsNTgsMCwxMzIsMjQwLDE0MiwwLDUsMTU4LDg4LDI1NSwxMjksNzMsMTU4LDI1NSw5NCw4OSwxNDYsMCwyMzAsNTQsMTQ2LDAsOCw0NSwxNzMsMCw3OSwxNjksMSwwLDExNSwxODYsMjQ3LDAsODQsNjQsMTMxLDAsNjcsMjI0LDI1MywyNTUsMjA3LDE4OSw2NCwwLDE1NCwyOCw4MSwxLDQ1LDE4NCw1NCwyNTUsODcsMjEyLDIyNCwyNTUsMCw5Niw3MywyNTUsMTI5LDMzLDIzNSwxLDUyLDY2LDgwLDI1NSwyNTEsMTc0LDE1NSwyNTUsNCwxNzksMzcsMCwyMzQsMTY0LDkzLDI1NCw5MywxNzUsMjUzLDAsMTk4LDY5LDg3LDI1NSwyMjQsMTA2LDQ2LDAsOTksMjksMjEwLDAsNjIsMTg4LDExNCwyNTUsNDQsMjM0LDgsMCwxNjksMTc1LDI0NywyNTUsMjMsMTA5LDEzNywyNTUsMjI5LDE4MiwzOSwwLDE5MiwxNjUsOTQsMjU0LDI0NSwxMDEsMjE3LDAsMTkxLDg4LDk2LDAsMTk2LDk0LDk5LDI1NSwxMDYsMjM4LDExLDI1NCw1MywxMjYsMjQzLDAsOTQsMSwxMDEsMjU1LDQ2LDE0NywyLDAsMjAxLDEyNCwxMjQsMjU1LDE0MSwxMiwyMTgsMCwxMywxNjYsMTU3LDEsNDgsMjUxLDIzNywyNTUsMTU1LDI1MCwxMjQsMjU1LDEwNiwxNDgsMTQ2LDI1NSwxODIsMTMsMjAyLDAsMjgsNjEsMTY3LDAsMjE3LDE1Miw4LDI1NCwyMjAsMTMwLDQ1LDI1NSwyMDAsMjMwLDI1NSwxLDU1LDY1LDg3LDI1NSw5MywxOTEsOTcsMjU0LDExNCwyNTEsMTQsMCwzMiwxMDUsOTIsMSwyNiwyMDcsMTQxLDAsMjQsMjA3LDEzLDI1NCwyMSw1MCw0OCwyNTUsMTg2LDE0OCwxMTYsMjU1LDIxMSw0MywyMjUsMCwzNywzNCwxNjIsMjU0LDE2NCwyMTAsNDIsMjU1LDY4LDIzLDk2LDI1NSwxODIsMjE0LDgsMjU1LDI0NSwxMTcsMTM3LDI1NSw2NiwxOTUsNTAsMCw3NSwxMiw4MywyNTQsODAsMTQwLDE2NCwwLDksMTY1LDM2LDEsMjI4LDExMCwyMjcsMCwyNDEsMTcsOTAsMSwyNSw1MiwyMTIsMCw2LDIyMywxMiwyNTUsMTM5LDI0Myw1NywwLDEyLDExMyw3NSwxLDI0NiwxODMsMTkxLDI1NSwyMTMsMTkxLDY5LDI1NSwyMzAsMTUsMTQyLDAsMSwxOTUsMTk2LDI1NSwxMzgsMTcxLDQ3LDI1NSw2NCw2MywxMDYsMSwxNiwxNjksMjE0LDI1NSwyMDcsMTc0LDU2LDEsODgsNzMsMTMzLDI1NSwxODIsMTMzLDE0MCwwLDE3NywxNCwyNSwyNTUsMTQ3LDE4NCw1MywyNTUsMTAsMjI3LDE2MSwyNTUsMTIwLDIxNiwyNDQsMjU1LDczLDc3LDIzMywwLDE1NywyMzgsMTM5LDEsNTksNjUsMjMzLDAsNzAsMjUxLDIxNiwxLDQxLDE4NCwxNTMsMjU1LDMyLDIwMywxMTIsMCwxNDYsMTQ3LDI1MywwLDg3LDEwMSwxMDksMSw0NCw4MiwxMzMsMjU1LDI0NCwxNTAsNTMsMjU1LDk0LDE1MiwyMzIsMjU1LDU5LDkzLDM5LDI1NSw4OCwxNDcsMjIwLDI1NSw3OCw4MSwxMywxLDMyLDQ3LDI1MiwyNTUsMTYwLDE5LDExNCwyNTUsOTMsMTA3LDM5LDI1NSwxMTgsMTYsMjExLDEsMTg1LDExOSwyMDksMjU1LDIyNywyMTksMTI3LDI1NCw4OCwxMDUsMjM2LDI1NSwxNjIsMTEwLDIzLDI1NSwzNiwxNjYsMTEwLDI1NSw5MSwyMzYsMjIxLDI1NSw2NiwyMzQsMTE2LDAsMTExLDE5LDI0NCwyNTQsMTAsMjMzLDI2LDAsMzIsMTgzLDYsMjU0LDIsMTkxLDI0MiwwLDIxOCwxNTYsNTMsMjU0LDQxLDYwLDcwLDI1NSwxNjgsMjM2LDExMSwwLDEyMSwxODUsMTI2LDI1NSwyMzgsMTQyLDIwNywyNTUsNTUsMTI2LDUyLDAsMjIwLDEyOSwyMDgsMjU0LDgwLDIwNCwxNjQsMjU1LDY3LDIzLDE0NCwyNTQsMjE4LDQwLDEwOCwyNTUsMTI3LDIwMiwxNjQsMCwyMDMsMzMsMywyNTUsMiwxNTgsMCwwLDM3LDk2LDE4OCwyNTUsMTkyLDQ5LDc0LDAsMTA5LDQsMCwwLDExMSwxNjcsMTAsMjU0LDkxLDIxOCwxMzUsMjU1LDIwMyw2NiwxNzMsMjU1LDE1MCwxOTQsMjI2LDAsMjAxLDI1Myw2LDI1NSwxNzQsMTAyLDEyMSwwLDIwNSwxOTEsMTEwLDAsNTMsMTk0LDQsMCw4MSw0MCw0NSwyNTQsMzUsMTAyLDE0MywyNTUsMTIsMTA4LDE5OCwyNTUsMTYsMjcsMjMyLDI1NSwyNTIsNzEsMTg2LDEsMTc2LDExMCwxMTQsMCwxNDIsMywxMTcsMSwxMTMsNzcsMTQyLDAsMTksMTU2LDE5NywxLDkyLDQ3LDI1MiwwLDUzLDIzMiwyMiwxLDU0LDE4LDIzNSwwLDQ2LDM1LDE4OSwyNTUsMjM2LDIxMiwxMjksMCwyLDk2LDIwOCwyNTQsMjAwLDIzOCwxOTksMjU1LDU5LDE3NSwxNjQsMjU1LDE0Niw0MywyMzEsMCwxOTQsMjE3LDUyLDI1NSwzLDIyMywxMiwwLDEzOCw1NCwxNzgsMjU0LDg1LDIzNSwyMDcsMCwyMzIsMjA3LDM0LDAsNDksNTIsNTAsMjU1LDE2NiwxMTMsODksMjU1LDEwLDQ1LDIxNiwyNTUsNjIsMTczLDI4LDAsMTExLDE2NSwyNDYsMCwxMTgsMTE1LDkxLDI1NSwxMjgsODQsNjAsMCwxNjcsMTQ0LDIwMywwLDg3LDEzLDI0MywwLDIyLDMwLDIyOCwxLDE3NywxMTMsMTQ2LDI1NSwxMjksMTcwLDIzMCwyNTQsMjUyLDE1MywxMjksMjU1LDE0NSwyMjUsNDMsMCw3MCwyMzEsNSwyNTUsMTIyLDEwNSwxMjYsMjU0LDg2LDI0NiwxNDgsMjU1LDExMCwzNywxNTQsMjU0LDIwOSwzLDkxLDAsNjgsMTQ1LDYyLDAsMjI4LDE2LDE2NSwyNTUsNTUsMjIxLDI0OSwyNTQsMTc4LDIxMCw5MSwwLDgzLDE0NiwyMjYsMjU0LDY5LDE0NiwxODYsMCw5MywyMTAsMTA0LDI1NCwxNiwyNSwxNzMsMCwyMzEsMTg2LDM4LDAsMTg5LDEyMiwxNDAsMjU1LDI1MSwxMywxMTIsMjU1LDEwNSwxMTAsOTMsMCwyNTEsNzIsMTcwLDAsMTkyLDIzLDIyMywyNTUsMjQsMywyMDIsMSwyMjUsOTMsMjI4LDAsMTUzLDE0NywxOTksMjU0LDEwOSwxNzAsMjIsMCwyNDgsMTAxLDI0NiwyNTUsMTc4LDEyNCwxMiwyNTUsMTc4LDI1NCwxMDIsMjU0LDU1LDQsNjUsMCwxMjUsMjE0LDE4MCwwLDE4Myw5NiwxNDcsMCw0NSwxMTcsMjMsMjU0LDEzMiwxOTEsMjQ5LDAsMTQzLDE3NiwyMDMsMjU0LDEzNiwxODMsNTQsMjU1LDE0NiwyMzQsMTc3LDAsMTQ2LDEwMSw4NiwyNTUsNDQsMTIzLDE0MywxLDMzLDIwOSwxNTIsMCwxOTIsOTAsNDEsMjU0LDgzLDE1LDEyNSwyNTUsMjEzLDE3Miw4MiwwLDIxNSwxNjksMTQ0LDAsMTYsMTMsMzQsMCwzMiwyMDksMTAwLDI1NSw4NCwxOCwyNDksMSwxOTcsMTcsMjM2LDI1NSwyMTcsMTg2LDIzMCwwLDQ5LDE2MCwxNzYsMjU1LDExMSwxMTgsOTcsMjU1LDIzNywxMDQsMjM1LDAsNzksNTksOTIsMjU0LDY5LDI0OSwxMSwyNTUsMzUsMTcyLDc0LDEsMTksMTE4LDY4LDAsMjIyLDEyNCwxNjUsMjU1LDE4MCw2NiwzNSwyNTUsODYsMTc0LDI0NiwwLDQzLDc0LDExMSwyNTUsMTI2LDE0NCw4NiwyNTUsMjI4LDIzNCw5MSwwLDI0MiwyMTMsMjQsMjU0LDY5LDQ0LDIzNSwyNTUsMjIwLDE4MCwzNSwwLDgsMjQ4LDcsMjU1LDEwMiw0Nyw5MiwyNTUsMjQwLDIwNSwxMDIsMjU1LDExMywyMzAsMTcxLDEsMzEsMTg1LDIwMSwyNTUsMTk0LDI0Niw3MCwyNTUsMTIyLDE3LDE4NywwLDEzNCw3MCwxOTksMjU1LDE0OSwzLDE1MCwyNTUsMTE3LDYzLDEwMywwLDY1LDEwNCwxMjMsMjU1LDIxMiw1NCwxOSwxLDYsMTQxLDg4LDAsODMsMTM0LDI0MywyNTUsMTM2LDUzLDEwMywwLDE2OSwyNywxODAsMCwxNzcsNDksMjQsMCwxMTEsNTQsMTY3LDAsMTk1LDYxLDIxNSwyNTUsMzEsMSwxMDgsMSw2MCw0Miw3MCwwLDE4NSwzLDE2MiwyNTUsMTk0LDE0OSw0MCwyNTUsMjQ2LDEyNywzOCwyNTQsMTkwLDExOSwzOCwyNTUsNjEsMTE5LDgsMSw5NiwxNjEsMjE5LDI1NSw0MiwyMDMsMjIxLDEsMTc3LDI0MiwxNjQsMjU1LDI0NSwxNTksMTAsMCwxMTYsMTk2LDAsMCw1LDkzLDIwNSwyNTQsMTI4LDEyNywxNzksMCwxMjUsMjM3LDI0NiwyNTUsMTQ5LDE2MiwyMTcsMjU1LDg3LDM3LDIwLDI1NCwxNDAsMjM4LDE5MiwwLDksOSwxOTMsMCw5NywxLDIyNiwwLDI5LDM4LDEwLDAsMCwxMzYsNjMsMjU1LDIyOSw3MiwyMTAsMjU0LDM4LDEzNCw5MiwyNTUsNzgsMjE4LDIwOCwxLDEwNCwzNiw4NCwyNTUsMTIsNSwxOTMsMjU1LDI0MiwxNzUsNjEsMjU1LDE5MSwxNjksNDYsMSwxNzksMTQ3LDE0NywyNTUsMTEzLDE5MCwxMzksMjU0LDEyNSwxNzIsMzEsMCwzLDc1LDI1MiwyNTQsMjE1LDM2LDE1LDAsMTkzLDI3LDI0LDEsMjU1LDY5LDE0OSwyNTUsMTEwLDEyOSwxMTgsMCwyMDMsOTMsMjQ5LDAsMTM4LDEzNyw2NCwyNTQsMzgsNzAsNiwwLDE1MywxMTYsMjIyLDAsMTYxLDc0LDEyMywwLDE5Myw5OSw3OSwyNTUsMTE4LDU5LDk0LDI1NSw2MSwxMiw0MywxLDE0NiwxNzcsMTU3LDAsNDYsMTQ3LDE5MSwwLDE2LDI1NSwzOCwwLDExLDUxLDMxLDEsNjAsNTgsOTgsMjU1LDExMSwxOTQsNzcsMSwxNTQsOTEsMjQ0LDAsMTQwLDQwLDE0NCwxLDE3MywxMCwyNTEsMCwyMDMsMjA5LDUwLDI1NCwxMDgsMTMwLDc4LDAsMjI4LDE4MCw5MCwwLDE3NCw3LDI1MCwwLDMxLDE3NCw2MCwwLDQxLDE3MSwzMCwwLDExNiw5OSw4MiwyNTUsMTE4LDE5MywxMzksMjU1LDE4NywxNzMsMTk4LDI1NCwyMTgsMTExLDU2LDAsMTg1LDEyMywyMTYsMCwyNDksMTU4LDUyLDAsNTIsMTgwLDkzLDI1NSwyMDEsOSw5MSwyNTUsNTYsNDUsMTY2LDI1NCwxMzIsMTU1LDIwMywyNTUsNTgsMjMyLDExMCwwLDUyLDIxMSw4OSwyNTUsMjUzLDAsMTYyLDEsOSw4NywxODMsMCwxNDUsMTM2LDQ0LDEsOTQsMTIyLDI0NSwwLDg1LDE4OCwxNzEsMSwxNDcsOTIsMTk4LDAsMCw4LDEwNCwwLDMwLDk1LDE3NCwwLDIyMSwyMzAsNTIsMSwyNDcsMjQ3LDIzNSwyNTUsMTM3LDE3NCw1MywyNTUsMzUsMjEsMjA0LDI1NSw3MSwyMjcsMjE0LDEsMjMyLDgyLDE5NCwwLDExLDQ4LDIyNywyNTUsMTcwLDczLDE4NCwyNTUsMTk4LDI1MSwyNTIsMjU0LDQ0LDExMiwzNCwwLDEzMSwxMDEsMTMxLDI1NSw3MiwxNjgsMTg3LDAsMTMyLDEzNSwxMjUsMjU1LDEzOCwxMDQsOTcsMjU1LDIzOCwxODQsMTY4LDI1NSwyNDMsMTA0LDg0LDI1NSwxMzUsMjE2LDIyNiwyNTUsMTM5LDE0NCwyMzcsMCwxODgsMTM3LDE1MCwxLDgwLDU2LDE0MCwyNTUsODYsMTY5LDE2NywyNTUsMTk0LDc4LDI1LDI1NSwyMjAsMTcsMTgwLDI1NSwxNywxMywxOTMsMCwxMTcsMTM3LDIxMiwyNTUsMTQxLDIyNCwxNTEsMCw0OSwyNDQsMTc1LDAsMTkzLDk5LDE3NSwyNTUsMTksOTksMTU0LDEsMjU1LDY1LDYyLDI1NSwxNTYsMjEwLDU1LDI1NSwyNDIsMjQ0LDMsMjU1LDI1MCwxNCwxNDksMCwxNTgsODgsMjE3LDI1NSwxNTcsMjA3LDEzNCwyNTQsMjUxLDIzMiwyOCwwLDQ2LDE1NiwyNTEsMjU1LDE3MSw1NiwxODQsMjU1LDIzOSw1MSwyMzQsMCwxNDIsMTM4LDEzMSwyNTUsMjUsMjU0LDI0MywxLDEwLDIwMSwxOTQsMCw2Myw5Nyw3NSwwLDIxMCwyMzksMTYyLDAsMTkyLDIwMCwzMSwxLDExNywyMTQsMjQzLDAsMjQsNzEsMjIyLDI1NCw1NCw0MCwyMzIsMjU1LDc2LDE4MywxMTEsMjU0LDE0NCwxNCw4NywyNTUsMjE0LDc5LDEzNiwyNTUsMjE2LDE5NiwyMTIsMCwxMzIsMjcsMTQwLDI1NCwxMzEsNSwyNTMsMCwxMjQsMTA4LDE5LDI1NSwyOCwyMTUsNzUsMCw3NiwyMjIsNTUsMjU0LDIzMywxODIsNjMsMCw2OCwxNzEsMTkxLDI1NCw1MiwxMTEsMjIyLDI1NSwxMCwxMDUsNzcsMjU1LDgwLDE3MCwyMzUsMCwxNDMsMjQsODgsMjU1LDQ1LDIzMSwxMjEsMCwxNDgsMTI5LDIyNCwxLDYxLDI0Niw4NCwwLDI1Myw0NiwyMTksMjU1LDIzOSw3NiwzMywwLDQ5LDE0OCwxOCwyNTQsMjMwLDM3LDY5LDAsNjcsMTM0LDIyLDI1NCwxNDIsMTU1LDk0LDAsMzEsMTU3LDIxMSwyNTQsMjEzLDQyLDMwLDI1NSw0LDIyOCwyNDcsMjU0LDI1MiwxNzYsMTMsMjU1LDM5LDAsMzEsMjU0LDI0MSwyNDQsMjU1LDI1NSwxNzAsNDUsMTAsMjU0LDI1MywyMjIsMjQ5LDAsMjIyLDExNCwxMzIsMCwyNTUsNDcsNiwyNTUsMTgwLDE2MywxNzksMSw4NCw5NCwxNTEsMjU1LDg5LDIwOSw4MiwyNTQsMjI5LDUyLDE2OSwyNTUsMjEzLDIzNiwwLDEsMjE0LDU2LDIyOCwyNTUsMTM1LDExOSwxNTEsMjU1LDExMiwyMDEsMTkzLDAsODMsMTYwLDUzLDI1NCw2LDE1MSw2NiwwLDE4LDE2MiwxNywwLDIzMyw5Nyw5MSwwLDEzMSw1LDc4LDEsMTgxLDEyMCw1MywyNTUsMTE3LDk1LDYzLDI1NSwyMzcsMTE3LDE4NSwwLDE5MSwxMjYsMTM2LDI1NSwxNDQsMTE5LDIzMywwLDE4Myw1Nyw5NywxLDQ3LDIwMSwxODcsMjU1LDE2NywxNjUsMTE5LDEsNDUsMTAwLDEyNiwwLDIxLDk4LDYsMjU0LDE0NSwxNTAsOTUsMjU1LDEyMCw1NCwxNTIsMCwyMDksOTgsMTA0LDAsMTQzLDExMSwzMCwyNTQsMTg0LDE0OCwyNDksMCwyMzUsMjE2LDQ2LDAsMjQ4LDIwMiwxNDgsMjU1LDU3LDk1LDIyLDAsMjQyLDIyNSwxNjMsMCwyMzMsMjQ3LDIzMiwyNTUsNzEsMTcxLDE5LDI1NSwxMDMsMjQ0LDQ5LDI1NSw4NCwxMDMsOTMsMjU1LDY4LDEyMSwyNDQsMSw4MiwyMjQsMTMsMCw0MSw3OSw0MywyNTUsMjQ5LDIwNiwxNjcsMjU1LDIxNSw1MiwyMSwyNTQsMTkyLDMyLDIyLDI1NSwyNDcsMTExLDYwLDAsMTAxLDc0LDM4LDI1NSwyMiw5MSw4NCwyNTQsMjksMjgsMTMsMjU1LDE5OCwyMzEsMjE1LDI1NCwyNDQsMTU0LDIwMCwwLDIyMywxMzcsMjM3LDAsMjExLDEzMiwxNCwwLDk1LDY0LDIwNiwyNTUsMTcsNjIsMjQ3LDI1NSwyMzMsMTMxLDEyMSwxLDkzLDIzLDc3LDAsMjA1LDIwNCw1MiwyNTQsODEsMTg5LDEzNiwwLDE4MCwyMTksMTM4LDEsMTQzLDE4LDk0LDAsMjA0LDQzLDE0MCwyNTQsMTg4LDE3NSwyMTksMCwxMTEsOTgsMTQzLDI1NSwxNTEsNjMsMTYyLDI1NSwyMTEsNTAsNzEsMjU0LDE5LDE0Niw1MywwLDE0Niw0NSw4MywyNTQsMTc4LDgyLDIzOCwyNTUsMTYsMTMzLDg0LDI1NSwyMjYsMTk4LDkzLDI1NSwyMDEsOTcsMjAsMjU1LDEyMCwxMTgsMzUsMjU1LDExNCw1MCwyMzEsMjU1LDE2MiwyMjksMTU2LDI1NSwyMTEsMjYsMTIsMCwxMTQsMzksMTE1LDI1NSwyMDYsMjEyLDEzNCwwLDE5NywyMTcsMTYwLDI1NSwxMTYsMTI5LDk0LDI1NCwxOTksMjE1LDIxOSwyNTUsNzUsMjIzLDI0OSwxLDI1MywxMTYsMTgxLDI1NSwyMzIsMjE1LDEwNCwyNTUsMjI4LDEzMCwyNDYsMjU1LDE4NSwxMTcsODYsMCwxNCw1LDgsMCwyMzksMjksNjEsMSwyMzcsODcsMTMzLDI1NSwxMjUsMTQ2LDEzNywyNTQsMjA0LDE2OCwyMjMsMCw0NiwxNjgsMjQ1LDAsMTU0LDEwNSwyMiwwLDIyMCwyMTIsMTYxLDI1NSwxMDcsNjksMjQsMjU1LDEzNywyMTgsMTgxLDI1NSwyNDEsODQsMTk4LDI1NSwxMzAsMTIyLDIxMSwyNTUsMTQxLDgsMTUzLDI1NSwxOTAsMTc3LDExOCwwLDk2LDg5LDE3OCwwLDI1NSwxNiw0OCwyNTQsMTIyLDk2LDEwNSwyNTUsMTE3LDU0LDIzMiwyNTUsMzQsMTI2LDEwNSwyNTUsMjA0LDY3LDE2NiwwLDIzMiw1MiwxMzgsMjU1LDIxMSwxNDcsMTIsMCwyNSw1NCw3LDAsNDQsMTUsMjE1LDI1NCw1MSwyMzYsNDUsMCwxOTAsNjgsMTI5LDEsMTA2LDE0NywyMjUsMCwyOCw5Myw0NSwyNTQsMjM2LDE0MSwxNSwyNTUsMTcsNjEsMTYxLDAsMjIwLDExNSwxOTIsMCwyMzYsMTQ1LDI0LDI1NCwxMTEsMTY4LDE2OSwwLDIyNCw1OCw2MywyNTUsMTI3LDE2NCwxODgsMCw4MiwyMzQsNzUsMSwyMjQsMTU4LDEzNCwwLDIwOSw2OCwxMTAsMSwyMTcsMTY2LDIxNywwLDcwLDIyNSwxNjYsMSwxODcsMTkzLDE0MywyNTUsMTYsNyw4OCwyNTUsMTAsMjA1LDE0MCwwLDExNywxOTIsMTU2LDEsMTcsNTYsMzgsMCwyNywxMjQsMTA4LDEsMTcxLDIxNSw1NSwyNTUsOTUsMjUzLDIxMiwwLDE1NSwxMzUsMTY4LDI1NSwyNDYsMTc4LDE1MywyNTQsMTU0LDY4LDc0LDAsMjMyLDYxLDk2LDI1NCwxMDUsMTMyLDU5LDAsMzMsNzYsMTk5LDEsMTg5LDE3NiwxMzAsMjU1LDksMTA0LDI1LDI1NCw3NSwxOTgsMTAyLDI1NSwyMzMsMSwxMTIsMCwxMDgsMjIwLDIwLDI1NSwxMTQsMjMwLDcwLDAsMTQwLDE5NCwxMzMsMjU1LDU3LDE1OCwxNjQsMjU0LDE0Niw2LDgwLDI1NSwxNjksMTk2LDk3LDEsODUsMTgzLDEzMCwwLDcwLDE1OCwyMjIsMSw1OSwyMzcsMjM0LDI1NSw5NiwyNSwyNiwyNTUsMjMyLDE3NSw5NywyNTUsMTEsMTIxLDI0OCwyNTQsODgsMzUsMTk0LDAsMjE5LDE4MCwyNTIsMjU0LDc0LDgsMjI3LDAsMTk1LDIyNyw3MywxLDE4NCwxMTAsMTYxLDI1NSw0OSwyMzMsMTY0LDEsMTI4LDUzLDQ3LDAsODIsMTQsMTIxLDI1NSwxOTMsMTkwLDU4LDAsNDgsMTc0LDExNywyNTUsMTMyLDIzLDMyLDAsNDAsMTAsMTM0LDEsMjIsNTEsMjUsMjU1LDI0MCwxMSwxNzYsMjU1LDExMCw1NywxNDYsMCwxMTcsMTQzLDIzOSwxLDE1NywxMDEsMTE4LDI1NSw1NCw4NCw3NiwwLDIwNSwxODQsMTgsMjU1LDQ3LDQsNzIsMjU1LDc4LDExMiw4NSwyNTUsMTkzLDUwLDY2LDEsOTMsMTYsNTIsMjU1LDgsMTA1LDEzNCwwLDEyLDEwOSw3MiwyNTUsNTgsMTU2LDI1MSwwLDE0NCwzNSwyMDQsMCw0NCwxNjAsMTE3LDI1NCw1MCwxMDcsMTk0LDAsMSw2OCwxNjUsMjU1LDExMSwxMTAsMTYyLDAsMTU4LDgzLDQwLDI1NCw3NiwyMTQsMjM0LDAsNTgsMjE2LDIwNSwyNTUsMTcxLDk2LDE0NywyNTUsNDAsMjI3LDExNCwxLDE3NiwyMjcsMjQxLDAsNzAsMjQ5LDE4MywxLDEzNiw4NCwxMzksMjU1LDYwLDEyMiwyNDcsMjU0LDE0Myw5LDExNywyNTUsMTc3LDE3NCwxMzcsMjU0LDczLDI0NywxNDMsMCwyMzYsMTg1LDEyNiwyNTUsNjIsMjUsMjQ3LDI1NSw0NSw2NCw1NiwyNTUsMTYxLDI0NCw2LDAsMzQsNTcsNTYsMSwxMDUsMjAyLDgzLDAsMTI4LDE0NywyMDgsMCw2LDEwMywxMCwyNTUsNzQsMTM4LDY1LDI1NSw5Nyw4MCwxMDAsMjU1LDIxNCwxNzQsMzMsMjU1LDUwLDEzNCw3NCwyNTUsMTEwLDE1MSwxMzAsMjU0LDExMSw4NCwxNzIsMCw4NCwxOTksNzUsMjU0LDI0OCw1OSwxMTIsMjU1LDgsMjE2LDE3OCwxLDksMTgzLDk1LDAsMjM4LDI3LDgsMjU0LDE3MCwyMDUsMjIwLDAsMTk1LDIyOSwxMzUsMCw5OCw3NiwyMzcsMjU1LDIyNiw5MSwyNiwxLDgyLDIxOSwzOSwyNTUsMjI1LDE5MCwxOTksMSwyMTcsMjAwLDEyMSwyNTUsODEsMTc5LDgsMjU1LDE0MCw2NSwyMDYsMCwxNzgsMjA3LDg3LDI1NCwyNTAsMjUyLDQ2LDI1NSwxMDQsODksMTEwLDEsMjUzLDE4OSwxNTgsMjU1LDE0NCwyMTQsMTU4LDI1NSwxNjAsMjQ1LDU0LDI1NSw1MywxODMsOTIsMSwyMSwyMDAsMTk0LDI1NSwxNDYsMzMsMTEzLDEsMjA5LDEsMjU1LDAsMjM1LDEwNiw0MywyNTUsMTY3LDUyLDIzMiwwLDE1NywyMjksMjIxLDAsNTEsMzAsMjUsMCwyNTAsMjIxLDI3LDEsNjUsMTQ3LDg3LDI1NSw3OSwxMjMsMTk2LDAsNjUsMTk2LDIyMywyNTUsNzYsNDQsMTcsMSw4NSwyNDEsNjgsMCwyMDIsMTgzLDI0OSwyNTUsNjUsMjEyLDIxMiwyNTUsOSwzMywxNTQsMSw3MSw1OSw4MCwwLDE3NSwxOTQsNTksMjU1LDE0MSw3Miw5LDAsMTAwLDE2MCwyNDQsMCwyMzAsMjA4LDU2LDAsNTksMjUsNzUsMjU0LDgwLDE5NCwxOTQsMCwxOCwzLDIwMCwyNTQsMTYwLDE1OSwxMTUsMCwxMzIsMTQzLDI0NywxLDExMSw5Myw1NywyNTUsNTgsMjM3LDExLDEsMTM0LDIyMiwxMzUsMjU1LDEyMiwxNjMsMTA4LDEsMTIzLDQzLDE5MCwyNTUsMjUxLDE4OSwyMDYsMjU0LDgwLDE4Miw3MiwyNTUsMjA4LDI0NiwyMjQsMSwxNyw2MCw5LDAsMTYxLDIwNywzOCwwLDE0MSwxMDksOTEsMCwyMTYsMTUsMjExLDI1NSwxMzYsNzgsMTEwLDAsOTgsMTYzLDEwNCwyNTUsMjEsODAsMTIxLDI1NSwxNzMsMTc4LDE4MywxLDEyNywxNDMsNCwwLDEwNCw2MCw4MiwyNTQsMjE0LDE2LDEzLDI1NSw5NiwyMzgsMzMsMSwxNTgsMTQ4LDIzMCwyNTUsMTI3LDEyOSw2MiwyNTUsNTEsMjU1LDIxMCwyNTUsNjIsMTQxLDIzNiwyNTQsMTU3LDU1LDIyNCwyNTUsMTE0LDM5LDI0NCwwLDE5MiwxODgsMjUwLDI1NSwyMjgsNzYsNTMsMCw5OCw4NCw4MSwyNTUsMTczLDIwMyw2MSwyNTQsMTQ3LDUwLDU1LDI1NSwyMDQsMjM1LDE5MSwwLDUyLDE5NywyNDQsMCw4OCw0MywyMTEsMjU0LDI3LDE5MSwxMTksMCwxODgsMjMxLDE1NCwwLDY2LDgxLDE2MSwwLDkyLDE5MywxNjAsMSwyNTAsMjI3LDEyMCwwLDEyMyw1NSwyMjYsMCwxODQsMTcsNzIsMCwxMzMsMTY4LDEwLDI1NCwyMiwxMzUsMTU2LDI1NSw0MSwyNSwxMDMsMjU1LDQ4LDIwMiw1OCwwLDE4NiwxNDksODEsMjU1LDE4OCwxMzQsMjM5LDAsMjM1LDE4MSwxODksMjU0LDIxNywxMzksMTg4LDI1NSw3NCw0OCw4MiwwLDQ2LDIxOCwyMjksMCwxODksMjUzLDI1MSwwLDUwLDIyOSwxMiwyNTUsMjExLDE0MSwxOTEsMSwxMjgsMjQ0LDI1LDI1NSwxNjksMjMxLDEyMiwyNTQsODYsNDcsMTg5LDI1NSwxMzIsMTgzLDIzLDI1NSwzNywxNzgsMTUwLDI1NSw1MSwxMzcsMjUzLDAsMjAwLDc4LDMxLDAsMjIsMTA1LDUwLDAsMTMwLDYwLDAsMCwxMzIsMTYzLDkxLDI1NCwyMywyMzEsMTg3LDAsMTkyLDc5LDIzOSwwLDE1NywxMDIsMTY0LDI1NSwxOTIsODIsMjAsMSwyNCwxODEsMTAzLDI1NSwyNDAsOSwyMzQsMCwxLDEyMywxNjQsMjU1LDEzMywyMzMsMCwyNTUsMjAyLDI0MiwyNDIsMCw2MCwxODYsMjQ1LDAsMjQxLDE2LDE5OSwyNTUsMjI0LDExNiwxNTgsMjU0LDE5MSwxMjUsOTEsMjU1LDIyNCw4NiwyMDcsMCwxMjEsMzcsMjMxLDI1NSwyMjcsOSwxOTgsMjU1LDE1LDE1MywyMzksMjU1LDEyMSwyMzIsMjE3LDI1NCw3NSwxMTIsODIsMCw5NSwxMiw1NywyNTQsNTEsMjE0LDEwNSwyNTUsMTQ4LDIyMCw5NywxLDE5OSw5OCwzNiwwLDE1NiwyMDksMTIsMjU0LDEwLDIxMiw1MiwwLDIxNywxODAsNTUsMjU0LDIxMiwxNzAsMjMyLDI1NSwyMTYsMjAsODQsMjU1LDE1NywyNTAsMTM1LDAsMTU3LDk5LDEyNywyNTQsMSwyMDYsNDEsMCwxNDksMzYsNzAsMSw1NCwxOTYsMjAxLDI1NSw4NywxMTYsMCwyNTQsMjM1LDE3MSwxNTAsMCwyNywxNjMsMjM0LDAsMjAyLDEzNSwxODAsMCwyMDgsOTUsMCwyNTQsMTIzLDE1Niw5MywwLDE4Myw2Miw3NSwwLDEzNywyMzUsMTgyLDAsMjA0LDIyNSwyNTUsMjU1LDIxNCwxMzksMjEwLDI1NSwyLDExNSw4LDI1NSwyOSwxMiwxMTEsMCw1MiwxNTYsMSwwLDI1MywyMSwyNTEsMjU1LDM3LDE2NSwzMSwyNTQsMTIsMTMwLDIxMSwwLDEwNiwxOCw1MywyNTQsNDIsOTksMTU0LDAsMTQsMjE3LDYxLDI1NCwyMTYsMTEsOTIsMjU1LDIwMCwxOTcsMTEyLDI1NCwxNDcsMzgsMTk5LDAsMzYsMjUyLDEyMCwyNTQsMTA3LDE2OSw3NywwLDEsMTIzLDE1OSwyNTUsMjA3LDc1LDEwMiwwLDE2MywxNzUsMTk2LDAsNDQsMSwyNDAsMCwxMjAsMTg2LDE3NiwyNTQsMTMsOTgsNzYsMjU1LDIzNywxMjQsMjQxLDI1NSwyMzIsMTQ2LDE4OCwyNTUsMjAwLDk2LDIyNCwwLDIwNCwzMSw0MSwwLDIwOCwyMDAsMTMsMCwyMSwyMjUsOTYsMjU1LDE3NSwxNTYsMTk2LDAsMjQ3LDIwOCwxMjYsMCw2MiwxODQsMjQ0LDI1NCwyLDE3MSw4MSwwLDg1LDExNSwxNTgsMCw1NCw2NCw0NSwyNTUsMTksMTM4LDExNCwwLDEzNSw3MSwyMDUsMCwyMjcsNDcsMTQ3LDEsMjE4LDIzMSw2NiwwLDI1MywyMDksMjgsMCwyNDQsMTUsMTczLDI1NSw2LDE1LDExOCwyNTQsMTYsMTUwLDIwOCwyNTUsMTg1LDIyLDUwLDI1NSw4NiwxMTIsMjA3LDI1NSw3NSwxMTMsMjE1LDEsNjMsMTQ2LDQzLDI1NSw0LDIyNSwxOSwyNTQsMjI3LDIzLDYyLDI1NSwxNCwyNTUsMjE0LDI1NCw0NSw4LDIwNSwyNTUsODcsMTk3LDE1MSwyNTQsMjEwLDgyLDIxNSwyNTUsMjQ1LDI0OCwyNDcsMjU1LDEyOCwyNDgsNzAsMCwyMjUsMjQ3LDg3LDAsOTAsMTIwLDcwLDAsMjEzLDI0NSw5MiwwLDEzLDEzMywyMjYsMCw0NywxODEsNSwxLDkyLDE2MywxMDUsMjU1LDYsMzAsMTMzLDI1NCwyMzIsMTc4LDYxLDI1NSwyMzAsMTQ5LDI0LDI1NSwxOCw0OSwxNTgsMCwyMjgsMTAwLDYxLDI1NCwxMTYsMjQzLDI1MSwyNTUsNzcsNzUsOTIsMSw4MSwyMTksMTQ3LDI1NSw3NiwxNjMsMjU0LDI1NCwxNDEsMjEzLDI0NiwwLDIzMiwzNywxNTIsMjU0LDk3LDQ0LDEwMCwwLDIwMSwzNyw1MCwxLDIxMiwyNDQsNTcsMCwxNzQsMTcxLDE4MywyNTUsMjQ5LDc0LDExMiwwLDE2NiwxNTYsMzAsMCwyMjIsMjIxLDk3LDI1NSwyNDMsOTMsNzMsMjU0LDI1MSwxMDEsMTAwLDI1NSwyMTYsMjE3LDkzLDI1NSwyNTQsMTM4LDE4NywyNTUsMTQyLDE5MCw1MiwyNTUsNTksMjAzLDE3NywyNTUsMjAwLDk0LDUyLDAsMTE1LDExNCwxNTgsMjU1LDE2NSwxNTIsMTA0LDEsMTI2LDk5LDIyNiwyNTUsMTE4LDE1NywyNDQsMSwxMDcsMjAwLDE2LDAsMTkzLDkwLDIyOSwwLDEyMSw2LDg4LDAsMTU2LDMyLDkzLDI1NCwxMjUsMjQxLDIxMSwyNTUsMTQsMjM3LDE1NywyNTUsMTY1LDE1NCwyMSwyNTUsMTg0LDIyNCwyMiwyNTUsMjUwLDI0LDE1MiwyNTUsMTEzLDc3LDMxLDAsMjQ3LDE3MSwyMywyNTUsMjM3LDE3NywyMDQsMjU1LDUyLDEzNywxNDUsMjU1LDE5NCwxODIsMTE0LDAsMjI0LDIzNCwxNDksMCwxMCwxMTEsMTAzLDEsMjAxLDEyOSw0LDAsMjM4LDE0Miw3OCwwLDUyLDYsNDAsMjU1LDExMCwyMTMsMTY1LDI1NCw2MCwyMDcsMjUzLDAsNjIsMjE1LDY5LDAsOTYsOTcsMCwyNTUsNDksNDUsMjAyLDAsMTIwLDEyMSwyMiwyNTUsMjM1LDEzOSw0OCwxLDE5OCw0NSwzNCwyNTUsMTgyLDUwLDI3LDEsMTMxLDIxMCw5MSwyNTUsNDYsNTQsMTI4LDAsMTc1LDEyMywxMDUsMjU1LDE5OCwxNDEsNzgsMjU0LDY3LDI0NCwyMzksMjU1LDI0NSw1NCwxMDMsMjU0LDc4LDM4LDI0MiwyNTUsMiw5MiwyNDksMjU0LDI1MSwxNzQsODcsMjU1LDEzOSw2MywxNDQsMCwyNCwxMDgsMjcsMjU1LDM0LDEwMiwxOCwxLDM0LDIyLDE1MiwwLDY2LDIyOSwxMTgsMjU0LDUwLDE0Myw5OSwwLDE0NCwxNjksMTQ5LDEsMTE4LDMwLDE1MiwwLDE3OCw4LDEyMSwxLDgsMTU5LDE4LDAsOTAsMTAxLDIzMCwyNTUsMTI5LDI5LDExOSwwLDY4LDM2LDExLDEsMjMyLDE4Myw1NSwwLDIzLDI1NSw5NiwyNTUsMTYxLDQxLDE5MywyNTUsNjMsMTM5LDIyMiwwLDE1LDE3OSwyNDMsMCwyNTUsMTAwLDE1LDI1NSw4Miw1MywxMzUsMCwxMzcsNTcsMTQ5LDEsOTksMjQwLDE3MCwyNTUsMjIsMjMwLDIyOCwyNTQsNDksMTgwLDgyLDI1NSw2MSw4Miw0MywwLDExMCwyNDUsMjE3LDAsMTk5LDEyNSw2MSwwLDQ2LDI1Myw1MiwwLDE0MSwxOTcsMjE5LDAsMjExLDE1OSwxOTMsMCw1NSwxMjEsMTA1LDI1NCwxODMsMjAsMTI5LDAsMTY5LDExOSwxNzAsMjU1LDIwMywxNzgsMTM5LDI1NSwxMzUsNDAsMTgyLDI1NSwxNzIsMTMsMjAyLDI1NSw2NSwxNzgsMTQ4LDAsOCwyMDcsNDMsMCwxMjIsNTMsMTI3LDEsNzQsMTYxLDQ4LDAsMjI3LDIxNCwxMjgsMjU0LDg2LDExLDI0MywyNTUsMTAwLDg2LDcsMSwyNDUsNjgsMTM0LDI1NSw2MSw0MywyMSwxLDE1Miw4NCw5NCwyNTUsMTkwLDYwLDI1MCwyNTQsMjM5LDExOCwyMzIsMjU1LDIxNCwxMzYsMzcsMSwxMTMsNzYsMTA3LDI1NSw5MywxMDQsMTAwLDEsMTQ0LDIwNiwyMywyNTUsMTEwLDE1MCwxNTQsMSwyMjgsMTAzLDE4NSwwLDIxOCw0OSw1MCwyNTQsMTM1LDc3LDEzOSwyNTUsMTg1LDEsNzgsMCwwLDE2MSwxNDgsMjU1LDk3LDI5LDIzMywyNTUsMjA3LDE0OCwxNDksMjU1LDE2MCwxNjgsMCwwLDkxLDEyOCwxNzEsMjU1LDYsMjgsMTksMjU0LDExLDExMSwyNDcsMCwzOSwxODcsMTUwLDI1NSwxMzgsMjMyLDE0OSwwLDExNyw2Miw2OCwyNTUsNjMsMjE2LDE4OCwyNTUsMjM1LDIzNCwzMiwyNTQsMjksNTcsMTYwLDI1NSwyNSwxMiwyNDEsMSwxNjksNjAsMTkxLDAsMzIsMTMxLDE0MSwyNTUsMjM3LDE1OSwxMjMsMjU1LDk0LDE5Nyw5NCwyNTQsMTE2LDI1NCwzLDI1NSw5MiwxNzksOTcsMjU0LDEyMSw5Nyw5MiwyNTUsMTcwLDExMiwxNCwwLDIxLDE0OSwyNDgsMCwyNDgsMjI3LDMsMCw4MCw5NiwxMDksMCw3NSwxOTIsNzQsMSwxMiw5MCwyMjYsMjU1LDE2MSwxMDYsNjgsMSwyMDgsMTE0LDEyNywyNTUsMTE0LDQyLDI1NSwyNTQsNzQsMjYsNzQsMjU1LDI0NywxNzksMTUwLDI1NCwxMjEsMTQwLDYwLDAsMTQ3LDcwLDIwMCwyNTUsMjE0LDQwLDE2MSwyNTUsMTYxLDE4OCwyMDEsMjU1LDE0MSw2NSwxMzUsMjU1LDI0MiwxMTUsMjUyLDAsNjIsNDcsMjAyLDAsMTgwLDE0OSwyNTUsMjU0LDEzMCw1NSwyMzcsMCwxNjUsMTcsMTg2LDI1NSwxMCwxNjksMTk0LDAsMTU2LDEwOSwyMTgsMjU1LDExMiwxNDAsMTIzLDI1NSwxMDQsMTI4LDIyMywyNTQsMTc3LDE0MiwxMDgsMjU1LDEyMSwzNywyMTksMjU1LDEyOCw3NywxOCwyNTUsMTExLDEwOCwyMywxLDkxLDE5Miw3NSwwLDE3NCwyNDUsMjIsMjU1LDQsMjM2LDYyLDI1NSw0Myw2NCwxNTMsMSwyMjcsMTczLDI1NCwwLDIzNywxMjIsMTMyLDEsMTI3LDg5LDE4NiwyNTUsMTQyLDgyLDEyOCwyNTQsMjUyLDg0LDE3NCwwLDkwLDE3OSwxNzcsMSwyNDMsMjE0LDg3LDI1NSwxMDMsNjAsMTYyLDI1NSwyMDgsMTMwLDE0LDI1NSwxMSwxMzAsMTM5LDAsMjA2LDEyOSwyMTksMjU1LDk0LDIxNywxNTcsMjU1LDIzOSwyMzAsMjMwLDI1NSwxMTYsMTE1LDE1OSwyNTQsMTY0LDEwNyw5NSwwLDUxLDIxOCwyLDEsMjE2LDEyNSwxOTgsMjU1LDE0MCwyMDIsMTI4LDI1NCwxMSw5NSw2OCwyNTUsNTUsOSw5MywyNTQsMTc0LDE1Myw2LDI1NSwyMDQsMTcyLDk2LDAsNjksMTYwLDExMCwwLDIxMywzOCw0OSwyNTQsMjcsODAsMjEzLDAsMTE4LDEyNSwxMTQsMCw3MCw3MCw2NywyNTUsMTUsMTQyLDczLDI1NSwxMzEsMTIyLDE4NSwyNTUsMjQzLDIwLDUwLDI1NCwxMzAsMjM3LDQwLDAsMjEwLDE1OSwxNDAsMSwxOTcsMTUxLDY1LDI1NSw4NCwxNTMsNjYsMCwxOTUsMTI2LDkwLDAsMTYsMjM4LDIzNiwxLDExOCwxODcsMTAyLDI1NSwzLDI0LDEzMywyNTUsMTg3LDY5LDIzMCwwLDU2LDE5Nyw5MiwxLDIxMyw2OSw5NCwyNTUsODAsMTM4LDIyOSwxLDIwNiw3LDIzMCwwLDIyMiwxMTEsMjMwLDEsOTEsMjMzLDExOSwyNTUsOSw4OSw3LDEsMiw5OCwxLDAsMTQ4LDc0LDEzMywyNTUsNTEsMjQ2LDE4MCwyNTUsMjI4LDE3NywxMTIsMSw1OCwxODksMTA4LDI1NSwxOTQsMjAzLDIzNywyNTQsMjEsMjA5LDE5NSwwLDE0NywxMCwzNSwxLDg2LDE1NywyMjYsMCwzMSwxNjMsMTM5LDI1NCw1Niw3LDc1LDI1NSw2Miw5MCwxMTYsMCwxODEsNjAsMTY5LDAsMTM4LDE2MiwyMTIsMjU0LDgxLDE2NywzMSwwLDIwNSw5MCwxMTIsMjU1LDMzLDExMiwyMjcsMCw4MywxNTEsMTE3LDEsMTc3LDIyNCw3MywyNTUsMTc0LDE0NCwyMTcsMjU1LDIzMCwyMDQsNzksMjU1LDIyLDc3LDIzMiwyNTUsMTE0LDc4LDIzNCwwLDIyNCw1NywxMjYsMjU0LDksNDksMTQxLDAsMjQyLDE0NywxNjUsMSwxMDQsMTgyLDE0MCwyNTUsMTY3LDEzMiwxMiwxLDEyMyw2OCwxMjcsMCwyMjUsODcsMzksMSwyNTEsMTA4LDgsMCwxOTgsMTkzLDE0MywxLDEyMSwxMzUsMjA3LDI1NSwxNzIsMjIsNzAsMCw1MCw2OCwxMTYsMjU1LDEwMSwxNzUsNDAsMjU1LDI0OCwxMDUsMjMzLDAsMTY2LDIwMyw3LDAsMTEwLDE5NywyMTgsMCwyMTUsMjU0LDI2LDI1NCwxNjgsMjI2LDI1MywwLDMxLDE0Myw5NiwwLDExLDEwMyw0MSwwLDE4MywxMjksMjAzLDI1NCwxMDAsMjQ3LDc0LDI1NSwyMTMsMTI2LDEzMiwwLDIxMCwxNDcsNDQsMCwxOTksMjM0LDI3LDEsMTQ4LDQ3LDE4MSwwLDE1NSw5MSwxNTgsMSw1NCwxMDUsMTc1LDI1NSwyLDc4LDE0NSwyNTQsMTAyLDE1NCw5NSwwLDEyOCwyMDcsMTI3LDI1NCw1MiwxMjQsMjM2LDI1NSwxMzAsODQsNzEsMCwyMjEsMjQzLDIxMSwwLDE1MiwxNzAsMjA3LDAsMjIyLDEwNiwxOTksMCwxODMsODQsOTQsMjU0LDkyLDIwMCw1NiwyNTUsMTM4LDE4MiwxMTUsMSwxNDIsOTYsMTQ2LDAsMTMzLDEzNiwyMjgsMCw5NywxOCwxNTAsMCw1NSwyNTEsNjYsMCwxNDAsMTAyLDQsMCwyMDIsMTAzLDE1MSwwLDMwLDE5LDI0OCwyNTUsNTEsMTg0LDIwNywwLDIwMiwxOTgsODksMCw1NSwxOTcsMjI1LDI1NCwxNjksOTUsMjQ5LDI1NSw2Niw2NSw2OCwyNTUsMTg4LDIzNCwxMjYsMCwxNjYsMjIzLDEwMCwxLDExMiwyMzksMjQ0LDAsMTQ0LDIzLDE5NCwwLDU4LDM5LDE4MiwwLDI0NCw0NCwyNCwyNTQsMTc1LDY4LDE3OSwyNTUsMTUyLDExOCwxNTQsMSwxNzYsMTYyLDEzMCwwLDIxNywxMTQsMjA0LDI1NCwxNzMsMTI2LDc4LDI1NSwzMywyMjIsMzAsMjU1LDM2LDIsOTEsMjU1LDIsMTQzLDI0MywwLDksMjM1LDIxNSwwLDMsMTcxLDE1MSwxLDI0LDIxNSwyNDUsMjU1LDE2OCw0NywxNjQsMjU0LDI0MSwxNDYsMjA3LDAsNjksMTI5LDE4MCwwLDY4LDI0MywxMTMsMCwxNDQsNTMsNzIsMjU0LDI1MSw0NSwxNCwwLDIzLDExMCwxNjgsMCw2OCw2OCw3OSwyNTUsMTEwLDcwLDk1LDI1NCwxNzQsOTEsMTQ0LDI1NSwzMywyMDYsOTUsMjU1LDEzNyw0MSw3LDI1NSwxOSwxODcsMTUzLDI1NCwzNSwyNTUsMTEyLDI1NSw5LDE0NSwxODUsMjU0LDUwLDE1NywzNywwLDExLDExMiw0OSwxLDEwMiw4LDE5MCwyNTUsMjM0LDI0MywxNjksMSw2MCw4NSwyMywwLDc0LDM5LDE4OSwwLDExNiw0OSwyMzksMCwxNzMsMjEzLDIxMCwwLDQ2LDE2MSwxMDgsMjU1LDE1OSwxNTAsMzcsMCwxOTYsMTIwLDE4NSwyNTUsMzQsOTgsNiwyNTUsMTUzLDE5NSw2MiwyNTUsOTcsMjMwLDcxLDI1NSwxMDIsNjEsNzYsMCwyNiwyMTIsMjM2LDI1NSwxNjQsOTcsMTYsMCwxOTgsNTksMTQ2LDAsMTYzLDIzLDE5NiwwLDU2LDI0LDYxLDAsMTgxLDk4LDE5MywwLDI1MSwxNDcsMjI5LDI1NSw5OCwxODksMjQsMjU1LDQ2LDU0LDIwNiwyNTUsMjM0LDgyLDI0NiwwLDE4MywxMDMsMzgsMSwxMDksNjIsMjA0LDAsMTAsMjQwLDIyNCwwLDE0NiwyMiwxMTcsMjU1LDE0MiwxNTQsMTIwLDAsNjksMjEyLDM1LDAsMjA4LDk5LDExOCwxLDEyMSwyNTUsMywyNTUsNzIsNiwxOTQsMCwxMTcsMTcsMTk3LDI1NSwxMjUsMTUsMjMsMCwxNTQsNzksMTUzLDAsMjE0LDk0LDE5NywyNTUsMTg1LDU1LDE0NywyNTUsNjIsMjU0LDc4LDI1NCwxMjcsODIsMTUzLDAsMTEwLDEwMiw2MywyNTUsMTA4LDgyLDE2MSwyNTUsMTA1LDE4NywyMTIsMSw4MCwxMzgsMzksMCw2MCwyNTUsOTMsMjU1LDcyLDEyLDE4NiwwLDIxMCwyNTEsMzEsMSwxOTAsMTY3LDE0NCwyNTUsMjI4LDQ0LDE5LDI1NCwxMjgsNjcsMjMyLDAsMjE0LDI0OSwxMDcsMjU0LDEzNiwxNDUsODYsMjU1LDEzMiw0NiwxNzYsMCwxODksMTg3LDIyNywyNTUsMjA4LDIyLDE0MCwwLDIxNywyMTEsMTE2LDAsNTAsODEsMTg2LDI1NCwxMzksMjUwLDMxLDAsMzAsNjQsMTk4LDEsMTM1LDE1NSwxMDAsMCwxNjAsMjA2LDIzLDI1NCwxODcsMTYyLDIxMSwyNTUsMTYsMTg4LDYzLDAsMjU0LDIwOCw0OSwwLDg1LDg0LDE5MSwwLDI0MSwxOTIsMjQyLDI1NSwxNTMsMTI2LDE0NSwxLDIzNCwxNjIsMTYyLDI1NSwyMzAsOTcsMjE2LDEsNjQsMTM1LDEyNiwwLDE5MCwxNDgsMjIzLDEsNTIsMCw0MywyNTUsMjgsMzksMTg5LDEsNjQsMTM2LDIzOCwwLDE3NSwxOTYsMTg1LDAsOTgsMjI2LDIxMywyNTUsMTI3LDE1OSwyNDQsMSwyMjYsMTc1LDYwLDAsMTYwLDIzMywxNDIsMSwxODAsMjQzLDIwNywyNTUsNjksMTUyLDg5LDEsMzEsMTAxLDIxLDAsMTQ0LDI1LDE2NCwyNTQsMTM5LDE5MSwyMDksMCw5MSwyNSwxMjEsMCwzMiwxNDcsNSwwLDM5LDE4NiwxMjMsMjU1LDYzLDExNSwyMzAsMjU1LDkzLDE2NywxOTgsMjU1LDE0MywyMTMsMjIwLDI1NSwxNzksMTU2LDE5LDI1NSwyNSw2NiwxMjIsMCwyMTQsMTYwLDIxNywyNTUsMiw0NSw2MiwyNTUsMTA2LDc5LDE0NiwyNTQsNTEsMTM3LDk5LDI1NSw4NywxMDAsMjMxLDI1NSwxNzUsMTQ1LDIzMiwyNTUsMTAxLDE4NCwxLDI1NSwxNzQsOSwxMjUsMCw4MiwzNywxNjEsMSwzNiwxMTQsMTQxLDI1NSw0OCwyMjIsMTQyLDI1NSwyNDUsMTg2LDE1NCwwLDUsMTc0LDIyMSwyNTQsNjMsMTE0LDE1NSwyNTUsMTM1LDU1LDE2MCwxLDgwLDMxLDEzNSwwLDEyNiwyNTAsMTc5LDEsMjM2LDIxOCw0NSwwLDIwLDI4LDE0NSwxLDE2LDE0Nyw3MywwLDI0OSwxODksMTMyLDEsMTcsMTg5LDE5MiwyNTUsMjIzLDE0MiwxOTgsMjU1LDcyLDIwLDE1LDI1NSwyNTAsNTMsMjM3LDI1NCwxNSwxMSwxOCwwLDI3LDIxMSwxMTMsMjU0LDIxMywxMDcsNTYsMjU1LDE3NCwxNDcsMTQ2LDI1NSw5NiwxMjYsNDgsMCwyMywxOTMsMTA5LDEsMzcsMTYyLDk0LDAsMTk5LDE1NywyNDksMjU0LDI0LDEyOCwxODcsMjU1LDIwNSw0OSwxNzgsMjU0LDkzLDE2NCw0MiwyNTUsNDMsMTE5LDIzNSwxLDg4LDE4MywyMzcsMjU1LDIxOCwyMTAsMSwyNTUsMTA3LDI1NCw0MiwwLDIzMCwxMCw5OSwyNTUsMTYyLDAsMjI2LDAsMjE5LDIzNyw5MSwwLDEyOSwxNzgsMjAzLDAsMjA4LDUwLDk1LDI1NCwyMDYsMjA4LDk1LDI1NSwyNDcsMTkxLDg5LDI1NCwxMTAsMjM0LDc5LDI1NSwxNjUsNjEsMjQzLDAsMjAsMTIyLDExMiwyNTUsMjQ2LDI0NiwxODUsMjU0LDEwMyw0LDEyMywwLDIzMyw5OSwyMzAsMSwyMTksOTEsMjUyLDI1NSwxOTksMjIyLDIyLDI1NSwxNzksMjQ1LDIzMywyNTUsMjExLDI0MSwyMzQsMCwxMTEsMjUwLDE5MiwyNTUsODUsODQsMTM2LDAsMTAxLDU4LDUwLDI1NSwxMzEsMTczLDE1NiwyNTQsMTE5LDQ1LDUxLDI1NSwxMTgsMjMzLDE2LDI1NCwyNDIsOTAsMjE0LDAsOTQsMTU5LDIxOSwxLDMsMywyMzQsMjU1LDk4LDc2LDkyLDI1NCw4MCw1NCwyMzAsMCw1LDIyOCwyMzEsMjU0LDUzLDI0LDIyMywyNTUsMTEzLDU2LDExOCwxLDIwLDEzMiwxLDI1NSwxNzEsMjEwLDIzNiwwLDU2LDI0MSwxNTgsMjU1LDE4NiwxMTUsMTksMjU1LDgsMjI5LDE3NCwwLDQ4LDQ0LDAsMSwxMTQsMTE0LDE2NiwyNTUsNiw3MywyMjYsMjU1LDIwNSw4OSwyNDQsMCwxMzcsMjI3LDc1LDEsMjQ4LDE3Myw1NiwwLDc0LDEyMCwyNDYsMjU0LDExOSwzLDExLDI1NSw4MSwxMjAsMTk4LDI1NSwxMzYsMTIyLDk4LDI1NSwxNDYsMjQxLDIyMSwxLDEwOSwxOTQsNzgsMjU1LDIyMywyNDEsNzAsMSwyMTQsMjAwLDE2OSwyNTUsOTcsMTkwLDQ3LDI1NSw0NywxMDMsMTc0LDI1NSw5OSw5Miw3MiwyNTQsMTE4LDIzMywxODAsMjU1LDE5MywzNSwyMzMsMjU0LDI2LDIyOSwzMiwyNTUsMjIyLDI1MiwxOTgsMCwyMDQsNDMsNzEsMjU1LDE5OSw4NCwxNzIsMCwxMzQsMTAyLDE5MCwwLDExMSwyMzgsOTcsMjU0LDIzMCw0MCwyMzAsMCwyMjcsMjA1LDY0LDI1NCwyMDAsMTIsMjI1LDAsMTY2LDI1LDIyMiwwLDExMyw2OSw1MSwyNTUsMTQzLDE1OSwyNCwwLDE2NywxODQsNzQsMCwyOSwyMjQsMTE2LDI1NCwxNTgsMjA4LDIzMywwLDE5MywxMTYsMTI2LDI1NSwyMTIsMTEsMTMzLDI1NSwyMiw1OCwxNDAsMSwyMDQsMzYsNTEsMjU1LDIzMiwzMCw0MywwLDIzNSw3MCwxODEsMjU1LDY0LDU2LDE0NiwyNTQsMTY5LDE4LDg0LDI1NSwyMjYsMSwxMywyNTUsMjAwLDUwLDE3NiwyNTUsNTIsMjEzLDI0NSwyNTQsMTY4LDIwOSw5NywwLDE5MSw3MSw1NSwwLDM0LDc4LDE1NiwwLDIzMiwxNDQsNTgsMSwxODUsNzQsMTg5LDAsMTg2LDE0MiwxNDksMjU0LDY0LDY5LDEyNywyNTUsMTYxLDIwMywxNDcsMjU1LDE3NiwxNTEsMTkxLDAsMTM2LDIzMSwyMDMsMjU0LDE2MywxODIsMTM3LDAsMTYxLDEyNiwyNTEsMjU0LDIzMywzMiw2NiwwLDY4LDIwNyw2NiwwLDMwLDI4LDM3LDAsOTMsMTE0LDk2LDEsMjU0LDkyLDI0NywyNTUsNDQsMTcxLDY5LDAsMjAyLDExOSwxMSwyNTUsMTg4LDExOCw1MCwxLDI1NSw4MywxMzYsMjU1LDcxLDgyLDI2LDAsNzAsMjI3LDIsMCwzMiwyMzUsMTIxLDEsMTgxLDQxLDE1NCwwLDcxLDEzNCwyMjksMjU0LDIwMiwyNTUsMzYsMCw0MSwxNTIsNSwwLDE1NCw2Myw3MywyNTUsMzQsMTgyLDEyNCwwLDEyMSwyMjEsMTUwLDI1NSwyNiwyMDQsMjEzLDEsNDEsMTcyLDg3LDAsOTAsMTU3LDE0NiwyNTUsMTA5LDEzMCwyMCwwLDcxLDEwNywyMDAsMjU1LDI0MywxMDIsMTg5LDAsMSwxOTUsMTQ1LDI1NCw0Niw4OCwxMTcsMCw4LDIwNiwyMjcsMCwxOTEsMTEwLDI1MywyNTUsMTA5LDEyOCwyMCwyNTQsMTM0LDg1LDUxLDI1NSwxMzcsMTc3LDExMiwxLDIxNiwzNCwyMiwyNTUsMTMxLDE2LDIwOCwyNTUsMTIxLDE0OSwxNzAsMCwxMTQsMTksMjMsMSwxNjYsODAsMzEsMjU1LDExMywyNDAsMTIyLDAsMjMyLDE3OSwyNTAsMCw2OCwxMTAsMTgwLDI1NCwyMTAsMTcwLDExOSwwLDIyMywxMDgsMTY0LDI1NSwyMDcsNzksMjMzLDI1NSwyNywyMjksMjI2LDI1NCwyMDksOTgsODEsMjU1LDc5LDY4LDcsMCwxMzEsMTg1LDEwMCwwLDE3MCwyOSwxNjIsMjU1LDE3LDE2MiwxMDcsMjU1LDU3LDIxLDExLDEsMTAwLDIwMCwxODEsMjU1LDEyNyw2NSwxNjYsMSwxNjUsMTM0LDIwNCwwLDEwNCwxNjcsMTY4LDAsMSwxNjQsNzksMCwxNDYsMTM1LDU5LDEsNzAsNTAsMTI4LDI1NSwxMDIsMTE5LDEzLDI1NCwyMjcsNiwxMzUsMCwxNjIsMTQyLDE3OSwyNTUsMTYwLDEwMCwyMjIsMCwyNywyMjQsMjE5LDEsMTU4LDkzLDE5NSwyNTUsMjM0LDE0MSwxMzcsMCwxNiwyNCwxMjUsMjU1LDIzOCwyMDYsNDcsMjU1LDk3LDE3LDk4LDI1NSwxMTYsMTEwLDEyLDI1NSw5NiwxMTUsNzcsMCw5MSwyMjcsMjMyLDI1NSwyNDgsMjU0LDc5LDI1NSw5MiwyMjksNiwyNTQsODgsMTk4LDEzOSwwLDIwNiw3NSwxMjksMCwyNTAsNzcsMjA2LDI1NSwxNDEsMjQ0LDEyMywxLDEzOCw2OSwyMjAsMCwzMiwxNTEsNiwxLDEzMSwxNjcsMjIsMjU1LDIzNyw2OCwxNjcsMjU0LDE5OSwxODksMTUwLDAsMTYzLDE3MSwxMzgsMjU1LDUxLDE4OCw2LDI1NSw5NSwyOSwxMzcsMjU0LDE0OCwyMjYsMTc5LDAsMTgxLDEwNywyMDgsMjU1LDEzNCwzMSw4MiwyNTUsMTUxLDEwMSw0NSwyNTUsMTI5LDIwMiwyMjUsMCwyMjQsNzIsMTQ3LDAsNDgsMTM4LDE1MSwyNTUsMTk1LDY0LDIwNiwyNTQsMjM3LDIxOCwxNTgsMCwxMDYsMjksMTM3LDI1NCwyNTMsMTg5LDIzMywyNTUsMTAzLDE1LDE3LDI1NSwxOTQsOTcsMjU1LDAsMTc4LDQ1LDE2OSwyNTQsMTk4LDIyNSwxNTUsMCwzOSw0OCwxMTcsMjU1LDEzNSwxMDYsMTE1LDAsOTcsMzgsMTgxLDAsMTUwLDQ3LDY1LDI1NSw4MywxMzAsMjI5LDI1NCwyNDYsMzgsMTI5LDAsOTIsMjM5LDE1NCwyNTQsOTEsOTksMTI3LDAsMTYxLDExMSwzMywyNTUsMjM4LDIxNywyNDIsMjU1LDEzMSwxODUsMTk1LDI1NSwyMTMsMTkxLDE1OCwyNTUsNDEsMTUwLDIxOCwwLDEzMiwxNjksMTMxLDAsODksODQsMjUyLDEsMTcxLDcwLDEyOCwyNTUsMTYzLDI0OCwyMDMsMjU0LDEsNTAsMTgwLDI1NSwxMjQsNzYsODUsMSwyNTEsMTExLDgwLDAsOTksNjYsMjM5LDI1NSwxNTQsMjM3LDE4MiwyNTUsMjIxLDEyNiwxMzMsMjU0LDc0LDIwNCw5OSwyNTUsNjUsMTQ3LDExOSwyNTUsOTksNTYsMTY3LDI1NSw3OSwyNDgsMTQ5LDI1NSwxMTYsMTU1LDIyOCwyNTUsMjM3LDQzLDE0LDI1NCw2OSwxMzcsMTEsMjU1LDIyLDI1MCwyNDEsMSw5MSwxMjIsMTQzLDI1NSwyMDUsMjQ5LDI0MywwLDIxMiwyNiw2MCwyNTUsNDgsMTgyLDE3NiwxLDQ4LDIzLDE5MSwyNTUsMjAzLDEyMSwxNTIsMjU0LDQ1LDc0LDIxMywyNTUsNjIsOTAsMTgsMjU0LDI0NSwxNjMsMjMwLDI1NSwxODUsMTA2LDExNiwyNTUsODMsMzUsMTU5LDAsMTIsMzMsMiwyNTUsODAsMzQsNjIsMCwxNiw4NywxNzQsMjU1LDE3MywxMDEsODUsMCwyMDIsMzYsODEsMjU0LDE2MCw2OSwyMDQsMjU1LDY0LDIyNSwxODcsMCw1OCwyMDYsOTQsMCw4NiwxNDQsNDcsMCwyMjksODYsMjQ1LDAsNjMsMTQ1LDE5MCwxLDM3LDUsMzksMCwxMDksMjUxLDI2LDAsMTM3LDE0NywyMzQsMCwxNjIsMTIxLDE0NSwyNTUsMTQ0LDExNiwyMDYsMjU1LDE5NywyMzIsMTg1LDI1NSwxODMsMTkwLDE0MCwyNTUsNzMsMTIsMjU0LDI1NSwxMzksMjAsMjQyLDI1NSwxNzAsOTAsMjM5LDI1NSw5Nyw2NiwxODcsMjU1LDI0NSwxODEsMTM1LDI1NCwyMjIsMTM2LDUyLDAsMjQ1LDUsNTEsMjU0LDIwMyw0Nyw3OCwwLDE1MiwxMDEsMjE2LDAsNzMsMjMsMTI1LDAsMjU0LDk2LDMzLDEsMjM1LDIxMCw3MywyNTUsNDMsMjA5LDg4LDEsNywxMjksMTA5LDAsMTIyLDEwNCwyMjgsMjU0LDE3MCwyNDIsMjAzLDAsMjQyLDIwNCwxMzUsMjU1LDIwMiwyOCwyMzMsMjU1LDY1LDYsMTI3LDAsMTU5LDE0NCw3MSwwLDEwMCwxNDAsOTUsMCw3OCwxNTAsMTMsMCwyNTEsMTA3LDExOCwxLDE4Miw1OCwxMjUsMjU1LDEsMzgsMTA4LDI1NSwxNDEsMTg5LDIwOSwyNTUsOCwxNTUsMTI1LDEsMTEzLDE2Myw5MSwyNTUsMTIxLDc5LDE5MCwyNTUsMTM0LDIzOSwxMDgsMjU1LDc2LDQ3LDI0OCwwLDE2MywyMjgsMjM5LDAsMTcsMTExLDEwLDAsODgsMTQ5LDc1LDI1NSwyMTUsMjM1LDIzOSwwLDE2NywxNTksMjQsMjU1LDQ3LDE1MSwxMDgsMjU1LDEwNywyMDksMTg4LDAsMjMzLDIzMSw5OSwyNTQsMjgsMjAyLDE0OCwyNTUsMTc0LDM1LDEzOCwyNTUsMTEwLDI0LDY4LDI1NSwyLDY5LDE4MSwwLDEwNywxMDIsODIsMCwxMDIsMjM3LDcsMCw5MiwzNiwyMzcsMjU1LDIyMSwxNjIsODMsMSw1NSwyMDIsNiwyNTUsMTM1LDIzNCwxMzUsMjU1LDI0LDI1MCwyMjIsMCw2NSw5NCwxNjgsMjU0LDI0NSwyNDgsMjEwLDI1NSwxNjcsMTA4LDIwMSwyNTQsMjU1LDE2MSwxMTEsMCwyMDUsOCwyNTQsMCwxMzYsMTMsMTE2LDAsMTAwLDE3NiwxMzIsMjU1LDQzLDIxNSwxMjYsMjU1LDE3NywxMzMsMTMwLDI1NSwxNTgsNzksMTQ4LDAsNjcsMjI0LDM3LDEsMTIsMjA2LDIxLDI1NSw2MiwzNCwxMTAsMSwyMzcsMTA0LDE3NSwyNTUsODAsMTMyLDExMSwyNTUsMTQyLDE3NCw3MiwwLDg0LDIyOSwxODAsMjU0LDEwNSwxNzksMTQwLDAsNjQsMjQ4LDE1LDI1NSwyMzMsMTM4LDE2LDAsMjQ1LDY3LDEyMywyNTQsMjE4LDEyMSwyMTIsMjU1LDYzLDk1LDIxOCwxLDIxMywxMzMsMTM3LDI1NSwxNDMsMTgyLDgyLDI1NSw0OCwyOCwxMSwwLDI0NCwxMTQsMTQxLDEsMjA5LDE3NSw3NiwyNTUsMTU3LDE4MSwxNTAsMjU1LDE4NiwyMjksMywyNTUsMTY0LDE1NywxMTEsMSwyMzEsMTg5LDEzOSwwLDExOSwyMDIsMTkwLDI1NSwyMTgsMTA2LDY0LDI1NSw2OCwyMzUsNjMsMjU0LDk2LDI2LDE3MiwyNTUsMTg3LDQ3LDExLDEsMjE1LDE4LDI1MSwyNTUsODEsODQsODksMCw2OCw1OCwxMjgsMCw5NCwxMTMsNSwxLDkyLDEyOSwyMDgsMjU1LDk3LDE1LDgzLDI1NCw5LDI4LDE4OCwwLDIzOSw5LDE2NCwwLDYwLDIwNSwxNTIsMCwxOTIsMTYzLDk4LDI1NSwxODQsMTgsNjAsMCwyMTcsMTgyLDEzOSwwLDEwOSw1OSwxMjAsMjU1LDQsMTkyLDI1MSwwLDE2OSwyMTAsMjQwLDI1NSwzNywxNzIsOTIsMjU0LDE0OCwyMTEsMjQ1LDI1NSwxNzksNjUsNTIsMCwyNTMsMTMsMTE1LDAsMTg1LDE3NCwyMDYsMSwxMTQsMTg4LDE0OSwyNTUsMjM3LDkwLDE3MywwLDQzLDE5OSwxOTIsMjU1LDg4LDEwOCwxMTMsMCw1MiwzNSw3NiwwLDY2LDI1LDE0OCwyNTUsMjIxLDQsNywyNTUsMTUxLDI0MSwxMTQsMjU1LDE5MCwyMDksMjMyLDAsOTgsNTAsMTk5LDAsMTUxLDE1MCwyMTMsMjU1LDE4LDc0LDM2LDEsNTMsNDAsNywwLDE5LDEzNSw2NSwyNTUsMjYsMTcyLDY5LDAsMTc0LDIzNyw4NSwwLDk5LDk1LDQxLDAsMyw1NiwxNiwwLDM5LDE2MCwxNzcsMjU1LDIwMCwxMDYsMjE4LDI1NCwxODUsNjgsODQsMjU1LDkxLDE4Niw2MSwyNTQsNjcsMTQzLDE0MSwyNTUsMTMsMjQ0LDE2NiwyNTUsOTksMTE0LDE5OCwwLDE5OSwxMTAsMTYzLDI1NSwxOTMsMTgsMTg2LDAsMTI0LDIzOSwyNDYsMSwxMTAsNjgsMjIsMCwyLDIzNSw0NiwxLDIxMiw2MCwxMDcsMCwxMDUsNDIsMTA1LDEsMTQsMjMwLDE1MiwwLDcsNSwxMzEsMCwxNDEsMTA0LDE1NCwyNTUsMjEzLDMsNiwwLDEzMSwyMjgsMTYyLDI1NSwxNzksMTAwLDI4LDEsMjMxLDEyMyw4NSwyNTUsMjA2LDE0LDIyMywxLDI1Myw5NiwyMzAsMCwzOCwxNTIsMTQ5LDEsOTgsMTM3LDEyMiwwLDIxNCwyMDUsMywyNTUsMjI2LDE1MiwxNzksMjU1LDYsMTMzLDEzNywwLDE1OCw2OSwxNDAsMjU1LDExMywxNjIsMTU0LDI1NSwxODAsMjQzLDE3MiwyNTUsMjcsMTg5LDExNSwyNTUsMTQzLDQ2LDIyMCwyNTUsMjEzLDEzNCwyMjUsMjU1LDEyNiwyOSw2OSwwLDE4OCw0MywxMzcsMSwyNDIsNzAsOSwwLDkwLDIwNCwyNTUsMjU1LDIzMSwxNzAsMTQ3LDAsMjMsNTYsMTksMjU0LDU2LDEyNSwxNTcsMjU1LDQ4LDE3OSwyMTgsMjU1LDc5LDE4MiwyNTMsMjU1LDM4LDIxMiwxOTEsMSw0MSwyMzUsMTI0LDAsOTYsMTUxLDI4LDAsMTM1LDE0OCwxOTAsMCwyMDUsMjQ5LDM5LDI1NCw1Miw5NiwxMzYsMjU1LDIxMiw0NCwxMzYsMjU1LDY3LDIwOSwxMzEsMjU1LDI1MiwxMzAsMjMsMjU1LDIxOSwxMjgsMjAsMjU1LDE5OCwxMjksMTE4LDAsMTA4LDEwMSwxMSwwLDE3OCw1LDE0NiwxLDYyLDcsMTAwLDI1NSwxODEsMjM2LDk0LDI1NCwyOCwyNiwxNjQsMCw3NiwyMiwxMTIsMjU1LDEyMCwxMDIsNzksMCwyMDIsMTkyLDIyOSwxLDIwMCwxNzYsMjE1LDAsNDEsNjQsMjQ0LDI1NSwyMDYsMTg0LDc4LDAsMTY3LDQ1LDYzLDEsMTYwLDM1LDAsMjU1LDU5LDEyLDE0MiwyNTUsMjA0LDksMTQ0LDI1NSwyMTksOTQsMjI5LDEsMTIyLDI3LDExMiwwLDE4OSwxMDUsMTA5LDI1NSw2NCwyMDgsNzQsMjU1LDI1MSwxMjcsNTUsMSwyLDIyNiwxOTgsMCw0NCw3NiwyMDksMCwxNTEsMTUyLDc3LDI1NSwyMTAsMjMsNDYsMSwyMDEsMTcxLDY5LDI1NSw0NCwyMTEsMjMxLDAsMTkwLDM3LDIyNCwyNTUsMjQ1LDE5Niw2MiwyNTUsMTY5LDE4MSwyMjIsMjU1LDM0LDIxMSwxNywwLDExOSwyNDEsMTk3LDI1NSwyMjksMzUsMTUyLDEsMjEsNjksNDAsMjU1LDE3OCwyMjYsMTYxLDAsMTQ4LDE3OSwxOTMsMCwyMTksMTk0LDI1NCwxLDQwLDIwNiw1MSwyNTUsMjMxLDkyLDI1MCwxLDY3LDE1MywxNzAsMCwyMSwxNDgsMjQxLDAsMTcwLDY5LDgyLDI1NSwxMjEsMTgsMjMxLDI1NSw5MiwxMTQsMywwLDE4NCw2MiwyMzAsMCwyMjUsMjAxLDg3LDI1NSwxNDYsOTYsMTYyLDI1NSwxODEsMjQyLDIyMCwwLDE3MywxODcsMjIxLDEsMjI2LDYyLDE3MCwyNTUsNTYsMTI2LDIxNywxLDExNywxMywyMjcsMjU1LDE3OSw0NCwyMzksMCwxNTcsMTQxLDE1NSwyNTUsMTQ0LDIyMSw4MywwLDIzNSwyMDksMjA4LDAsNDIsMTcsMTY1LDEsMjUxLDgxLDEzMywwLDEyNCwyNDUsMjAxLDI1NCw5NywyMTEsMjQsMjU1LDgzLDIxNCwxNjYsMCwxNTQsMzYsOSwyNTUsMjQ4LDQ3LDEyNywwLDkwLDIxOSwxNDAsMjU1LDE2MSwyMTcsMzgsMjU0LDIxMiwxNDcsNjMsMjU1LDY2LDg0LDE0OCwxLDIwNywzLDEsMCwyMzAsMTM0LDg5LDEsMTI3LDc4LDEyMiwyNTUsMjI0LDE1NSwxLDI1NSw4MiwxMzYsNzQsMCwxNzgsMTU2LDIwOCwyNTUsMTg2LDI1LDQ5LDI1NSwyMjIsMywyMTAsMSwyMjksMTUwLDE5MCwyNTUsODUsMTYyLDUyLDI1NSw0MSw4NCwxNDEsMjU1LDczLDEyMyw4NCwyNTQsOTMsMTcsMTUwLDAsMTE5LDE5LDI4LDEsMzIsMjIsMjE1LDI1NSwyOCwyMywyMDQsMjU1LDE0MiwyNDEsNTIsMjU1LDIyOCw1MiwxMjUsMCwyOSw3NiwyMDcsMCwyMTUsMTY3LDI1MCwyNTQsMTc1LDE2NCwyMzAsMCw1NSwyMDcsMTA1LDEsMTA5LDE4NywyNDUsMjU1LDE2MSw0NCwyMjAsMSw0MSwxMDEsMTI4LDI1NSwxNjcsMTYsOTQsMCw5MywyMTQsMTA3LDI1NSwxMTgsNzIsMCwyNTQsODAsNjEsMjM0LDI1NSwxMjEsMTc1LDEyNSwwLDEzOSwxNjksMjUxLDAsOTcsMzksMTQ3LDI1NCwyNTAsMTk2LDQ5LDI1NSwxNjUsMTc5LDExMCwyNTQsMjIzLDcwLDE4NywyNTUsMjIsMTQyLDEyNSwxLDE1NCwxNzksMTM4LDI1NSwxMTgsMTc2LDQyLDEsMTAsMTc0LDE1MywwLDE1Niw5MiwxMDIsMCwxNjgsMTMsMTYxLDI1NSwxNDMsMTYsMzIsMCwyNTAsMTk3LDE4MCwyNTUsMjAzLDE2Myw0NCwxLDg3LDMyLDM2LDAsMTYxLDE1MywyMCwyNTUsMTIzLDI1MiwxNSwwLDI1LDIyNyw4MCwwLDYwLDg4LDE0MiwwLDE3LDIyLDIwMSwxLDE1NCwyMDUsNzcsMjU1LDM5LDYzLDQ3LDAsOCwxMjIsMTQxLDAsMTI4LDIzLDE4MiwyNTQsMjA0LDM5LDE5LDI1NSw0LDExMiwyOSwyNTUsMjMsMzYsMTQwLDI1NSwyMTAsMjM0LDExNiwyNTQsNTMsNTAsNjMsMjU1LDEyMSwxNzEsMTA0LDI1NSwxNjAsMjE5LDk0LDAsODcsODIsMTQsMjU0LDIzMSw0Miw1LDAsMTY1LDEzOSwxMjcsMjU0LDg2LDc4LDM4LDAsMTMwLDYwLDY2LDI1NCwyMDMsMzAsNDUsMjU1LDQ2LDE5NiwxMjIsMSwyNDksNTMsMTYyLDI1NSwxMzYsMTQzLDEwMywyNTQsMjE1LDIxMCwxMTQsMCwyMzEsNywxNjAsMjU0LDE2OSwxNTIsNDIsMjU1LDExMSw0NSwyNDYsMCwxNDIsMTMxLDEzNSwyNTUsMTMxLDcxLDIwNCwyNTUsMzYsMjI2LDExLDAsMCwyOCwyNDIsMjU1LDIyNSwxMzgsMjEzLDI1NSwyNDcsNDYsMjE2LDI1NCwyNDUsMywxODMsMCwxMDgsMjUyLDc0LDEsMjA2LDI2LDQ4LDI1NSwyMDUsNTQsMjQ2LDI1NSwyMTEsMTk4LDM2LDI1NSwxMjEsMzUsNTAsMCw1MiwyMTYsMjAyLDI1NSwzOCwxMzksMTI5LDI1NCwyNDIsNzMsMTQ4LDAsNjcsMjMxLDE0MSwyNTUsNDIsNDcsMjA0LDAsNzgsMTE2LDI1LDEsNCwyMjUsMTkxLDI1NSw2LDE0NywyMjgsMCw1OCw4OCwxNzcsMCwxMjIsMTY1LDIyOSwyNTUsMjUyLDgzLDIwMSwyNTUsMjI0LDE2Nyw5NiwxLDE3NywxODQsMTU4LDI1NSwyNDIsMTA1LDE3OSwxLDI0OCwxOTgsMjQwLDAsMTMzLDY2LDIwMywxLDI1NCwzNiw0NywwLDQ1LDI0LDExNSwyNTUsMTE5LDYyLDI1NCwwLDE5NiwyMjUsMTg2LDI1NCwxMjMsMTQxLDE3MiwwLDI2LDg1LDQxLDI1NSwyMjYsMTExLDE4MywwLDIxMywyMzEsMTUxLDAsNCw1OSw3LDI1NSwyMzgsMTM4LDE0OCwwLDY2LDE0NywzMywyNTUsMzEsMjQ2LDE0MSwyNTUsMjA5LDE0MSwxMTYsMjU1LDEwNCwxMTIsMzEsMCw4OCwxNjEsMTcyLDAsODMsMjE1LDIzMCwyNTQsNDcsMTExLDE1MSwwLDQ1LDM4LDUyLDEsMTMyLDQ1LDIwNCwwLDEzOCwxMjgsMTA5LDI1NCwyMzMsMTE3LDEzNCwyNTUsMjQzLDE5MCwxNzMsMjU0LDI0MSwyMzYsMjQwLDAsODIsMTI3LDIzNiwyNTQsNDAsMjIzLDE2MSwyNTUsMTEwLDE4MiwyMjUsMjU1LDEyMywxNzQsMjM5LDAsMTM1LDI0MiwxNDUsMSw1MSwyMDksMTU0LDAsMTUwLDMsMTE1LDI1NCwyMTcsMTY0LDI1MiwyNTUsNTUsMTU2LDY5LDEsODQsOTQsMjU1LDI1NSwyMzIsNzMsNDUsMSwyMCwxOSwyMTIsMjU1LDk2LDE5Nyw1OSwyNTQsOTYsMjUxLDMzLDAsMzgsMTk5LDczLDEsNjQsMTcyLDI0NywyNTUsMTE3LDExNiw1NiwyNTUsMjI4LDE3LDE4LDAsNjIsMTM4LDEwMywxLDI0NiwyMjksMTY0LDI1NSwyNDQsMTE4LDIwMSwyNTQsODYsMzIsMTU5LDI1NSwxMDksMzQsMTM3LDEsODUsMjExLDE4NiwwLDEwLDE5MywxOTMsMjU0LDEyMiwxOTQsMTc3LDAsMTIyLDIzOCwxMDIsMjU1LDE2MiwyMTgsMTcxLDAsMTA4LDIxNywxNjEsMSwxNTgsMTcwLDM0LDAsMTc2LDQ3LDE1NSwxLDE4MSwyMjgsMTEsMjU1LDgsMTU2LDAsMCwxNiw3NSw5MywwLDIwNiw5OCwyNTUsMSw1OCwxNTQsMzUsMCwxMiwyNDMsMTg0LDI1NCw2NywxMTcsNjYsMjU1LDIzMCwyMjksMTIzLDAsMjAxLDQyLDExMCwwLDEzNCwyMjgsMTc4LDI1NCwxODYsMTA4LDExOCwyNTUsNTgsMTksMTU0LDI1NSw4MiwxNjksNjIsMjU1LDExNCwxNDMsMTE1LDEsMjM5LDE5Niw1MCwyNTUsMTczLDQ4LDE5MywyNTUsMTQ3LDIsODQsMjU1LDE1MCwxMzQsMTQ3LDI1NCw5NSwyMzIsNzMsMCwxMDksMjI3LDUyLDI1NCwxOTEsMTM3LDEwLDAsNDAsMjA0LDMwLDI1NCw3Niw1Miw5NywyNTUsMTY0LDIzNSwxMjYsMCwyNTQsMTI0LDE4OCwwLDc0LDE4MiwyMSwxLDEyMSwyOSwzNSwyNTUsMjQxLDMwLDcsMjU0LDg1LDIxOCwyMTQsMjU1LDcsODQsMTUwLDI1NCw4MSwyNywxMTcsMjU1LDE2MCwxNTksMTUyLDI1NCw2NiwyNCwyMjEsMjU1LDIyNywxMCw2MCwxLDE0MSwxMzUsMTAyLDAsMjA4LDE4OSwxNTAsMSwxMTcsMTc5LDkyLDAsMTMyLDIyLDEzNiwyNTUsMTIwLDE5OSwyOCwwLDIxLDEyOSw3OSwyNTQsMTgyLDksNjUsMCwyMTgsMTYzLDE2OSwwLDI0NiwxNDcsMTk4LDI1NSwxMDcsMzgsMTQ0LDEsNzgsMTc1LDIwNSwyNTUsMjE0LDUsMjUwLDI1NCw0Nyw4OCwyOSwyNTUsMTY0LDQ3LDIwNCwyNTUsNDMsNTUsNiwyNTUsMTMxLDEzNCwyMDcsMjU0LDExNiwxMDAsMjE0LDAsOTYsMTQwLDc1LDEsMTA2LDIyMCwxNDQsMCwxOTUsMzIsMjgsMSwxNzIsODEsNSwyNTUsMTk5LDE3OSw1MiwyNTUsMzcsODQsMjAzLDAsMTcwLDExMiwxNzQsMCwxMSw0LDkxLDAsNjksMjQ0LDI3LDEsMTE3LDEzMSw5MiwwLDMzLDE1MiwxNzUsMjU1LDE0MCwxNTMsMTA3LDI1NSwyNTEsMTM1LDQzLDI1NCw4NywxMzgsNCwyNTUsMTk4LDIzNCwxNDcsMjU0LDEyMSwxNTIsODQsMjU1LDIwNSwxMDEsMTU1LDEsMTU3LDksMjUsMCw3MiwxMDYsMTcsMjU0LDEwOCwxNTMsMCwyNTUsMTg5LDIyOSwxODYsMCwxOTMsOCwxNzYsMjU1LDE3NCwxNDksMjA5LDAsMjM4LDEzMCwyOSwwLDIzMywyMTQsMTI2LDEsNjEsMjI2LDEwMiwwLDU3LDE2Myw0LDEsMTk4LDExMSw1MSwyNTUsNDUsNzksNzgsMSwxMTUsMjEwLDEwLDI1NSwyMTgsOSwyNSwyNTUsMTU4LDEzOSwxOTgsMjU1LDIxMSw4MiwxODcsMjU0LDgwLDEzMyw4MywwLDE1NywxMjksMjMwLDEsMjQzLDEzMywxMzQsMjU1LDQwLDEzNiwxNiwwLDc3LDEwNyw3OSwyNTUsMTgzLDg1LDkyLDEsMTc3LDIwNCwyMDIsMCwxNjMsNzEsMTQ3LDI1NSwxNTIsNjksMTkwLDAsMTcyLDUxLDE4OCwxLDI1MCwyMTAsMTcyLDI1NSwyMTEsMjQyLDExMywxLDg5LDg5LDI2LDI1NSw2NCw2NiwxMTEsMjU0LDExNiwxNTIsNDIsMCwxNjEsMzksMjcsMjU1LDU0LDgwLDI1NCwwLDEwNiwyMDksMTE1LDEsMTAzLDEyNCw5NywwLDIyMSwyMzAsOTgsMjU1LDMxLDIzMSw2LDAsMTc4LDE5MiwxMjAsMjU0LDE1LDIxNywyMDMsMjU1LDEyNCwxNTgsNzksMCwxMTIsMTQ1LDI0NywwLDkyLDI1MCw0OCwxLDE2MywxODEsMTkzLDI1NSwzNyw0NywxNDIsMjU0LDE0NCwxODksMTY1LDI1NSw0NiwxNDYsMjQwLDAsNiw3NSwxMjgsMCw0MSwxNTcsMjAwLDI1NCw4NywxMjEsMjEzLDAsMSwxMTMsMjM2LDAsNSw0NSwyNTAsMCwxNDQsMTIsODIsMCwzMSwxMDgsMjMxLDAsMjI1LDIzOSwxMTksMjU1LDE2Nyw3LDE4OSwyNTUsMTg3LDIyOCwxMzIsMjU1LDExMCwxODksMzQsMCw5NCw0NCwyMDQsMSwxNjIsNTIsMTk3LDAsNzgsMTg4LDI0MSwyNTQsNTcsMjAsMTQxLDAsMjQ0LDE0Niw0NywxLDIwNiwxMDAsNTEsMCwxMjUsMTA3LDE0OCwyNTQsMjcsMTk1LDc3LDAsMTUyLDI1Myw5MCwxLDcsMTQzLDE0NCwyNTUsNTEsMzcsMzEsMCwzNCwxMTksMzgsMjU1LDcsMTk3LDExOCwwLDE1MywxODgsMjExLDAsMTUxLDIwLDExNiwyNTQsMjQ1LDY1LDUyLDI1NSwxODAsMjUzLDExMCwxLDQ3LDE3NywyMDksMCwxNjEsOTksMTcsMjU1LDExOCwyMjIsMjAyLDAsMTI1LDE3OSwyNTIsMSwxMjMsNTQsMTI2LDI1NSwxNDUsNTcsMTkxLDAsNTUsMTg2LDEyMSwwLDEwLDI0MywxMzgsMCwyMDUsMjExLDIyOSwyNTUsMTI1LDE1NiwyNDEsMjU0LDE0OCwxNTYsMTg1LDI1NSwyMjcsMTksMTg4LDI1NSwxMjQsNDEsMzIsMjU1LDMxLDM0LDIwNiwyNTQsMTcsNTcsODMsMCwyMDQsMjIsMzcsMjU1LDQyLDk2LDk4LDAsMTE5LDEwMiwxODQsMSwzLDE5MCwyOF0sXCJpOFwiLEFMTE9DX05PTkUsUnVudGltZS5HTE9CQUxfQkFTRSsyMDQ4MCk7YWxsb2NhdGUoWzExMCw4MiwyMTgsMjU1LDIwMCwyMDQsMTkyLDI1NSwyMDEsMTQ1LDExOCwwLDExNywyMDQsMTQ2LDAsMTMyLDMyLDk4LDEsMTkyLDE5NCwxMjEsMCwxMDYsMTYxLDI0OCwxLDIzNyw4OCwxMjQsMCwyMywyMTIsMjYsMCwyMDUsMTcxLDkwLDI1NSwyNDgsNDgsMjE2LDEsMTQxLDM3LDIzMCwyNTUsMTI0LDIwMywwLDI1NCwxNTgsMTY4LDMwLDI1NSwyMTQsMjQ4LDIxLDAsMTEyLDE4Nyw3LDI1NSw3NSwxMzMsMjM5LDI1NSw3NCwyMjcsMjQzLDI1NSwyNTAsMTQ3LDcwLDAsMjE0LDEyMCwxNjIsMCwxNjcsOSwxNzksMjU1LDIyLDE1OCwxOCwwLDIxOCw3NywyMDksMSw5NywxMDksODEsMjU1LDI0NCwzMywxNzksMjU1LDU3LDUyLDU3LDI1NSw2NSwxNzIsMjEwLDI1NSwyNDksNzEsMjA5LDI1NSwxNDIsMTY5LDIzOCwwLDE1OCwxODksMTUzLDI1NSwxNzQsMjU0LDEwMywyNTQsOTgsMzMsMTQsMCwxNDEsNzYsMjMwLDI1NSwxMTMsMTM5LDUyLDI1NSwxNSw1OCwyMTIsMCwxNjgsMjE1LDIwMSwyNTUsMjQ4LDIwNCwyMTUsMSwyMjMsNjgsMTYwLDI1NSw1NywxNTQsMTgzLDI1NCw0NywyMzEsMTIxLDAsMTA2LDE2NiwxMzcsMCw4MSwxMzYsMTM4LDAsMTY1LDQzLDUxLDAsMjMxLDEzOSw2MSwwLDU3LDk1LDU5LDI1NCwxMTgsOTgsMjUsMjU1LDE1MSw2MywyMzYsMSw5NCwxOTAsMjUwLDI1NSwxNjksMTg1LDExNCwxLDUsMjUwLDU4LDI1NSw3NSwxMDUsOTcsMSwyMTUsMjIzLDEzNCwwLDExMyw5OSwxNjMsMSwxMjgsNjIsMTEyLDAsOTksMTA2LDE0NywwLDE2MywxOTUsMTAsMCwzMywyMDUsMTgyLDAsMjE0LDE0LDE3NCwyNTUsMTI5LDM4LDIzMSwyNTUsNTMsMTgyLDIyMywwLDk4LDQyLDE1OSwyNTUsMjQ3LDEzLDQwLDAsMTg4LDIxMCwxNzcsMSw2LDIxLDAsMjU1LDI1NSw2MSwxNDgsMjU0LDEzNyw0NSwxMjksMjU1LDg5LDI2LDExNiwyNTQsMTI2LDM4LDExNCwwLDI1MSw1MCwyNDIsMjU0LDEyMSwxMzQsMTI4LDI1NSwyMDQsMjQ5LDE2NywyNTQsMTY1LDIzNSwyMTUsMCwyMDIsMTc3LDI0MywwLDEzMywxNDEsNjIsMCwyNDAsMTMwLDE5MCwxLDExMCwxNzUsMjU1LDAsMCwyMCwxNDYsMSwzNywyMTAsMTIxLDI1NSw3LDM5LDEzMCwwLDE0MiwyNTAsODQsMjU1LDE0MSwyMDAsMjA3LDAsOSw5NSwxMDQsMjU1LDExLDI0NCwxNzQsMCwxMzQsMjMyLDEyNiwwLDE2NywxLDEyMywyNTQsMTYsMTkzLDE0OSwyNTUsMjMyLDIzMywyMzksMSwyMTMsNzAsMTEyLDI1NSwyNTIsMTE2LDE2MCwyNTQsMjQyLDIyMiwyMjAsMjU1LDIwNSw4NSwyMjcsMCw3LDE4NSw1OCwwLDExOCwyNDcsNjMsMSwxMTYsNzcsMTc3LDI1NSw2MiwyNDUsMjAwLDI1NCw2MywxOCwzNywyNTUsMTA3LDUzLDIzMiwyNTQsNTAsMjIxLDIxMSwwLDE2MiwyMTksNywyNTQsMiw5NCw0MywwLDE4Miw2MiwxODIsMjU0LDE2MCw3OCwyMDAsMjU1LDEzNSwxNDAsMTcwLDAsMjM1LDE4NCwyMjgsMCwxNzUsNTMsMTM4LDI1NCw4MCw1OCw3NywyNTUsMTUyLDIwMSwyLDEsNjMsMTk2LDM0LDAsNSwzMCwxODQsMCwxNzEsMTc2LDE1NCwwLDEyMSw1OSwyMDYsMCwzOCw5OSwzOSwwLDE3Miw4MCw3NywyNTQsMCwxMzQsMTUxLDAsMTg2LDMzLDI0MSwyNTQsOTQsMjUzLDIyMywyNTUsNDQsMTE0LDI1MiwwLDEwOCwxMjYsNTcsMjU1LDIwMSw0MCwxMywyNTUsMzksMjI5LDI3LDI1NSwzOSwyMzksMjMsMSwxNTEsMTIxLDUxLDI1NSwxNTMsMTUwLDI0OCwwLDEwLDIzNCwxNzQsMjU1LDExOCwyNDYsNCwyNTQsMjAwLDI0NSwzOCwwLDY5LDE2MSwyNDIsMSwxNiwxNzgsMTUwLDAsMTEzLDU2LDEzMCwwLDE3MSwzMSwxMDUsMCwyNiw4OCwxMDgsMjU1LDQ5LDQyLDEwNiwwLDI1MSwxNjksNjYsMCw2OSw5MywxNDksMCwyMCw1NywyNTQsMCwxNjQsMjUsMTExLDAsOTAsMTg4LDkwLDI1NSwyMDQsNCwxOTcsMCw0MCwyMTMsNTAsMSwyMTIsOTYsMTMyLDI1NSw4OCwxMzgsMTgwLDI1NCwyMjgsMTQ2LDEyNCwyNTUsMTg0LDI0NiwyNDcsMCw2NSwxMTcsODYsMjU1LDI1MywxMDIsMjEwLDI1NCwyNTQsMTIxLDM2LDAsMTM3LDExNSwzLDI1NSw2MCwyNCwyMTYsMCwxMzQsMTgsMjksMCw1OSwyMjYsOTcsMCwxNzYsMTQyLDcxLDAsNywyMDksMTYxLDAsMTg5LDg0LDUxLDI1NCwxNTUsMjUwLDcyLDAsMjEzLDg0LDIzNSwyNTUsNDUsMjIyLDIyNCwwLDIzOCwxNDgsMTQzLDI1NSwxNzAsNDIsNTMsMjU1LDc4LDE2NywxMTcsMCwxODYsMCw0MCwyNTUsMTI1LDE3NywxMDMsMjU1LDY5LDIyNSw2NiwwLDIyNyw3LDg4LDEsNzUsMTcyLDYsMCwxNjksNDUsMjI3LDEsMTYsMzYsNzAsMjU1LDUwLDIsOSwyNTUsMTM5LDE5MywyMiwwLDE0MywxODMsMjMxLDI1NCwyMTgsNjksNTAsMCwyMzYsNTYsMTYxLDEsMjEzLDEzMSw0MiwwLDEzOCwxNDUsNDQsMjU0LDEzNiwyMjksNDAsMjU1LDQ5LDYzLDM1LDI1NSw2MSwxNDUsMjQ1LDI1NSwxMDEsMTkyLDIsMjU0LDIzMiwxNjcsMTEzLDAsMTUyLDEwNCwzOCwxLDEyMSwxODUsMjE4LDAsMTIxLDEzOSwyMTEsMjU0LDExOSwyNDAsMzUsMCw2NSwxODksMjE3LDI1NCwxODcsMTc5LDE2MiwyNTUsMTYwLDE4NywyMzAsMCw2MiwyNDgsMTQsMjU1LDYwLDc4LDk3LDAsMjU1LDI0NywxNjMsMjU1LDIyNSw1OSw5MSwyNTUsMTA3LDcxLDU4LDI1NSwyNDEsNDcsMzMsMSw1MCwxMTcsMjM2LDAsMjE5LDE3Nyw2MywyNTQsMjQ0LDkwLDE3OSwwLDM1LDE5NCwyMTUsMjU1LDE4OSw2Nyw1MCwyNTUsMjMsMTM1LDEyOSwwLDEwNCwxODksMzcsMjU1LDE4NSw1NywxOTQsMCwzNSw2MiwyMzEsMjU1LDIyMCwyNDgsMTA4LDAsMTIsMjMxLDE3OCwwLDE0Myw4MCw5MSwxLDEzMSw5MywxMDEsMjU1LDE0NCwzOSwyLDEsMjU1LDI1MCwxNzgsMCw1LDE3LDIzNiwyNTQsMTM5LDMyLDQ2LDAsMjA0LDE4OCwzOCwyNTQsMjQ1LDExNSw1MiwyNTUsMTkxLDExMyw3MywyNTQsMTkxLDEwOCw2OSwyNTUsMjIsNjksMjQ1LDEsMjMsMjAzLDE3OCwwLDE3MCw5OSwxNzAsMCw2NSwyNDgsMTExLDAsMzcsMTA4LDE1MywyNTUsNjQsMzcsNjksMCwwLDg4LDYyLDI1NCw4OSwxNDgsMTQ0LDI1NSwxOTEsNjgsMjI0LDEsMjQxLDM5LDUzLDAsNDEsMjAzLDIzNywyNTUsMTQ1LDEyNiwxOTQsMjU1LDIyMSw0MiwyNTMsMjU1LDI1LDk5LDE1MSwwLDk3LDI1MywyMjMsMSw3NCwxMTUsNDksMjU1LDYsMTc1LDcyLDI1NSw1OSwxNzYsMjAzLDAsMTI0LDE4MywyNDksMSwyMjgsMjI4LDk5LDAsMTI5LDEyLDIwNywyNTQsMTY4LDE5MiwxOTUsMjU1LDIwNCwxNzYsMTYsMjU0LDE1MiwyMzQsMTcxLDAsNzcsMzcsODUsMjU1LDMzLDEyMCwxMzUsMjU1LDE0MiwxOTQsMjI3LDEsMzEsMjE0LDU4LDAsMjEzLDE4NywxMjUsMjU1LDIzMiw0Niw2MCwyNTUsMTkwLDExNiw0MiwyNTQsMTUxLDE3OCwxOSwyNTUsNTEsNjIsMjM3LDI1NCwyMDQsMjM2LDE5MywwLDE5NCwyMzIsNjAsMCwxNzIsMzQsMTU3LDI1NSwxODksMTYsMTg0LDI1NCwxMDMsMyw5NSwyNTUsMTQxLDIzMywzNiwyNTQsNDEsMjUsMTEsMjU1LDIxLDE5NSwxNjYsMCwxMTgsMjQ1LDQ1LDAsNjcsMjEzLDE0OSwyNTUsMTU5LDEyLDE4LDI1NSwxODcsMTY0LDIyNywxLDE2MCwyNSw1LDAsMTIsNzgsMTk1LDEsNDMsMTk3LDIyNSwwLDQ4LDE0Miw0MSwyNTQsMTk2LDE1NSw2MCwyNTUsMjIzLDE5OSwxOCwxLDE0NSwxMzYsMTU2LDAsMjUyLDExNywxNjksMjU0LDE0NSwyMjYsMjM4LDAsMjM5LDIzLDEwNywwLDEwOSwxODEsMTg4LDI1NSwyMzAsMTEyLDQ5LDI1NCw3MywxNzAsMjM3LDI1NSwyMzEsMTgzLDIyNywyNTUsODAsMjIwLDIwLDAsMTk0LDEwNywxMjcsMSwxMjcsMjA1LDEwMSwwLDQ2LDUyLDE5NywxLDIxMCwxNzEsMzYsMjU1LDg4LDMsOTAsMjU1LDU2LDE1MSwxNDEsMCw5NiwxODcsMjU1LDI1NSw0Miw3OCwyMDAsMCwyNTQsNzAsNzAsMSwyNDQsMTI1LDE2OCwwLDIwNCw2OCwxMzgsMSwxMjQsMjE1LDcwLDAsMTAyLDY2LDIwMCwyNTQsMTcsNTIsMjI4LDAsMTE3LDIyMCwxNDMsMjU0LDIwMywyNDgsMTIzLDAsNTYsMTgsMTc0LDI1NSwxODYsMTUxLDE2NCwyNTUsNTEsMjMyLDIwOCwxLDE2MCwyMjgsNDMsMjU1LDI0OSwyOSwyNSwxLDY4LDE5MCw2MywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMjQsMTI0LDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxOCwwLDAsMCwxOSwwLDAsMCw2NSwxMzIsMCwwLDAsNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEwLDI1NSwyNTUsMjU1LDI1NSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEwMSwxMjAsMTEyLDk3LDExMCwxMDAsMzIsNTEsNTAsNDUsOTgsMTIxLDExNiwxMDEsMzIsMTA3LDExMSwxMTcsMTE2LDEwOCwxMDEsMTEwLDMyLDYwLDYxLDMyLDg1LDczLDc4LDg0LDU2LDk1LDc3LDY1LDg4LDAsOTksMTE0LDEyMSwxMTIsMTE2LDExMSw5NSwxMDMsMTAxLDExMCwxMDEsMTE0LDEwNSw5OSwxMDQsOTcsMTE1LDEwNCw0Nyw5OCwxMDgsOTcsMTA3LDEwMSw1MCw0NywxMTQsMTAxLDEwMiw0NywxMDMsMTAxLDExMCwxMDEsMTE0LDEwNSw5OSwxMDQsOTcsMTE1LDEwNCw5NSw5OCwxMDgsOTcsMTA3LDEwMSw1MCw5OCw0Niw5OSwwLDk5LDExNCwxMjEsMTEyLDExNiwxMTEsOTUsMTAzLDEwMSwxMTAsMTAxLDExNCwxMDUsOTksMTA0LDk3LDExNSwxMDQsOTUsOTgsMTA4LDk3LDEwNywxMDEsNTAsOTgsMCwxMDcsMTAxLDEyMSwxMDgsMTAxLDExMCwzMiw2MCw2MSwzMiw4NSw3Myw3OCw4NCw1Niw5NSw3Nyw2NSw4OCwwLDk5LDExNCwxMjEsMTEyLDExNiwxMTEsOTUsMTAzLDEwMSwxMTAsMTAxLDExNCwxMDUsOTksMTA0LDk3LDExNSwxMDQsOTUsOTgsMTA4LDk3LDEwNywxMDEsNTAsOTgsOTUsMTA1LDExMCwxMDUsMTE2LDAsOTksMTE0LDEyMSwxMTIsMTE2LDExMSw5NSwxMDMsMTAxLDExMCwxMDEsMTE0LDEwNSw5OSwxMDQsOTcsMTE1LDEwNCw5NSw5OCwxMDgsOTcsMTA3LDEwMSw1MCw5OCw5NSwxMDIsMTA1LDExMCw5NywxMDgsMCwxMjgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTI4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMzYsNTUsMzYsMCwxMDEsMTIwLDExMiw5NywxMTAsMTAwLDMyLDUxLDUwLDQ1LDk4LDEyMSwxMTYsMTAxLDMyLDEwNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTIzLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAzLDEwMSwxMTYsODIsOTcsMTEwLDEwMCwxMTEsMTA5LDg2LDk3LDEwOCwxMTcsMTAxLDQwLDQxLDU5LDMyLDEyNSwwLDEyMywzMiwxMDUsMTAyLDMyLDQwLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAzLDEwMSwxMTYsODIsOTcsMTEwLDEwMCwxMTEsMTA5LDg2LDk3LDEwOCwxMTcsMTAxLDMyLDYxLDYxLDYxLDMyLDExNywxMTAsMTAwLDEwMSwxMDIsMTA1LDExMCwxMDEsMTAwLDQxLDMyLDEyMywzMiwxMTYsMTE0LDEyMSwzMiwxMjMsMzIsMTE4LDk3LDExNCwzMiwxMTksMTA1LDExMCwxMDAsMTExLDExOSw5NSwzMiw2MSwzMiwzNCwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzQsMzIsNjEsNjEsNjEsMzIsMTE2LDEyMSwxMTIsMTAxLDExMSwxMDIsMzIsMTE5LDEwNSwxMTAsMTAwLDExMSwxMTksMzIsNjMsMzIsMTE5LDEwNSwxMTAsMTAwLDExMSwxMTksMzIsNTgsMzIsMTE1LDEwMSwxMDgsMTAyLDQ0LDMyLDk5LDExNCwxMjEsMTEyLDExNiwxMTEsOTUsMzIsNjEsMzIsMTE2LDEyMSwxMTIsMTAxLDExMSwxMDIsMzIsMTE5LDEwNSwxMTAsMTAwLDExMSwxMTksOTUsNDYsOTksMTE0LDEyMSwxMTIsMTE2LDExMSwzMiwzMyw2MSw2MSwzMiwzNCwxMTcsMTEwLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTAxLDEwMCwzNCwzMiw2MywzMiwxMTksMTA1LDExMCwxMDAsMTExLDExOSw5NSw0Niw5OSwxMTQsMTIxLDExMiwxMTYsMTExLDMyLDU4LDMyLDExOSwxMDUsMTEwLDEwMCwxMTEsMTE5LDk1LDQ2LDEwOSwxMTUsNjcsMTE0LDEyMSwxMTIsMTE2LDExMSw0NCwzMiwxMTQsOTcsMTEwLDEwMCwxMTEsMTA5LDg2LDk3LDEwOCwxMTcsMTAxLDExNSw4MywxMTYsOTcsMTEwLDEwMCw5NywxMTQsMTAwLDMyLDYxLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCw0MCw0MSwzMiwxMjMsMzIsMTE4LDk3LDExNCwzMiw5OCwxMTcsMTAyLDMyLDYxLDMyLDExMCwxMDEsMTE5LDMyLDg1LDEwNSwxMTAsMTE2LDUxLDUwLDY1LDExNCwxMTQsOTcsMTIxLDQwLDQ5LDQxLDU5LDMyLDk5LDExNCwxMjEsMTEyLDExNiwxMTEsOTUsNDYsMTAzLDEwMSwxMTYsODIsOTcsMTEwLDEwMCwxMTEsMTA5LDg2LDk3LDEwOCwxMTcsMTAxLDExNSw0MCw5OCwxMTcsMTAyLDQxLDU5LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDk4LDExNywxMDIsOTEsNDgsOTMsMzIsNjIsNjIsNjIsMzIsNDgsNTksMzIsMTI1LDU5LDMyLDExNCw5NywxMTAsMTAwLDExMSwxMDksODYsOTcsMTA4LDExNywxMDEsMTE1LDgzLDExNiw5NywxMTAsMTAwLDk3LDExNCwxMDAsNDAsNDEsNTksMzIsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMDMsMTAxLDExNiw4Miw5NywxMTAsMTAwLDExMSwxMDksODYsOTcsMTA4LDExNywxMDEsMzIsNjEsMzIsMTE0LDk3LDExMCwxMDAsMTExLDEwOSw4Niw5NywxMDgsMTE3LDEwMSwxMTUsODMsMTE2LDk3LDExMCwxMDAsOTcsMTE0LDEwMCw1OSwzMiwxMjUsMzIsOTksOTcsMTE2LDk5LDEwNCwzMiw0MCwxMDEsNDEsMzIsMTIzLDMyLDExNiwxMTQsMTIxLDMyLDEyMywzMiwxMTgsOTcsMTE0LDMyLDk5LDExNCwxMjEsMTEyLDExNiwxMTEsMzIsNjEsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDQwLDM5LDk5LDExNCwxMjEsMTEyLDExNiwxMTEsMzksNDEsNDQsMzIsMTE0LDk3LDExMCwxMDAsMTExLDEwOSw4Niw5NywxMDgsMTE3LDEwMSw3OCwxMTEsMTAwLDEwMSw3NCw4MywzMiw2MSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsNDAsNDEsMzIsMTIzLDMyLDExOCw5NywxMTQsMzIsOTgsMTE3LDEwMiwzMiw2MSwzMiw5OSwxMTQsMTIxLDExMiwxMTYsMTExLDQ2LDExNCw5NywxMTAsMTAwLDExMSwxMDksNjYsMTIxLDExNiwxMDEsMTE1LDQwLDUyLDQxLDU5LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDQwLDk4LDExNywxMDIsOTEsNDgsOTMsMzIsNjAsNjAsMzIsNTAsNTIsMzIsMTI0LDMyLDk4LDExNywxMDIsOTEsNDksOTMsMzIsNjAsNjAsMzIsNDksNTQsMzIsMTI0LDMyLDk4LDExNywxMDIsOTEsNTAsOTMsMzIsNjAsNjAsMzIsNTYsMzIsMTI0LDMyLDk4LDExNywxMDIsOTEsNTEsOTMsNDEsMzIsNjIsNjIsNjIsMzIsNDgsNTksMzIsMTI1LDU5LDMyLDExNCw5NywxMTAsMTAwLDExMSwxMDksODYsOTcsMTA4LDExNywxMDEsNzgsMTExLDEwMCwxMDEsNzQsODMsNDAsNDEsNTksMzIsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMDMsMTAxLDExNiw4Miw5NywxMTAsMTAwLDExMSwxMDksODYsOTcsMTA4LDExNywxMDEsMzIsNjEsMzIsMTE0LDk3LDExMCwxMDAsMTExLDEwOSw4Niw5NywxMDgsMTE3LDEwMSw3OCwxMTEsMTAwLDEwMSw3NCw4Myw1OSwzMiwxMjUsMzIsOTksOTcsMTE2LDk5LDEwNCwzMiw0MCwxMDEsNDEsMzIsMTIzLDMyLDExNiwxMDQsMTE0LDExMSwxMTksMzIsMzksNzgsMTExLDMyLDExNSwxMDEsOTksMTE3LDExNCwxMDEsMzIsMTE0LDk3LDExMCwxMDAsMTExLDEwOSwzMiwxMTAsMTE3LDEwOSw5OCwxMDEsMTE0LDMyLDEwMywxMDEsMTEwLDEwMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTAyLDExMSwxMTcsMTEwLDEwMCwzOSw1OSwzMiwxMjUsMzIsMTI1LDMyLDEyNSwzMiwxMjUsMCw0OSw0Niw0OCw0Niw1NCwwLDksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMDEsMTIwLDExMiw5NywxMTAsMTAwLDMyLDUxLDUwLDQ1LDk4LDEyMSwxMTYsMTAxLDMyLDEwNywxMDEsMTIwLDExMiw5NywxMTAsMTAwLDMyLDUxLDUwLDQ1LDk4LDEyMSwxMTYsMTAxLDMyLDEwN10sXCJpOFwiLEFMTE9DX05PTkUsUnVudGltZS5HTE9CQUxfQkFTRSszMDcyMCk7YWxsb2NhdGUoWzQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMF0sXCJpOFwiLEFMTE9DX05PTkUsUnVudGltZS5HTE9CQUxfQkFTRSszNDg3Myk7dmFyIHRlbXBEb3VibGVQdHI9UnVudGltZS5hbGlnbk1lbW9yeShhbGxvY2F0ZSgxMixcImk4XCIsQUxMT0NfU1RBVElDKSw4KTthc3NlcnQodGVtcERvdWJsZVB0ciU4PT0wKTtmdW5jdGlvbiBjb3B5VGVtcEZsb2F0KHB0cil7SEVBUDhbdGVtcERvdWJsZVB0cl09SEVBUDhbcHRyXTtIRUFQOFt0ZW1wRG91YmxlUHRyKzFdPUhFQVA4W3B0cisxXTtIRUFQOFt0ZW1wRG91YmxlUHRyKzJdPUhFQVA4W3B0cisyXTtIRUFQOFt0ZW1wRG91YmxlUHRyKzNdPUhFQVA4W3B0ciszXX1mdW5jdGlvbiBjb3B5VGVtcERvdWJsZShwdHIpe0hFQVA4W3RlbXBEb3VibGVQdHJdPUhFQVA4W3B0cl07SEVBUDhbdGVtcERvdWJsZVB0cisxXT1IRUFQOFtwdHIrMV07SEVBUDhbdGVtcERvdWJsZVB0cisyXT1IRUFQOFtwdHIrMl07SEVBUDhbdGVtcERvdWJsZVB0ciszXT1IRUFQOFtwdHIrM107SEVBUDhbdGVtcERvdWJsZVB0cis0XT1IRUFQOFtwdHIrNF07SEVBUDhbdGVtcERvdWJsZVB0cis1XT1IRUFQOFtwdHIrNV07SEVBUDhbdGVtcERvdWJsZVB0cis2XT1IRUFQOFtwdHIrNl07SEVBUDhbdGVtcERvdWJsZVB0cis3XT1IRUFQOFtwdHIrN119ZnVuY3Rpb24gX19fc2V0RXJyTm8odmFsdWUpe2lmKE1vZHVsZVtcIl9fX2Vycm5vX2xvY2F0aW9uXCJdKUhFQVAzMltNb2R1bGVbXCJfX19lcnJub19sb2NhdGlvblwiXSgpPj4yXT12YWx1ZTtyZXR1cm4gdmFsdWV9dmFyIEVSUk5PX0NPREVTPXtFUEVSTToxLEVOT0VOVDoyLEVTUkNIOjMsRUlOVFI6NCxFSU86NSxFTlhJTzo2LEUyQklHOjcsRU5PRVhFQzo4LEVCQURGOjksRUNISUxEOjEwLEVBR0FJTjoxMSxFV09VTERCTE9DSzoxMSxFTk9NRU06MTIsRUFDQ0VTOjEzLEVGQVVMVDoxNCxFTk9UQkxLOjE1LEVCVVNZOjE2LEVFWElTVDoxNyxFWERFVjoxOCxFTk9ERVY6MTksRU5PVERJUjoyMCxFSVNESVI6MjEsRUlOVkFMOjIyLEVORklMRToyMyxFTUZJTEU6MjQsRU5PVFRZOjI1LEVUWFRCU1k6MjYsRUZCSUc6MjcsRU5PU1BDOjI4LEVTUElQRToyOSxFUk9GUzozMCxFTUxJTks6MzEsRVBJUEU6MzIsRURPTTozMyxFUkFOR0U6MzQsRU5PTVNHOjQyLEVJRFJNOjQzLEVDSFJORzo0NCxFTDJOU1lOQzo0NSxFTDNITFQ6NDYsRUwzUlNUOjQ3LEVMTlJORzo0OCxFVU5BVENIOjQ5LEVOT0NTSTo1MCxFTDJITFQ6NTEsRURFQURMSzozNSxFTk9MQ0s6MzcsRUJBREU6NTIsRUJBRFI6NTMsRVhGVUxMOjU0LEVOT0FOTzo1NSxFQkFEUlFDOjU2LEVCQURTTFQ6NTcsRURFQURMT0NLOjM1LEVCRk9OVDo1OSxFTk9TVFI6NjAsRU5PREFUQTo2MSxFVElNRTo2MixFTk9TUjo2MyxFTk9ORVQ6NjQsRU5PUEtHOjY1LEVSRU1PVEU6NjYsRU5PTElOSzo2NyxFQURWOjY4LEVTUk1OVDo2OSxFQ09NTTo3MCxFUFJPVE86NzEsRU1VTFRJSE9QOjcyLEVET1RET1Q6NzMsRUJBRE1TRzo3NCxFTk9UVU5JUTo3NixFQkFERkQ6NzcsRVJFTUNIRzo3OCxFTElCQUNDOjc5LEVMSUJCQUQ6ODAsRUxJQlNDTjo4MSxFTElCTUFYOjgyLEVMSUJFWEVDOjgzLEVOT1NZUzozOCxFTk9URU1QVFk6MzksRU5BTUVUT09MT05HOjM2LEVMT09QOjQwLEVPUE5PVFNVUFA6OTUsRVBGTk9TVVBQT1JUOjk2LEVDT05OUkVTRVQ6MTA0LEVOT0JVRlM6MTA1LEVBRk5PU1VQUE9SVDo5NyxFUFJPVE9UWVBFOjkxLEVOT1RTT0NLOjg4LEVOT1BST1RPT1BUOjkyLEVTSFVURE9XTjoxMDgsRUNPTk5SRUZVU0VEOjExMSxFQUREUklOVVNFOjk4LEVDT05OQUJPUlRFRDoxMDMsRU5FVFVOUkVBQ0g6MTAxLEVORVRET1dOOjEwMCxFVElNRURPVVQ6MTEwLEVIT1NURE9XTjoxMTIsRUhPU1RVTlJFQUNIOjExMyxFSU5QUk9HUkVTUzoxMTUsRUFMUkVBRFk6MTE0LEVERVNUQUREUlJFUTo4OSxFTVNHU0laRTo5MCxFUFJPVE9OT1NVUFBPUlQ6OTMsRVNPQ0tUTk9TVVBQT1JUOjk0LEVBRERSTk9UQVZBSUw6OTksRU5FVFJFU0VUOjEwMixFSVNDT05OOjEwNixFTk9UQ09OTjoxMDcsRVRPT01BTllSRUZTOjEwOSxFVVNFUlM6ODcsRURRVU9UOjEyMixFU1RBTEU6MTE2LEVOT1RTVVA6OTUsRU5PTUVESVVNOjEyMyxFSUxTRVE6ODQsRU9WRVJGTE9XOjc1LEVDQU5DRUxFRDoxMjUsRU5PVFJFQ09WRVJBQkxFOjEzMSxFT1dORVJERUFEOjEzMCxFU1RSUElQRTo4Nn07ZnVuY3Rpb24gX3N5c2NvbmYobmFtZSl7c3dpdGNoKG5hbWUpe2Nhc2UgMzA6cmV0dXJuIFBBR0VfU0laRTtjYXNlIDg1OnJldHVybiB0b3RhbE1lbW9yeS9QQUdFX1NJWkU7Y2FzZSAxMzI6Y2FzZSAxMzM6Y2FzZSAxMjpjYXNlIDEzNzpjYXNlIDEzODpjYXNlIDE1OmNhc2UgMjM1OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OmNhc2UgMTk6Y2FzZSAyMDpjYXNlIDE0OTpjYXNlIDEzOmNhc2UgMTA6Y2FzZSAyMzY6Y2FzZSAxNTM6Y2FzZSA5OmNhc2UgMjE6Y2FzZSAyMjpjYXNlIDE1OTpjYXNlIDE1NDpjYXNlIDE0OmNhc2UgNzc6Y2FzZSA3ODpjYXNlIDEzOTpjYXNlIDgwOmNhc2UgODE6Y2FzZSA4MjpjYXNlIDY4OmNhc2UgNjc6Y2FzZSAxNjQ6Y2FzZSAxMTpjYXNlIDI5OmNhc2UgNDc6Y2FzZSA0ODpjYXNlIDk1OmNhc2UgNTI6Y2FzZSA1MTpjYXNlIDQ2OnJldHVybiAyMDA4MDk7Y2FzZSA3OTpyZXR1cm4gMDtjYXNlIDI3OmNhc2UgMjQ2OmNhc2UgMTI3OmNhc2UgMTI4OmNhc2UgMjM6Y2FzZSAyNDpjYXNlIDE2MDpjYXNlIDE2MTpjYXNlIDE4MTpjYXNlIDE4MjpjYXNlIDI0MjpjYXNlIDE4MzpjYXNlIDE4NDpjYXNlIDI0MzpjYXNlIDI0NDpjYXNlIDI0NTpjYXNlIDE2NTpjYXNlIDE3ODpjYXNlIDE3OTpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSAxNjg6Y2FzZSAxNjk6Y2FzZSAxNzU6Y2FzZSAxNzA6Y2FzZSAxNzE6Y2FzZSAxNzI6Y2FzZSA5NzpjYXNlIDc2OmNhc2UgMzI6Y2FzZSAxNzM6Y2FzZSAzNTpyZXR1cm4tMTtjYXNlIDE3NjpjYXNlIDE3NzpjYXNlIDc6Y2FzZSAxNTU6Y2FzZSA4OmNhc2UgMTU3OmNhc2UgMTI1OmNhc2UgMTI2OmNhc2UgOTI6Y2FzZSA5MzpjYXNlIDEyOTpjYXNlIDEzMDpjYXNlIDEzMTpjYXNlIDk0OmNhc2UgOTE6cmV0dXJuIDE7Y2FzZSA3NDpjYXNlIDYwOmNhc2UgNjk6Y2FzZSA3MDpjYXNlIDQ6cmV0dXJuIDEwMjQ7Y2FzZSAzMTpjYXNlIDQyOmNhc2UgNzI6cmV0dXJuIDMyO2Nhc2UgODc6Y2FzZSAyNjpjYXNlIDMzOnJldHVybiAyMTQ3NDgzNjQ3O2Nhc2UgMzQ6Y2FzZSAxOnJldHVybiA0NzgzOTtjYXNlIDM4OmNhc2UgMzY6cmV0dXJuIDk5O2Nhc2UgNDM6Y2FzZSAzNzpyZXR1cm4gMjA0ODtjYXNlIDA6cmV0dXJuIDIwOTcxNTI7Y2FzZSAzOnJldHVybiA2NTUzNjtjYXNlIDI4OnJldHVybiAzMjc2ODtjYXNlIDQ0OnJldHVybiAzMjc2NztjYXNlIDc1OnJldHVybiAxNjM4NDtjYXNlIDM5OnJldHVybiAxZTM7Y2FzZSA4OTpyZXR1cm4gNzAwO2Nhc2UgNzE6cmV0dXJuIDI1NjtjYXNlIDQwOnJldHVybiAyNTU7Y2FzZSAyOnJldHVybiAxMDA7Y2FzZSAxODA6cmV0dXJuIDY0O2Nhc2UgMjU6cmV0dXJuIDIwO2Nhc2UgNTpyZXR1cm4gMTY7Y2FzZSA2OnJldHVybiA2O2Nhc2UgNzM6cmV0dXJuIDQ7Y2FzZSA4NDp7aWYodHlwZW9mIG5hdmlnYXRvcj09PVwib2JqZWN0XCIpcmV0dXJuIG5hdmlnYXRvcltcImhhcmR3YXJlQ29uY3VycmVuY3lcIl18fDE7cmV0dXJuIDF9fV9fX3NldEVyck5vKEVSUk5PX0NPREVTLkVJTlZBTCk7cmV0dXJuLTF9TW9kdWxlW1wiX2k2NFN1YnRyYWN0XCJdPV9pNjRTdWJ0cmFjdDtNb2R1bGVbXCJfaTY0QWRkXCJdPV9pNjRBZGQ7TW9kdWxlW1wiX2JpdHNoaWZ0NjRBc2hyXCJdPV9iaXRzaGlmdDY0QXNocjtNb2R1bGVbXCJfbWVtc2V0XCJdPV9tZW1zZXQ7ZnVuY3Rpb24gX3B0aHJlYWRfY2xlYW51cF9wdXNoKHJvdXRpbmUsYXJnKXtfX0FURVhJVF9fLnB1c2goKGZ1bmN0aW9uKCl7UnVudGltZS5keW5DYWxsKFwidmlcIixyb3V0aW5lLFthcmddKX0pKTtfcHRocmVhZF9jbGVhbnVwX3B1c2gubGV2ZWw9X19BVEVYSVRfXy5sZW5ndGh9TW9kdWxlW1wiX2JpdHNoaWZ0NjRMc2hyXCJdPV9iaXRzaGlmdDY0THNocjtNb2R1bGVbXCJfYml0c2hpZnQ2NFNobFwiXT1fYml0c2hpZnQ2NFNobDtmdW5jdGlvbiBfcHRocmVhZF9jbGVhbnVwX3BvcCgpe2Fzc2VydChfcHRocmVhZF9jbGVhbnVwX3B1c2gubGV2ZWw9PV9fQVRFWElUX18ubGVuZ3RoLFwiY2Fubm90IHBvcCBpZiBzb21ldGhpbmcgZWxzZSBhZGRlZCBtZWFud2hpbGUhXCIpO19fQVRFWElUX18ucG9wKCk7X3B0aHJlYWRfY2xlYW51cF9wdXNoLmxldmVsPV9fQVRFWElUX18ubGVuZ3RofWZ1bmN0aW9uIF9hYm9ydCgpe01vZHVsZVtcImFib3J0XCJdKCl9ZnVuY3Rpb24gX19fbG9jaygpe31mdW5jdGlvbiBfX191bmxvY2soKXt9dmFyIEVSUk5PX01FU1NBR0VTPXswOlwiU3VjY2Vzc1wiLDE6XCJOb3Qgc3VwZXItdXNlclwiLDI6XCJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIsMzpcIk5vIHN1Y2ggcHJvY2Vzc1wiLDQ6XCJJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbFwiLDU6XCJJL08gZXJyb3JcIiw2OlwiTm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzc1wiLDc6XCJBcmcgbGlzdCB0b28gbG9uZ1wiLDg6XCJFeGVjIGZvcm1hdCBlcnJvclwiLDk6XCJCYWQgZmlsZSBudW1iZXJcIiwxMDpcIk5vIGNoaWxkcmVuXCIsMTE6XCJObyBtb3JlIHByb2Nlc3Nlc1wiLDEyOlwiTm90IGVub3VnaCBjb3JlXCIsMTM6XCJQZXJtaXNzaW9uIGRlbmllZFwiLDE0OlwiQmFkIGFkZHJlc3NcIiwxNTpcIkJsb2NrIGRldmljZSByZXF1aXJlZFwiLDE2OlwiTW91bnQgZGV2aWNlIGJ1c3lcIiwxNzpcIkZpbGUgZXhpc3RzXCIsMTg6XCJDcm9zcy1kZXZpY2UgbGlua1wiLDE5OlwiTm8gc3VjaCBkZXZpY2VcIiwyMDpcIk5vdCBhIGRpcmVjdG9yeVwiLDIxOlwiSXMgYSBkaXJlY3RvcnlcIiwyMjpcIkludmFsaWQgYXJndW1lbnRcIiwyMzpcIlRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtXCIsMjQ6XCJUb28gbWFueSBvcGVuIGZpbGVzXCIsMjU6XCJOb3QgYSB0eXBld3JpdGVyXCIsMjY6XCJUZXh0IGZpbGUgYnVzeVwiLDI3OlwiRmlsZSB0b28gbGFyZ2VcIiwyODpcIk5vIHNwYWNlIGxlZnQgb24gZGV2aWNlXCIsMjk6XCJJbGxlZ2FsIHNlZWtcIiwzMDpcIlJlYWQgb25seSBmaWxlIHN5c3RlbVwiLDMxOlwiVG9vIG1hbnkgbGlua3NcIiwzMjpcIkJyb2tlbiBwaXBlXCIsMzM6XCJNYXRoIGFyZyBvdXQgb2YgZG9tYWluIG9mIGZ1bmNcIiwzNDpcIk1hdGggcmVzdWx0IG5vdCByZXByZXNlbnRhYmxlXCIsMzU6XCJGaWxlIGxvY2tpbmcgZGVhZGxvY2sgZXJyb3JcIiwzNjpcIkZpbGUgb3IgcGF0aCBuYW1lIHRvbyBsb25nXCIsMzc6XCJObyByZWNvcmQgbG9ja3MgYXZhaWxhYmxlXCIsMzg6XCJGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWRcIiwzOTpcIkRpcmVjdG9yeSBub3QgZW1wdHlcIiw0MDpcIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzXCIsNDI6XCJObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZVwiLDQzOlwiSWRlbnRpZmllciByZW1vdmVkXCIsNDQ6XCJDaGFubmVsIG51bWJlciBvdXQgb2YgcmFuZ2VcIiw0NTpcIkxldmVsIDIgbm90IHN5bmNocm9uaXplZFwiLDQ2OlwiTGV2ZWwgMyBoYWx0ZWRcIiw0NzpcIkxldmVsIDMgcmVzZXRcIiw0ODpcIkxpbmsgbnVtYmVyIG91dCBvZiByYW5nZVwiLDQ5OlwiUHJvdG9jb2wgZHJpdmVyIG5vdCBhdHRhY2hlZFwiLDUwOlwiTm8gQ1NJIHN0cnVjdHVyZSBhdmFpbGFibGVcIiw1MTpcIkxldmVsIDIgaGFsdGVkXCIsNTI6XCJJbnZhbGlkIGV4Y2hhbmdlXCIsNTM6XCJJbnZhbGlkIHJlcXVlc3QgZGVzY3JpcHRvclwiLDU0OlwiRXhjaGFuZ2UgZnVsbFwiLDU1OlwiTm8gYW5vZGVcIiw1NjpcIkludmFsaWQgcmVxdWVzdCBjb2RlXCIsNTc6XCJJbnZhbGlkIHNsb3RcIiw1OTpcIkJhZCBmb250IGZpbGUgZm10XCIsNjA6XCJEZXZpY2Ugbm90IGEgc3RyZWFtXCIsNjE6XCJObyBkYXRhIChmb3Igbm8gZGVsYXkgaW8pXCIsNjI6XCJUaW1lciBleHBpcmVkXCIsNjM6XCJPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXNcIiw2NDpcIk1hY2hpbmUgaXMgbm90IG9uIHRoZSBuZXR3b3JrXCIsNjU6XCJQYWNrYWdlIG5vdCBpbnN0YWxsZWRcIiw2NjpcIlRoZSBvYmplY3QgaXMgcmVtb3RlXCIsNjc6XCJUaGUgbGluayBoYXMgYmVlbiBzZXZlcmVkXCIsNjg6XCJBZHZlcnRpc2UgZXJyb3JcIiw2OTpcIlNybW91bnQgZXJyb3JcIiw3MDpcIkNvbW11bmljYXRpb24gZXJyb3Igb24gc2VuZFwiLDcxOlwiUHJvdG9jb2wgZXJyb3JcIiw3MjpcIk11bHRpaG9wIGF0dGVtcHRlZFwiLDczOlwiQ3Jvc3MgbW91bnQgcG9pbnQgKG5vdCByZWFsbHkgZXJyb3IpXCIsNzQ6XCJUcnlpbmcgdG8gcmVhZCB1bnJlYWRhYmxlIG1lc3NhZ2VcIiw3NTpcIlZhbHVlIHRvbyBsYXJnZSBmb3IgZGVmaW5lZCBkYXRhIHR5cGVcIiw3NjpcIkdpdmVuIGxvZy4gbmFtZSBub3QgdW5pcXVlXCIsNzc6XCJmLmQuIGludmFsaWQgZm9yIHRoaXMgb3BlcmF0aW9uXCIsNzg6XCJSZW1vdGUgYWRkcmVzcyBjaGFuZ2VkXCIsNzk6XCJDYW4gICBhY2Nlc3MgYSBuZWVkZWQgc2hhcmVkIGxpYlwiLDgwOlwiQWNjZXNzaW5nIGEgY29ycnVwdGVkIHNoYXJlZCBsaWJcIiw4MTpcIi5saWIgc2VjdGlvbiBpbiBhLm91dCBjb3JydXB0ZWRcIiw4MjpcIkF0dGVtcHRpbmcgdG8gbGluayBpbiB0b28gbWFueSBsaWJzXCIsODM6XCJBdHRlbXB0aW5nIHRvIGV4ZWMgYSBzaGFyZWQgbGlicmFyeVwiLDg0OlwiSWxsZWdhbCBieXRlIHNlcXVlbmNlXCIsODY6XCJTdHJlYW1zIHBpcGUgZXJyb3JcIiw4NzpcIlRvbyBtYW55IHVzZXJzXCIsODg6XCJTb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXRcIiw4OTpcIkRlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWRcIiw5MDpcIk1lc3NhZ2UgdG9vIGxvbmdcIiw5MTpcIlByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldFwiLDkyOlwiUHJvdG9jb2wgbm90IGF2YWlsYWJsZVwiLDkzOlwiVW5rbm93biBwcm90b2NvbFwiLDk0OlwiU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZFwiLDk1OlwiTm90IHN1cHBvcnRlZFwiLDk2OlwiUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWRcIiw5NzpcIkFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wgZmFtaWx5XCIsOTg6XCJBZGRyZXNzIGFscmVhZHkgaW4gdXNlXCIsOTk6XCJBZGRyZXNzIG5vdCBhdmFpbGFibGVcIiwxMDA6XCJOZXR3b3JrIGludGVyZmFjZSBpcyBub3QgY29uZmlndXJlZFwiLDEwMTpcIk5ldHdvcmsgaXMgdW5yZWFjaGFibGVcIiwxMDI6XCJDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmtcIiwxMDM6XCJDb25uZWN0aW9uIGFib3J0ZWRcIiwxMDQ6XCJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXJcIiwxMDU6XCJObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlXCIsMTA2OlwiU29ja2V0IGlzIGFscmVhZHkgY29ubmVjdGVkXCIsMTA3OlwiU29ja2V0IGlzIG5vdCBjb25uZWN0ZWRcIiwxMDg6XCJDYW4ndCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93blwiLDEwOTpcIlRvbyBtYW55IHJlZmVyZW5jZXNcIiwxMTA6XCJDb25uZWN0aW9uIHRpbWVkIG91dFwiLDExMTpcIkNvbm5lY3Rpb24gcmVmdXNlZFwiLDExMjpcIkhvc3QgaXMgZG93blwiLDExMzpcIkhvc3QgaXMgdW5yZWFjaGFibGVcIiwxMTQ6XCJTb2NrZXQgYWxyZWFkeSBjb25uZWN0ZWRcIiwxMTU6XCJDb25uZWN0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIiwxMTY6XCJTdGFsZSBmaWxlIGhhbmRsZVwiLDEyMjpcIlF1b3RhIGV4Y2VlZGVkXCIsMTIzOlwiTm8gbWVkaXVtIChpbiB0YXBlIGRyaXZlKVwiLDEyNTpcIk9wZXJhdGlvbiBjYW5jZWxlZFwiLDEzMDpcIlByZXZpb3VzIG93bmVyIGRpZWRcIiwxMzE6XCJTdGF0ZSBub3QgcmVjb3ZlcmFibGVcIn07dmFyIFBBVEg9e3NwbGl0UGF0aDooZnVuY3Rpb24oZmlsZW5hbWUpe3ZhciBzcGxpdFBhdGhSZT0vXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztyZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSl9KSxub3JtYWxpemVBcnJheTooZnVuY3Rpb24ocGFydHMsYWxsb3dBYm92ZVJvb3Qpe3ZhciB1cD0wO2Zvcih2YXIgaT1wYXJ0cy5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIGxhc3Q9cGFydHNbaV07aWYobGFzdD09PVwiLlwiKXtwYXJ0cy5zcGxpY2UoaSwxKX1lbHNlIGlmKGxhc3Q9PT1cIi4uXCIpe3BhcnRzLnNwbGljZShpLDEpO3VwKyt9ZWxzZSBpZih1cCl7cGFydHMuc3BsaWNlKGksMSk7dXAtLX19aWYoYWxsb3dBYm92ZVJvb3Qpe2Zvcig7dXAtLTt1cCl7cGFydHMudW5zaGlmdChcIi4uXCIpfX1yZXR1cm4gcGFydHN9KSxub3JtYWxpemU6KGZ1bmN0aW9uKHBhdGgpe3ZhciBpc0Fic29sdXRlPXBhdGguY2hhckF0KDApPT09XCIvXCIsdHJhaWxpbmdTbGFzaD1wYXRoLnN1YnN0cigtMSk9PT1cIi9cIjtwYXRoPVBBVEgubm9ybWFsaXplQXJyYXkocGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChmdW5jdGlvbihwKXtyZXR1cm4hIXB9KSksIWlzQWJzb2x1dGUpLmpvaW4oXCIvXCIpO2lmKCFwYXRoJiYhaXNBYnNvbHV0ZSl7cGF0aD1cIi5cIn1pZihwYXRoJiZ0cmFpbGluZ1NsYXNoKXtwYXRoKz1cIi9cIn1yZXR1cm4oaXNBYnNvbHV0ZT9cIi9cIjpcIlwiKStwYXRofSksZGlybmFtZTooZnVuY3Rpb24ocGF0aCl7dmFyIHJlc3VsdD1QQVRILnNwbGl0UGF0aChwYXRoKSxyb290PXJlc3VsdFswXSxkaXI9cmVzdWx0WzFdO2lmKCFyb290JiYhZGlyKXtyZXR1cm5cIi5cIn1pZihkaXIpe2Rpcj1kaXIuc3Vic3RyKDAsZGlyLmxlbmd0aC0xKX1yZXR1cm4gcm9vdCtkaXJ9KSxiYXNlbmFtZTooZnVuY3Rpb24ocGF0aCl7aWYocGF0aD09PVwiL1wiKXJldHVyblwiL1wiO3ZhciBsYXN0U2xhc2g9cGF0aC5sYXN0SW5kZXhPZihcIi9cIik7aWYobGFzdFNsYXNoPT09LTEpcmV0dXJuIHBhdGg7cmV0dXJuIHBhdGguc3Vic3RyKGxhc3RTbGFzaCsxKX0pLGV4dG5hbWU6KGZ1bmN0aW9uKHBhdGgpe3JldHVybiBQQVRILnNwbGl0UGF0aChwYXRoKVszXX0pLGpvaW46KGZ1bmN0aW9uKCl7dmFyIHBhdGhzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gUEFUSC5ub3JtYWxpemUocGF0aHMuam9pbihcIi9cIikpfSksam9pbjI6KGZ1bmN0aW9uKGwscil7cmV0dXJuIFBBVEgubm9ybWFsaXplKGwrXCIvXCIrcil9KSxyZXNvbHZlOihmdW5jdGlvbigpe3ZhciByZXNvbHZlZFBhdGg9XCJcIixyZXNvbHZlZEFic29sdXRlPWZhbHNlO2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLTE7aT49LTEmJiFyZXNvbHZlZEFic29sdXRlO2ktLSl7dmFyIHBhdGg9aT49MD9hcmd1bWVudHNbaV06RlMuY3dkKCk7aWYodHlwZW9mIHBhdGghPT1cInN0cmluZ1wiKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3NcIil9ZWxzZSBpZighcGF0aCl7cmV0dXJuXCJcIn1yZXNvbHZlZFBhdGg9cGF0aCtcIi9cIityZXNvbHZlZFBhdGg7cmVzb2x2ZWRBYnNvbHV0ZT1wYXRoLmNoYXJBdCgwKT09PVwiL1wifXJlc29sdmVkUGF0aD1QQVRILm5vcm1hbGl6ZUFycmF5KHJlc29sdmVkUGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChmdW5jdGlvbihwKXtyZXR1cm4hIXB9KSksIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oXCIvXCIpO3JldHVybihyZXNvbHZlZEFic29sdXRlP1wiL1wiOlwiXCIpK3Jlc29sdmVkUGF0aHx8XCIuXCJ9KSxyZWxhdGl2ZTooZnVuY3Rpb24oZnJvbSx0byl7ZnJvbT1QQVRILnJlc29sdmUoZnJvbSkuc3Vic3RyKDEpO3RvPVBBVEgucmVzb2x2ZSh0bykuc3Vic3RyKDEpO2Z1bmN0aW9uIHRyaW0oYXJyKXt2YXIgc3RhcnQ9MDtmb3IoO3N0YXJ0PGFyci5sZW5ndGg7c3RhcnQrKyl7aWYoYXJyW3N0YXJ0XSE9PVwiXCIpYnJlYWt9dmFyIGVuZD1hcnIubGVuZ3RoLTE7Zm9yKDtlbmQ+PTA7ZW5kLS0pe2lmKGFycltlbmRdIT09XCJcIilicmVha31pZihzdGFydD5lbmQpcmV0dXJuW107cmV0dXJuIGFyci5zbGljZShzdGFydCxlbmQtc3RhcnQrMSl9dmFyIGZyb21QYXJ0cz10cmltKGZyb20uc3BsaXQoXCIvXCIpKTt2YXIgdG9QYXJ0cz10cmltKHRvLnNwbGl0KFwiL1wiKSk7dmFyIGxlbmd0aD1NYXRoLm1pbihmcm9tUGFydHMubGVuZ3RoLHRvUGFydHMubGVuZ3RoKTt2YXIgc2FtZVBhcnRzTGVuZ3RoPWxlbmd0aDtmb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspe2lmKGZyb21QYXJ0c1tpXSE9PXRvUGFydHNbaV0pe3NhbWVQYXJ0c0xlbmd0aD1pO2JyZWFrfX12YXIgb3V0cHV0UGFydHM9W107Zm9yKHZhciBpPXNhbWVQYXJ0c0xlbmd0aDtpPGZyb21QYXJ0cy5sZW5ndGg7aSsrKXtvdXRwdXRQYXJ0cy5wdXNoKFwiLi5cIil9b3V0cHV0UGFydHM9b3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7cmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oXCIvXCIpfSl9O3ZhciBUVFk9e3R0eXM6W10saW5pdDooZnVuY3Rpb24oKXt9KSxzaHV0ZG93bjooZnVuY3Rpb24oKXt9KSxyZWdpc3RlcjooZnVuY3Rpb24oZGV2LG9wcyl7VFRZLnR0eXNbZGV2XT17aW5wdXQ6W10sb3V0cHV0OltdLG9wczpvcHN9O0ZTLnJlZ2lzdGVyRGV2aWNlKGRldixUVFkuc3RyZWFtX29wcyl9KSxzdHJlYW1fb3BzOntvcGVuOihmdW5jdGlvbihzdHJlYW0pe3ZhciB0dHk9VFRZLnR0eXNbc3RyZWFtLm5vZGUucmRldl07aWYoIXR0eSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PREVWKX1zdHJlYW0udHR5PXR0eTtzdHJlYW0uc2Vla2FibGU9ZmFsc2V9KSxjbG9zZTooZnVuY3Rpb24oc3RyZWFtKXtzdHJlYW0udHR5Lm9wcy5mbHVzaChzdHJlYW0udHR5KX0pLGZsdXNoOihmdW5jdGlvbihzdHJlYW0pe3N0cmVhbS50dHkub3BzLmZsdXNoKHN0cmVhbS50dHkpfSkscmVhZDooZnVuY3Rpb24oc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLHBvcyl7aWYoIXN0cmVhbS50dHl8fCFzdHJlYW0udHR5Lm9wcy5nZXRfY2hhcil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5YSU8pfXZhciBieXRlc1JlYWQ9MDtmb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspe3ZhciByZXN1bHQ7dHJ5e3Jlc3VsdD1zdHJlYW0udHR5Lm9wcy5nZXRfY2hhcihzdHJlYW0udHR5KX1jYXRjaChlKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU8pfWlmKHJlc3VsdD09PXVuZGVmaW5lZCYmYnl0ZXNSZWFkPT09MCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUFHQUlOKX1pZihyZXN1bHQ9PT1udWxsfHxyZXN1bHQ9PT11bmRlZmluZWQpYnJlYWs7Ynl0ZXNSZWFkKys7YnVmZmVyW29mZnNldCtpXT1yZXN1bHR9aWYoYnl0ZXNSZWFkKXtzdHJlYW0ubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKX1yZXR1cm4gYnl0ZXNSZWFkfSksd3JpdGU6KGZ1bmN0aW9uKHN0cmVhbSxidWZmZXIsb2Zmc2V0LGxlbmd0aCxwb3Mpe2lmKCFzdHJlYW0udHR5fHwhc3RyZWFtLnR0eS5vcHMucHV0X2NoYXIpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOWElPKX1mb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspe3RyeXtzdHJlYW0udHR5Lm9wcy5wdXRfY2hhcihzdHJlYW0udHR5LGJ1ZmZlcltvZmZzZXQraV0pfWNhdGNoKGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTyl9fWlmKGxlbmd0aCl7c3RyZWFtLm5vZGUudGltZXN0YW1wPURhdGUubm93KCl9cmV0dXJuIGl9KX0sZGVmYXVsdF90dHlfb3BzOntnZXRfY2hhcjooZnVuY3Rpb24odHR5KXtpZighdHR5LmlucHV0Lmxlbmd0aCl7dmFyIHJlc3VsdD1udWxsO2lmKEVOVklST05NRU5UX0lTX05PREUpe3ZhciBCVUZTSVpFPTI1Njt2YXIgYnVmPW5ldyBCdWZmZXIoQlVGU0laRSk7dmFyIGJ5dGVzUmVhZD0wO3ZhciBmZD1wcm9jZXNzLnN0ZGluLmZkO3ZhciB1c2luZ0RldmljZT1mYWxzZTt0cnl7ZmQ9ZnMub3BlblN5bmMoXCIvZGV2L3N0ZGluXCIsXCJyXCIpO3VzaW5nRGV2aWNlPXRydWV9Y2F0Y2goZSl7fWJ5dGVzUmVhZD1mcy5yZWFkU3luYyhmZCxidWYsMCxCVUZTSVpFLG51bGwpO2lmKHVzaW5nRGV2aWNlKXtmcy5jbG9zZVN5bmMoZmQpfWlmKGJ5dGVzUmVhZD4wKXtyZXN1bHQ9YnVmLnNsaWNlKDAsYnl0ZXNSZWFkKS50b1N0cmluZyhcInV0Zi04XCIpfWVsc2V7cmVzdWx0PW51bGx9fWVsc2UgaWYodHlwZW9mIHdpbmRvdyE9XCJ1bmRlZmluZWRcIiYmdHlwZW9mIHdpbmRvdy5wcm9tcHQ9PVwiZnVuY3Rpb25cIil7cmVzdWx0PXdpbmRvdy5wcm9tcHQoXCJJbnB1dDogXCIpO2lmKHJlc3VsdCE9PW51bGwpe3Jlc3VsdCs9XCJcXG5cIn19ZWxzZSBpZih0eXBlb2YgcmVhZGxpbmU9PVwiZnVuY3Rpb25cIil7cmVzdWx0PXJlYWRsaW5lKCk7aWYocmVzdWx0IT09bnVsbCl7cmVzdWx0Kz1cIlxcblwifX1pZighcmVzdWx0KXtyZXR1cm4gbnVsbH10dHkuaW5wdXQ9aW50QXJyYXlGcm9tU3RyaW5nKHJlc3VsdCx0cnVlKX1yZXR1cm4gdHR5LmlucHV0LnNoaWZ0KCl9KSxwdXRfY2hhcjooZnVuY3Rpb24odHR5LHZhbCl7aWYodmFsPT09bnVsbHx8dmFsPT09MTApe01vZHVsZVtcInByaW50XCJdKFVURjhBcnJheVRvU3RyaW5nKHR0eS5vdXRwdXQsMCkpO3R0eS5vdXRwdXQ9W119ZWxzZXtpZih2YWwhPTApdHR5Lm91dHB1dC5wdXNoKHZhbCl9fSksZmx1c2g6KGZ1bmN0aW9uKHR0eSl7aWYodHR5Lm91dHB1dCYmdHR5Lm91dHB1dC5sZW5ndGg+MCl7TW9kdWxlW1wicHJpbnRcIl0oVVRGOEFycmF5VG9TdHJpbmcodHR5Lm91dHB1dCwwKSk7dHR5Lm91dHB1dD1bXX19KX0sZGVmYXVsdF90dHkxX29wczp7cHV0X2NoYXI6KGZ1bmN0aW9uKHR0eSx2YWwpe2lmKHZhbD09PW51bGx8fHZhbD09PTEwKXtNb2R1bGVbXCJwcmludEVyclwiXShVVEY4QXJyYXlUb1N0cmluZyh0dHkub3V0cHV0LDApKTt0dHkub3V0cHV0PVtdfWVsc2V7aWYodmFsIT0wKXR0eS5vdXRwdXQucHVzaCh2YWwpfX0pLGZsdXNoOihmdW5jdGlvbih0dHkpe2lmKHR0eS5vdXRwdXQmJnR0eS5vdXRwdXQubGVuZ3RoPjApe01vZHVsZVtcInByaW50RXJyXCJdKFVURjhBcnJheVRvU3RyaW5nKHR0eS5vdXRwdXQsMCkpO3R0eS5vdXRwdXQ9W119fSl9fTt2YXIgTUVNRlM9e29wc190YWJsZTpudWxsLG1vdW50OihmdW5jdGlvbihtb3VudCl7cmV0dXJuIE1FTUZTLmNyZWF0ZU5vZGUobnVsbCxcIi9cIiwxNjM4NHw1MTEsMCl9KSxjcmVhdGVOb2RlOihmdW5jdGlvbihwYXJlbnQsbmFtZSxtb2RlLGRldil7aWYoRlMuaXNCbGtkZXYobW9kZSl8fEZTLmlzRklGTyhtb2RlKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pfWlmKCFNRU1GUy5vcHNfdGFibGUpe01FTUZTLm9wc190YWJsZT17ZGlyOntub2RlOntnZXRhdHRyOk1FTUZTLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpNRU1GUy5ub2RlX29wcy5zZXRhdHRyLGxvb2t1cDpNRU1GUy5ub2RlX29wcy5sb29rdXAsbWtub2Q6TUVNRlMubm9kZV9vcHMubWtub2QscmVuYW1lOk1FTUZTLm5vZGVfb3BzLnJlbmFtZSx1bmxpbms6TUVNRlMubm9kZV9vcHMudW5saW5rLHJtZGlyOk1FTUZTLm5vZGVfb3BzLnJtZGlyLHJlYWRkaXI6TUVNRlMubm9kZV9vcHMucmVhZGRpcixzeW1saW5rOk1FTUZTLm5vZGVfb3BzLnN5bWxpbmt9LHN0cmVhbTp7bGxzZWVrOk1FTUZTLnN0cmVhbV9vcHMubGxzZWVrfX0sZmlsZTp7bm9kZTp7Z2V0YXR0cjpNRU1GUy5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6TUVNRlMubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOntsbHNlZWs6TUVNRlMuc3RyZWFtX29wcy5sbHNlZWsscmVhZDpNRU1GUy5zdHJlYW1fb3BzLnJlYWQsd3JpdGU6TUVNRlMuc3RyZWFtX29wcy53cml0ZSxhbGxvY2F0ZTpNRU1GUy5zdHJlYW1fb3BzLmFsbG9jYXRlLG1tYXA6TUVNRlMuc3RyZWFtX29wcy5tbWFwLG1zeW5jOk1FTUZTLnN0cmVhbV9vcHMubXN5bmN9fSxsaW5rOntub2RlOntnZXRhdHRyOk1FTUZTLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpNRU1GUy5ub2RlX29wcy5zZXRhdHRyLHJlYWRsaW5rOk1FTUZTLm5vZGVfb3BzLnJlYWRsaW5rfSxzdHJlYW06e319LGNocmRldjp7bm9kZTp7Z2V0YXR0cjpNRU1GUy5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6TUVNRlMubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOkZTLmNocmRldl9zdHJlYW1fb3BzfX19dmFyIG5vZGU9RlMuY3JlYXRlTm9kZShwYXJlbnQsbmFtZSxtb2RlLGRldik7aWYoRlMuaXNEaXIobm9kZS5tb2RlKSl7bm9kZS5ub2RlX29wcz1NRU1GUy5vcHNfdGFibGUuZGlyLm5vZGU7bm9kZS5zdHJlYW1fb3BzPU1FTUZTLm9wc190YWJsZS5kaXIuc3RyZWFtO25vZGUuY29udGVudHM9e319ZWxzZSBpZihGUy5pc0ZpbGUobm9kZS5tb2RlKSl7bm9kZS5ub2RlX29wcz1NRU1GUy5vcHNfdGFibGUuZmlsZS5ub2RlO25vZGUuc3RyZWFtX29wcz1NRU1GUy5vcHNfdGFibGUuZmlsZS5zdHJlYW07bm9kZS51c2VkQnl0ZXM9MDtub2RlLmNvbnRlbnRzPW51bGx9ZWxzZSBpZihGUy5pc0xpbmsobm9kZS5tb2RlKSl7bm9kZS5ub2RlX29wcz1NRU1GUy5vcHNfdGFibGUubGluay5ub2RlO25vZGUuc3RyZWFtX29wcz1NRU1GUy5vcHNfdGFibGUubGluay5zdHJlYW19ZWxzZSBpZihGUy5pc0NocmRldihub2RlLm1vZGUpKXtub2RlLm5vZGVfb3BzPU1FTUZTLm9wc190YWJsZS5jaHJkZXYubm9kZTtub2RlLnN0cmVhbV9vcHM9TUVNRlMub3BzX3RhYmxlLmNocmRldi5zdHJlYW19bm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKTtpZihwYXJlbnQpe3BhcmVudC5jb250ZW50c1tuYW1lXT1ub2RlfXJldHVybiBub2RlfSksZ2V0RmlsZURhdGFBc1JlZ3VsYXJBcnJheTooZnVuY3Rpb24obm9kZSl7aWYobm9kZS5jb250ZW50cyYmbm9kZS5jb250ZW50cy5zdWJhcnJheSl7dmFyIGFycj1bXTtmb3IodmFyIGk9MDtpPG5vZGUudXNlZEJ5dGVzOysraSlhcnIucHVzaChub2RlLmNvbnRlbnRzW2ldKTtyZXR1cm4gYXJyfXJldHVybiBub2RlLmNvbnRlbnRzfSksZ2V0RmlsZURhdGFBc1R5cGVkQXJyYXk6KGZ1bmN0aW9uKG5vZGUpe2lmKCFub2RlLmNvbnRlbnRzKXJldHVybiBuZXcgVWludDhBcnJheTtpZihub2RlLmNvbnRlbnRzLnN1YmFycmF5KXJldHVybiBub2RlLmNvbnRlbnRzLnN1YmFycmF5KDAsbm9kZS51c2VkQnl0ZXMpO3JldHVybiBuZXcgVWludDhBcnJheShub2RlLmNvbnRlbnRzKX0pLGV4cGFuZEZpbGVTdG9yYWdlOihmdW5jdGlvbihub2RlLG5ld0NhcGFjaXR5KXtpZihub2RlLmNvbnRlbnRzJiZub2RlLmNvbnRlbnRzLnN1YmFycmF5JiZuZXdDYXBhY2l0eT5ub2RlLmNvbnRlbnRzLmxlbmd0aCl7bm9kZS5jb250ZW50cz1NRU1GUy5nZXRGaWxlRGF0YUFzUmVndWxhckFycmF5KG5vZGUpO25vZGUudXNlZEJ5dGVzPW5vZGUuY29udGVudHMubGVuZ3RofWlmKCFub2RlLmNvbnRlbnRzfHxub2RlLmNvbnRlbnRzLnN1YmFycmF5KXt2YXIgcHJldkNhcGFjaXR5PW5vZGUuY29udGVudHM/bm9kZS5jb250ZW50cy5idWZmZXIuYnl0ZUxlbmd0aDowO2lmKHByZXZDYXBhY2l0eT49bmV3Q2FwYWNpdHkpcmV0dXJuO3ZhciBDQVBBQ0lUWV9ET1VCTElOR19NQVg9MTAyNCoxMDI0O25ld0NhcGFjaXR5PU1hdGgubWF4KG5ld0NhcGFjaXR5LHByZXZDYXBhY2l0eSoocHJldkNhcGFjaXR5PENBUEFDSVRZX0RPVUJMSU5HX01BWD8yOjEuMTI1KXwwKTtpZihwcmV2Q2FwYWNpdHkhPTApbmV3Q2FwYWNpdHk9TWF0aC5tYXgobmV3Q2FwYWNpdHksMjU2KTt2YXIgb2xkQ29udGVudHM9bm9kZS5jb250ZW50cztub2RlLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KG5ld0NhcGFjaXR5KTtpZihub2RlLnVzZWRCeXRlcz4wKW5vZGUuY29udGVudHMuc2V0KG9sZENvbnRlbnRzLnN1YmFycmF5KDAsbm9kZS51c2VkQnl0ZXMpLDApO3JldHVybn1pZighbm9kZS5jb250ZW50cyYmbmV3Q2FwYWNpdHk+MClub2RlLmNvbnRlbnRzPVtdO3doaWxlKG5vZGUuY29udGVudHMubGVuZ3RoPG5ld0NhcGFjaXR5KW5vZGUuY29udGVudHMucHVzaCgwKX0pLHJlc2l6ZUZpbGVTdG9yYWdlOihmdW5jdGlvbihub2RlLG5ld1NpemUpe2lmKG5vZGUudXNlZEJ5dGVzPT1uZXdTaXplKXJldHVybjtpZihuZXdTaXplPT0wKXtub2RlLmNvbnRlbnRzPW51bGw7bm9kZS51c2VkQnl0ZXM9MDtyZXR1cm59aWYoIW5vZGUuY29udGVudHN8fG5vZGUuY29udGVudHMuc3ViYXJyYXkpe3ZhciBvbGRDb250ZW50cz1ub2RlLmNvbnRlbnRzO25vZGUuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkobmV3IEFycmF5QnVmZmVyKG5ld1NpemUpKTtpZihvbGRDb250ZW50cyl7bm9kZS5jb250ZW50cy5zZXQob2xkQ29udGVudHMuc3ViYXJyYXkoMCxNYXRoLm1pbihuZXdTaXplLG5vZGUudXNlZEJ5dGVzKSkpfW5vZGUudXNlZEJ5dGVzPW5ld1NpemU7cmV0dXJufWlmKCFub2RlLmNvbnRlbnRzKW5vZGUuY29udGVudHM9W107aWYobm9kZS5jb250ZW50cy5sZW5ndGg+bmV3U2l6ZSlub2RlLmNvbnRlbnRzLmxlbmd0aD1uZXdTaXplO2Vsc2Ugd2hpbGUobm9kZS5jb250ZW50cy5sZW5ndGg8bmV3U2l6ZSlub2RlLmNvbnRlbnRzLnB1c2goMCk7bm9kZS51c2VkQnl0ZXM9bmV3U2l6ZX0pLG5vZGVfb3BzOntnZXRhdHRyOihmdW5jdGlvbihub2RlKXt2YXIgYXR0cj17fTthdHRyLmRldj1GUy5pc0NocmRldihub2RlLm1vZGUpP25vZGUuaWQ6MTthdHRyLmlubz1ub2RlLmlkO2F0dHIubW9kZT1ub2RlLm1vZGU7YXR0ci5ubGluaz0xO2F0dHIudWlkPTA7YXR0ci5naWQ9MDthdHRyLnJkZXY9bm9kZS5yZGV2O2lmKEZTLmlzRGlyKG5vZGUubW9kZSkpe2F0dHIuc2l6ZT00MDk2fWVsc2UgaWYoRlMuaXNGaWxlKG5vZGUubW9kZSkpe2F0dHIuc2l6ZT1ub2RlLnVzZWRCeXRlc31lbHNlIGlmKEZTLmlzTGluayhub2RlLm1vZGUpKXthdHRyLnNpemU9bm9kZS5saW5rLmxlbmd0aH1lbHNle2F0dHIuc2l6ZT0wfWF0dHIuYXRpbWU9bmV3IERhdGUobm9kZS50aW1lc3RhbXApO2F0dHIubXRpbWU9bmV3IERhdGUobm9kZS50aW1lc3RhbXApO2F0dHIuY3RpbWU9bmV3IERhdGUobm9kZS50aW1lc3RhbXApO2F0dHIuYmxrc2l6ZT00MDk2O2F0dHIuYmxvY2tzPU1hdGguY2VpbChhdHRyLnNpemUvYXR0ci5ibGtzaXplKTtyZXR1cm4gYXR0cn0pLHNldGF0dHI6KGZ1bmN0aW9uKG5vZGUsYXR0cil7aWYoYXR0ci5tb2RlIT09dW5kZWZpbmVkKXtub2RlLm1vZGU9YXR0ci5tb2RlfWlmKGF0dHIudGltZXN0YW1wIT09dW5kZWZpbmVkKXtub2RlLnRpbWVzdGFtcD1hdHRyLnRpbWVzdGFtcH1pZihhdHRyLnNpemUhPT11bmRlZmluZWQpe01FTUZTLnJlc2l6ZUZpbGVTdG9yYWdlKG5vZGUsYXR0ci5zaXplKX19KSxsb29rdXA6KGZ1bmN0aW9uKHBhcmVudCxuYW1lKXt0aHJvdyBGUy5nZW5lcmljRXJyb3JzW0VSUk5PX0NPREVTLkVOT0VOVF19KSxta25vZDooZnVuY3Rpb24ocGFyZW50LG5hbWUsbW9kZSxkZXYpe3JldHVybiBNRU1GUy5jcmVhdGVOb2RlKHBhcmVudCxuYW1lLG1vZGUsZGV2KX0pLHJlbmFtZTooZnVuY3Rpb24ob2xkX25vZGUsbmV3X2RpcixuZXdfbmFtZSl7aWYoRlMuaXNEaXIob2xkX25vZGUubW9kZSkpe3ZhciBuZXdfbm9kZTt0cnl7bmV3X25vZGU9RlMubG9va3VwTm9kZShuZXdfZGlyLG5ld19uYW1lKX1jYXRjaChlKXt9aWYobmV3X25vZGUpe2Zvcih2YXIgaSBpbiBuZXdfbm9kZS5jb250ZW50cyl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PVEVNUFRZKX19fWRlbGV0ZSBvbGRfbm9kZS5wYXJlbnQuY29udGVudHNbb2xkX25vZGUubmFtZV07b2xkX25vZGUubmFtZT1uZXdfbmFtZTtuZXdfZGlyLmNvbnRlbnRzW25ld19uYW1lXT1vbGRfbm9kZTtvbGRfbm9kZS5wYXJlbnQ9bmV3X2Rpcn0pLHVubGluazooZnVuY3Rpb24ocGFyZW50LG5hbWUpe2RlbGV0ZSBwYXJlbnQuY29udGVudHNbbmFtZV19KSxybWRpcjooZnVuY3Rpb24ocGFyZW50LG5hbWUpe3ZhciBub2RlPUZTLmxvb2t1cE5vZGUocGFyZW50LG5hbWUpO2Zvcih2YXIgaSBpbiBub2RlLmNvbnRlbnRzKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9URU1QVFkpfWRlbGV0ZSBwYXJlbnQuY29udGVudHNbbmFtZV19KSxyZWFkZGlyOihmdW5jdGlvbihub2RlKXt2YXIgZW50cmllcz1bXCIuXCIsXCIuLlwiXTtmb3IodmFyIGtleSBpbiBub2RlLmNvbnRlbnRzKXtpZighbm9kZS5jb250ZW50cy5oYXNPd25Qcm9wZXJ0eShrZXkpKXtjb250aW51ZX1lbnRyaWVzLnB1c2goa2V5KX1yZXR1cm4gZW50cmllc30pLHN5bWxpbms6KGZ1bmN0aW9uKHBhcmVudCxuZXduYW1lLG9sZHBhdGgpe3ZhciBub2RlPU1FTUZTLmNyZWF0ZU5vZGUocGFyZW50LG5ld25hbWUsNTExfDQwOTYwLDApO25vZGUubGluaz1vbGRwYXRoO3JldHVybiBub2RlfSkscmVhZGxpbms6KGZ1bmN0aW9uKG5vZGUpe2lmKCFGUy5pc0xpbmsobm9kZS5tb2RlKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKX1yZXR1cm4gbm9kZS5saW5rfSl9LHN0cmVhbV9vcHM6e3JlYWQ6KGZ1bmN0aW9uKHN0cmVhbSxidWZmZXIsb2Zmc2V0LGxlbmd0aCxwb3NpdGlvbil7dmFyIGNvbnRlbnRzPXN0cmVhbS5ub2RlLmNvbnRlbnRzO2lmKHBvc2l0aW9uPj1zdHJlYW0ubm9kZS51c2VkQnl0ZXMpcmV0dXJuIDA7dmFyIHNpemU9TWF0aC5taW4oc3RyZWFtLm5vZGUudXNlZEJ5dGVzLXBvc2l0aW9uLGxlbmd0aCk7YXNzZXJ0KHNpemU+PTApO2lmKHNpemU+OCYmY29udGVudHMuc3ViYXJyYXkpe2J1ZmZlci5zZXQoY29udGVudHMuc3ViYXJyYXkocG9zaXRpb24scG9zaXRpb24rc2l6ZSksb2Zmc2V0KX1lbHNle2Zvcih2YXIgaT0wO2k8c2l6ZTtpKyspYnVmZmVyW29mZnNldCtpXT1jb250ZW50c1twb3NpdGlvbitpXX1yZXR1cm4gc2l6ZX0pLHdyaXRlOihmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zaXRpb24sY2FuT3duKXtpZighbGVuZ3RoKXJldHVybiAwO3ZhciBub2RlPXN0cmVhbS5ub2RlO25vZGUudGltZXN0YW1wPURhdGUubm93KCk7aWYoYnVmZmVyLnN1YmFycmF5JiYoIW5vZGUuY29udGVudHN8fG5vZGUuY29udGVudHMuc3ViYXJyYXkpKXtpZihjYW5Pd24pe25vZGUuY29udGVudHM9YnVmZmVyLnN1YmFycmF5KG9mZnNldCxvZmZzZXQrbGVuZ3RoKTtub2RlLnVzZWRCeXRlcz1sZW5ndGg7cmV0dXJuIGxlbmd0aH1lbHNlIGlmKG5vZGUudXNlZEJ5dGVzPT09MCYmcG9zaXRpb249PT0wKXtub2RlLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KGJ1ZmZlci5zdWJhcnJheShvZmZzZXQsb2Zmc2V0K2xlbmd0aCkpO25vZGUudXNlZEJ5dGVzPWxlbmd0aDtyZXR1cm4gbGVuZ3RofWVsc2UgaWYocG9zaXRpb24rbGVuZ3RoPD1ub2RlLnVzZWRCeXRlcyl7bm9kZS5jb250ZW50cy5zZXQoYnVmZmVyLnN1YmFycmF5KG9mZnNldCxvZmZzZXQrbGVuZ3RoKSxwb3NpdGlvbik7cmV0dXJuIGxlbmd0aH19TUVNRlMuZXhwYW5kRmlsZVN0b3JhZ2Uobm9kZSxwb3NpdGlvbitsZW5ndGgpO2lmKG5vZGUuY29udGVudHMuc3ViYXJyYXkmJmJ1ZmZlci5zdWJhcnJheSlub2RlLmNvbnRlbnRzLnNldChidWZmZXIuc3ViYXJyYXkob2Zmc2V0LG9mZnNldCtsZW5ndGgpLHBvc2l0aW9uKTtlbHNle2Zvcih2YXIgaT0wO2k8bGVuZ3RoO2krKyl7bm9kZS5jb250ZW50c1twb3NpdGlvbitpXT1idWZmZXJbb2Zmc2V0K2ldfX1ub2RlLnVzZWRCeXRlcz1NYXRoLm1heChub2RlLnVzZWRCeXRlcyxwb3NpdGlvbitsZW5ndGgpO3JldHVybiBsZW5ndGh9KSxsbHNlZWs6KGZ1bmN0aW9uKHN0cmVhbSxvZmZzZXQsd2hlbmNlKXt2YXIgcG9zaXRpb249b2Zmc2V0O2lmKHdoZW5jZT09PTEpe3Bvc2l0aW9uKz1zdHJlYW0ucG9zaXRpb259ZWxzZSBpZih3aGVuY2U9PT0yKXtpZihGUy5pc0ZpbGUoc3RyZWFtLm5vZGUubW9kZSkpe3Bvc2l0aW9uKz1zdHJlYW0ubm9kZS51c2VkQnl0ZXN9fWlmKHBvc2l0aW9uPDApe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCl9cmV0dXJuIHBvc2l0aW9ufSksYWxsb2NhdGU6KGZ1bmN0aW9uKHN0cmVhbSxvZmZzZXQsbGVuZ3RoKXtNRU1GUy5leHBhbmRGaWxlU3RvcmFnZShzdHJlYW0ubm9kZSxvZmZzZXQrbGVuZ3RoKTtzdHJlYW0ubm9kZS51c2VkQnl0ZXM9TWF0aC5tYXgoc3RyZWFtLm5vZGUudXNlZEJ5dGVzLG9mZnNldCtsZW5ndGgpfSksbW1hcDooZnVuY3Rpb24oc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLHBvc2l0aW9uLHByb3QsZmxhZ3Mpe2lmKCFGUy5pc0ZpbGUoc3RyZWFtLm5vZGUubW9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT0RFVil9dmFyIHB0cjt2YXIgYWxsb2NhdGVkO3ZhciBjb250ZW50cz1zdHJlYW0ubm9kZS5jb250ZW50cztpZighKGZsYWdzJjIpJiYoY29udGVudHMuYnVmZmVyPT09YnVmZmVyfHxjb250ZW50cy5idWZmZXI9PT1idWZmZXIuYnVmZmVyKSl7YWxsb2NhdGVkPWZhbHNlO3B0cj1jb250ZW50cy5ieXRlT2Zmc2V0fWVsc2V7aWYocG9zaXRpb24+MHx8cG9zaXRpb24rbGVuZ3RoPHN0cmVhbS5ub2RlLnVzZWRCeXRlcyl7aWYoY29udGVudHMuc3ViYXJyYXkpe2NvbnRlbnRzPWNvbnRlbnRzLnN1YmFycmF5KHBvc2l0aW9uLHBvc2l0aW9uK2xlbmd0aCl9ZWxzZXtjb250ZW50cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjb250ZW50cyxwb3NpdGlvbixwb3NpdGlvbitsZW5ndGgpfX1hbGxvY2F0ZWQ9dHJ1ZTtwdHI9X21hbGxvYyhsZW5ndGgpO2lmKCFwdHIpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT01FTSl9YnVmZmVyLnNldChjb250ZW50cyxwdHIpfXJldHVybntwdHI6cHRyLGFsbG9jYXRlZDphbGxvY2F0ZWR9fSksbXN5bmM6KGZ1bmN0aW9uKHN0cmVhbSxidWZmZXIsb2Zmc2V0LGxlbmd0aCxtbWFwRmxhZ3Mpe2lmKCFGUy5pc0ZpbGUoc3RyZWFtLm5vZGUubW9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT0RFVil9aWYobW1hcEZsYWdzJjIpe3JldHVybiAwfXZhciBieXRlc1dyaXR0ZW49TUVNRlMuc3RyZWFtX29wcy53cml0ZShzdHJlYW0sYnVmZmVyLDAsbGVuZ3RoLG9mZnNldCxmYWxzZSk7cmV0dXJuIDB9KX19O3ZhciBJREJGUz17ZGJzOnt9LGluZGV4ZWREQjooZnVuY3Rpb24oKXtpZih0eXBlb2YgaW5kZXhlZERCIT09XCJ1bmRlZmluZWRcIilyZXR1cm4gaW5kZXhlZERCO3ZhciByZXQ9bnVsbDtpZih0eXBlb2Ygd2luZG93PT09XCJvYmplY3RcIilyZXQ9d2luZG93LmluZGV4ZWREQnx8d2luZG93Lm1vekluZGV4ZWREQnx8d2luZG93LndlYmtpdEluZGV4ZWREQnx8d2luZG93Lm1zSW5kZXhlZERCO2Fzc2VydChyZXQsXCJJREJGUyB1c2VkLCBidXQgaW5kZXhlZERCIG5vdCBzdXBwb3J0ZWRcIik7cmV0dXJuIHJldH0pLERCX1ZFUlNJT046MjEsREJfU1RPUkVfTkFNRTpcIkZJTEVfREFUQVwiLG1vdW50OihmdW5jdGlvbihtb3VudCl7cmV0dXJuIE1FTUZTLm1vdW50LmFwcGx5KG51bGwsYXJndW1lbnRzKX0pLHN5bmNmczooZnVuY3Rpb24obW91bnQscG9wdWxhdGUsY2FsbGJhY2spe0lEQkZTLmdldExvY2FsU2V0KG1vdW50LChmdW5jdGlvbihlcnIsbG9jYWwpe2lmKGVycilyZXR1cm4gY2FsbGJhY2soZXJyKTtJREJGUy5nZXRSZW1vdGVTZXQobW91bnQsKGZ1bmN0aW9uKGVycixyZW1vdGUpe2lmKGVycilyZXR1cm4gY2FsbGJhY2soZXJyKTt2YXIgc3JjPXBvcHVsYXRlP3JlbW90ZTpsb2NhbDt2YXIgZHN0PXBvcHVsYXRlP2xvY2FsOnJlbW90ZTtJREJGUy5yZWNvbmNpbGUoc3JjLGRzdCxjYWxsYmFjayl9KSl9KSl9KSxnZXREQjooZnVuY3Rpb24obmFtZSxjYWxsYmFjayl7dmFyIGRiPUlEQkZTLmRic1tuYW1lXTtpZihkYil7cmV0dXJuIGNhbGxiYWNrKG51bGwsZGIpfXZhciByZXE7dHJ5e3JlcT1JREJGUy5pbmRleGVkREIoKS5vcGVuKG5hbWUsSURCRlMuREJfVkVSU0lPTil9Y2F0Y2goZSl7cmV0dXJuIGNhbGxiYWNrKGUpfXJlcS5vbnVwZ3JhZGVuZWVkZWQ9KGZ1bmN0aW9uKGUpe3ZhciBkYj1lLnRhcmdldC5yZXN1bHQ7dmFyIHRyYW5zYWN0aW9uPWUudGFyZ2V0LnRyYW5zYWN0aW9uO3ZhciBmaWxlU3RvcmU7aWYoZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhJREJGUy5EQl9TVE9SRV9OQU1FKSl7ZmlsZVN0b3JlPXRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKElEQkZTLkRCX1NUT1JFX05BTUUpfWVsc2V7ZmlsZVN0b3JlPWRiLmNyZWF0ZU9iamVjdFN0b3JlKElEQkZTLkRCX1NUT1JFX05BTUUpfWlmKCFmaWxlU3RvcmUuaW5kZXhOYW1lcy5jb250YWlucyhcInRpbWVzdGFtcFwiKSl7ZmlsZVN0b3JlLmNyZWF0ZUluZGV4KFwidGltZXN0YW1wXCIsXCJ0aW1lc3RhbXBcIix7dW5pcXVlOmZhbHNlfSl9fSk7cmVxLm9uc3VjY2Vzcz0oZnVuY3Rpb24oKXtkYj1yZXEucmVzdWx0O0lEQkZTLmRic1tuYW1lXT1kYjtjYWxsYmFjayhudWxsLGRiKX0pO3JlcS5vbmVycm9yPShmdW5jdGlvbihlKXtjYWxsYmFjayh0aGlzLmVycm9yKTtlLnByZXZlbnREZWZhdWx0KCl9KX0pLGdldExvY2FsU2V0OihmdW5jdGlvbihtb3VudCxjYWxsYmFjayl7dmFyIGVudHJpZXM9e307ZnVuY3Rpb24gaXNSZWFsRGlyKHApe3JldHVybiBwIT09XCIuXCImJnAhPT1cIi4uXCJ9ZnVuY3Rpb24gdG9BYnNvbHV0ZShyb290KXtyZXR1cm4oZnVuY3Rpb24ocCl7cmV0dXJuIFBBVEguam9pbjIocm9vdCxwKX0pfXZhciBjaGVjaz1GUy5yZWFkZGlyKG1vdW50Lm1vdW50cG9pbnQpLmZpbHRlcihpc1JlYWxEaXIpLm1hcCh0b0Fic29sdXRlKG1vdW50Lm1vdW50cG9pbnQpKTt3aGlsZShjaGVjay5sZW5ndGgpe3ZhciBwYXRoPWNoZWNrLnBvcCgpO3ZhciBzdGF0O3RyeXtzdGF0PUZTLnN0YXQocGF0aCl9Y2F0Y2goZSl7cmV0dXJuIGNhbGxiYWNrKGUpfWlmKEZTLmlzRGlyKHN0YXQubW9kZSkpe2NoZWNrLnB1c2guYXBwbHkoY2hlY2ssRlMucmVhZGRpcihwYXRoKS5maWx0ZXIoaXNSZWFsRGlyKS5tYXAodG9BYnNvbHV0ZShwYXRoKSkpfWVudHJpZXNbcGF0aF09e3RpbWVzdGFtcDpzdGF0Lm10aW1lfX1yZXR1cm4gY2FsbGJhY2sobnVsbCx7dHlwZTpcImxvY2FsXCIsZW50cmllczplbnRyaWVzfSl9KSxnZXRSZW1vdGVTZXQ6KGZ1bmN0aW9uKG1vdW50LGNhbGxiYWNrKXt2YXIgZW50cmllcz17fTtJREJGUy5nZXREQihtb3VudC5tb3VudHBvaW50LChmdW5jdGlvbihlcnIsZGIpe2lmKGVycilyZXR1cm4gY2FsbGJhY2soZXJyKTt2YXIgdHJhbnNhY3Rpb249ZGIudHJhbnNhY3Rpb24oW0lEQkZTLkRCX1NUT1JFX05BTUVdLFwicmVhZG9ubHlcIik7dHJhbnNhY3Rpb24ub25lcnJvcj0oZnVuY3Rpb24oZSl7Y2FsbGJhY2sodGhpcy5lcnJvcik7ZS5wcmV2ZW50RGVmYXVsdCgpfSk7dmFyIHN0b3JlPXRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKElEQkZTLkRCX1NUT1JFX05BTUUpO3ZhciBpbmRleD1zdG9yZS5pbmRleChcInRpbWVzdGFtcFwiKTtpbmRleC5vcGVuS2V5Q3Vyc29yKCkub25zdWNjZXNzPShmdW5jdGlvbihldmVudCl7dmFyIGN1cnNvcj1ldmVudC50YXJnZXQucmVzdWx0O2lmKCFjdXJzb3Ipe3JldHVybiBjYWxsYmFjayhudWxsLHt0eXBlOlwicmVtb3RlXCIsZGI6ZGIsZW50cmllczplbnRyaWVzfSl9ZW50cmllc1tjdXJzb3IucHJpbWFyeUtleV09e3RpbWVzdGFtcDpjdXJzb3Iua2V5fTtjdXJzb3IuY29udGludWUoKX0pfSkpfSksbG9hZExvY2FsRW50cnk6KGZ1bmN0aW9uKHBhdGgsY2FsbGJhY2spe3ZhciBzdGF0LG5vZGU7dHJ5e3ZhciBsb29rdXA9RlMubG9va3VwUGF0aChwYXRoKTtub2RlPWxvb2t1cC5ub2RlO3N0YXQ9RlMuc3RhdChwYXRoKX1jYXRjaChlKXtyZXR1cm4gY2FsbGJhY2soZSl9aWYoRlMuaXNEaXIoc3RhdC5tb2RlKSl7cmV0dXJuIGNhbGxiYWNrKG51bGwse3RpbWVzdGFtcDpzdGF0Lm10aW1lLG1vZGU6c3RhdC5tb2RlfSl9ZWxzZSBpZihGUy5pc0ZpbGUoc3RhdC5tb2RlKSl7bm9kZS5jb250ZW50cz1NRU1GUy5nZXRGaWxlRGF0YUFzVHlwZWRBcnJheShub2RlKTtyZXR1cm4gY2FsbGJhY2sobnVsbCx7dGltZXN0YW1wOnN0YXQubXRpbWUsbW9kZTpzdGF0Lm1vZGUsY29udGVudHM6bm9kZS5jb250ZW50c30pfWVsc2V7cmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcihcIm5vZGUgdHlwZSBub3Qgc3VwcG9ydGVkXCIpKX19KSxzdG9yZUxvY2FsRW50cnk6KGZ1bmN0aW9uKHBhdGgsZW50cnksY2FsbGJhY2spe3RyeXtpZihGUy5pc0RpcihlbnRyeS5tb2RlKSl7RlMubWtkaXIocGF0aCxlbnRyeS5tb2RlKX1lbHNlIGlmKEZTLmlzRmlsZShlbnRyeS5tb2RlKSl7RlMud3JpdGVGaWxlKHBhdGgsZW50cnkuY29udGVudHMse2VuY29kaW5nOlwiYmluYXJ5XCIsY2FuT3duOnRydWV9KX1lbHNle3JldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoXCJub2RlIHR5cGUgbm90IHN1cHBvcnRlZFwiKSl9RlMuY2htb2QocGF0aCxlbnRyeS5tb2RlKTtGUy51dGltZShwYXRoLGVudHJ5LnRpbWVzdGFtcCxlbnRyeS50aW1lc3RhbXApfWNhdGNoKGUpe3JldHVybiBjYWxsYmFjayhlKX1jYWxsYmFjayhudWxsKX0pLHJlbW92ZUxvY2FsRW50cnk6KGZ1bmN0aW9uKHBhdGgsY2FsbGJhY2spe3RyeXt2YXIgbG9va3VwPUZTLmxvb2t1cFBhdGgocGF0aCk7dmFyIHN0YXQ9RlMuc3RhdChwYXRoKTtpZihGUy5pc0RpcihzdGF0Lm1vZGUpKXtGUy5ybWRpcihwYXRoKX1lbHNlIGlmKEZTLmlzRmlsZShzdGF0Lm1vZGUpKXtGUy51bmxpbmsocGF0aCl9fWNhdGNoKGUpe3JldHVybiBjYWxsYmFjayhlKX1jYWxsYmFjayhudWxsKX0pLGxvYWRSZW1vdGVFbnRyeTooZnVuY3Rpb24oc3RvcmUscGF0aCxjYWxsYmFjayl7dmFyIHJlcT1zdG9yZS5nZXQocGF0aCk7cmVxLm9uc3VjY2Vzcz0oZnVuY3Rpb24oZXZlbnQpe2NhbGxiYWNrKG51bGwsZXZlbnQudGFyZ2V0LnJlc3VsdCl9KTtyZXEub25lcnJvcj0oZnVuY3Rpb24oZSl7Y2FsbGJhY2sodGhpcy5lcnJvcik7ZS5wcmV2ZW50RGVmYXVsdCgpfSl9KSxzdG9yZVJlbW90ZUVudHJ5OihmdW5jdGlvbihzdG9yZSxwYXRoLGVudHJ5LGNhbGxiYWNrKXt2YXIgcmVxPXN0b3JlLnB1dChlbnRyeSxwYXRoKTtyZXEub25zdWNjZXNzPShmdW5jdGlvbigpe2NhbGxiYWNrKG51bGwpfSk7cmVxLm9uZXJyb3I9KGZ1bmN0aW9uKGUpe2NhbGxiYWNrKHRoaXMuZXJyb3IpO2UucHJldmVudERlZmF1bHQoKX0pfSkscmVtb3ZlUmVtb3RlRW50cnk6KGZ1bmN0aW9uKHN0b3JlLHBhdGgsY2FsbGJhY2spe3ZhciByZXE9c3RvcmUuZGVsZXRlKHBhdGgpO3JlcS5vbnN1Y2Nlc3M9KGZ1bmN0aW9uKCl7Y2FsbGJhY2sobnVsbCl9KTtyZXEub25lcnJvcj0oZnVuY3Rpb24oZSl7Y2FsbGJhY2sodGhpcy5lcnJvcik7ZS5wcmV2ZW50RGVmYXVsdCgpfSl9KSxyZWNvbmNpbGU6KGZ1bmN0aW9uKHNyYyxkc3QsY2FsbGJhY2spe3ZhciB0b3RhbD0wO3ZhciBjcmVhdGU9W107T2JqZWN0LmtleXMoc3JjLmVudHJpZXMpLmZvckVhY2goKGZ1bmN0aW9uKGtleSl7dmFyIGU9c3JjLmVudHJpZXNba2V5XTt2YXIgZTI9ZHN0LmVudHJpZXNba2V5XTtpZighZTJ8fGUudGltZXN0YW1wPmUyLnRpbWVzdGFtcCl7Y3JlYXRlLnB1c2goa2V5KTt0b3RhbCsrfX0pKTt2YXIgcmVtb3ZlPVtdO09iamVjdC5rZXlzKGRzdC5lbnRyaWVzKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpe3ZhciBlPWRzdC5lbnRyaWVzW2tleV07dmFyIGUyPXNyYy5lbnRyaWVzW2tleV07aWYoIWUyKXtyZW1vdmUucHVzaChrZXkpO3RvdGFsKyt9fSkpO2lmKCF0b3RhbCl7cmV0dXJuIGNhbGxiYWNrKG51bGwpfXZhciBlcnJvcmVkPWZhbHNlO3ZhciBjb21wbGV0ZWQ9MDt2YXIgZGI9c3JjLnR5cGU9PT1cInJlbW90ZVwiP3NyYy5kYjpkc3QuZGI7dmFyIHRyYW5zYWN0aW9uPWRiLnRyYW5zYWN0aW9uKFtJREJGUy5EQl9TVE9SRV9OQU1FXSxcInJlYWR3cml0ZVwiKTt2YXIgc3RvcmU9dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoSURCRlMuREJfU1RPUkVfTkFNRSk7ZnVuY3Rpb24gZG9uZShlcnIpe2lmKGVycil7aWYoIWRvbmUuZXJyb3JlZCl7ZG9uZS5lcnJvcmVkPXRydWU7cmV0dXJuIGNhbGxiYWNrKGVycil9cmV0dXJufWlmKCsrY29tcGxldGVkPj10b3RhbCl7cmV0dXJuIGNhbGxiYWNrKG51bGwpfX10cmFuc2FjdGlvbi5vbmVycm9yPShmdW5jdGlvbihlKXtkb25lKHRoaXMuZXJyb3IpO2UucHJldmVudERlZmF1bHQoKX0pO2NyZWF0ZS5zb3J0KCkuZm9yRWFjaCgoZnVuY3Rpb24ocGF0aCl7aWYoZHN0LnR5cGU9PT1cImxvY2FsXCIpe0lEQkZTLmxvYWRSZW1vdGVFbnRyeShzdG9yZSxwYXRoLChmdW5jdGlvbihlcnIsZW50cnkpe2lmKGVycilyZXR1cm4gZG9uZShlcnIpO0lEQkZTLnN0b3JlTG9jYWxFbnRyeShwYXRoLGVudHJ5LGRvbmUpfSkpfWVsc2V7SURCRlMubG9hZExvY2FsRW50cnkocGF0aCwoZnVuY3Rpb24oZXJyLGVudHJ5KXtpZihlcnIpcmV0dXJuIGRvbmUoZXJyKTtJREJGUy5zdG9yZVJlbW90ZUVudHJ5KHN0b3JlLHBhdGgsZW50cnksZG9uZSl9KSl9fSkpO3JlbW92ZS5zb3J0KCkucmV2ZXJzZSgpLmZvckVhY2goKGZ1bmN0aW9uKHBhdGgpe2lmKGRzdC50eXBlPT09XCJsb2NhbFwiKXtJREJGUy5yZW1vdmVMb2NhbEVudHJ5KHBhdGgsZG9uZSl9ZWxzZXtJREJGUy5yZW1vdmVSZW1vdGVFbnRyeShzdG9yZSxwYXRoLGRvbmUpfX0pKX0pfTt2YXIgTk9ERUZTPXtpc1dpbmRvd3M6ZmFsc2Usc3RhdGljSW5pdDooZnVuY3Rpb24oKXtOT0RFRlMuaXNXaW5kb3dzPSEhcHJvY2Vzcy5wbGF0Zm9ybS5tYXRjaCgvXndpbi8pfSksbW91bnQ6KGZ1bmN0aW9uKG1vdW50KXthc3NlcnQoRU5WSVJPTk1FTlRfSVNfTk9ERSk7cmV0dXJuIE5PREVGUy5jcmVhdGVOb2RlKG51bGwsXCIvXCIsTk9ERUZTLmdldE1vZGUobW91bnQub3B0cy5yb290KSwwKX0pLGNyZWF0ZU5vZGU6KGZ1bmN0aW9uKHBhcmVudCxuYW1lLG1vZGUsZGV2KXtpZighRlMuaXNEaXIobW9kZSkmJiFGUy5pc0ZpbGUobW9kZSkmJiFGUy5pc0xpbmsobW9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCl9dmFyIG5vZGU9RlMuY3JlYXRlTm9kZShwYXJlbnQsbmFtZSxtb2RlKTtub2RlLm5vZGVfb3BzPU5PREVGUy5ub2RlX29wcztub2RlLnN0cmVhbV9vcHM9Tk9ERUZTLnN0cmVhbV9vcHM7cmV0dXJuIG5vZGV9KSxnZXRNb2RlOihmdW5jdGlvbihwYXRoKXt2YXIgc3RhdDt0cnl7c3RhdD1mcy5sc3RhdFN5bmMocGF0aCk7aWYoTk9ERUZTLmlzV2luZG93cyl7c3RhdC5tb2RlPXN0YXQubW9kZXwoc3RhdC5tb2RlJjE0Nik+PjF9fWNhdGNoKGUpe2lmKCFlLmNvZGUpdGhyb3cgZTt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX1yZXR1cm4gc3RhdC5tb2RlfSkscmVhbFBhdGg6KGZ1bmN0aW9uKG5vZGUpe3ZhciBwYXJ0cz1bXTt3aGlsZShub2RlLnBhcmVudCE9PW5vZGUpe3BhcnRzLnB1c2gobm9kZS5uYW1lKTtub2RlPW5vZGUucGFyZW50fXBhcnRzLnB1c2gobm9kZS5tb3VudC5vcHRzLnJvb3QpO3BhcnRzLnJldmVyc2UoKTtyZXR1cm4gUEFUSC5qb2luLmFwcGx5KG51bGwscGFydHMpfSksZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmdNYXA6ezA6XCJyXCIsMTpcInIrXCIsMjpcInIrXCIsNjQ6XCJyXCIsNjU6XCJyK1wiLDY2OlwicitcIiwxMjk6XCJyeCtcIiwxOTM6XCJyeCtcIiw1MTQ6XCJ3K1wiLDU3NzpcIndcIiw1Nzg6XCJ3K1wiLDcwNTpcInd4XCIsNzA2Olwid3grXCIsMTAyNDpcImFcIiwxMDI1OlwiYVwiLDEwMjY6XCJhK1wiLDEwODk6XCJhXCIsMTA5MDpcImErXCIsMTE1MzpcImF4XCIsMTE1NDpcImF4K1wiLDEyMTc6XCJheFwiLDEyMTg6XCJheCtcIiw0MDk2OlwicnNcIiw0MDk4OlwicnMrXCJ9LGZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nOihmdW5jdGlvbihmbGFncyl7ZmxhZ3MmPX4zMjc2ODtpZihmbGFncyBpbiBOT0RFRlMuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmdNYXApe3JldHVybiBOT0RFRlMuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmdNYXBbZmxhZ3NdfWVsc2V7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKX19KSxub2RlX29wczp7Z2V0YXR0cjooZnVuY3Rpb24obm9kZSl7dmFyIHBhdGg9Tk9ERUZTLnJlYWxQYXRoKG5vZGUpO3ZhciBzdGF0O3RyeXtzdGF0PWZzLmxzdGF0U3luYyhwYXRoKX1jYXRjaChlKXtpZighZS5jb2RlKXRocm93IGU7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVNbZS5jb2RlXSl9aWYoTk9ERUZTLmlzV2luZG93cyYmIXN0YXQuYmxrc2l6ZSl7c3RhdC5ibGtzaXplPTQwOTZ9aWYoTk9ERUZTLmlzV2luZG93cyYmIXN0YXQuYmxvY2tzKXtzdGF0LmJsb2Nrcz0oc3RhdC5zaXplK3N0YXQuYmxrc2l6ZS0xKS9zdGF0LmJsa3NpemV8MH1yZXR1cm57ZGV2OnN0YXQuZGV2LGlubzpzdGF0Lmlubyxtb2RlOnN0YXQubW9kZSxubGluazpzdGF0Lm5saW5rLHVpZDpzdGF0LnVpZCxnaWQ6c3RhdC5naWQscmRldjpzdGF0LnJkZXYsc2l6ZTpzdGF0LnNpemUsYXRpbWU6c3RhdC5hdGltZSxtdGltZTpzdGF0Lm10aW1lLGN0aW1lOnN0YXQuY3RpbWUsYmxrc2l6ZTpzdGF0LmJsa3NpemUsYmxvY2tzOnN0YXQuYmxvY2tzfX0pLHNldGF0dHI6KGZ1bmN0aW9uKG5vZGUsYXR0cil7dmFyIHBhdGg9Tk9ERUZTLnJlYWxQYXRoKG5vZGUpO3RyeXtpZihhdHRyLm1vZGUhPT11bmRlZmluZWQpe2ZzLmNobW9kU3luYyhwYXRoLGF0dHIubW9kZSk7bm9kZS5tb2RlPWF0dHIubW9kZX1pZihhdHRyLnRpbWVzdGFtcCE9PXVuZGVmaW5lZCl7dmFyIGRhdGU9bmV3IERhdGUoYXR0ci50aW1lc3RhbXApO2ZzLnV0aW1lc1N5bmMocGF0aCxkYXRlLGRhdGUpfWlmKGF0dHIuc2l6ZSE9PXVuZGVmaW5lZCl7ZnMudHJ1bmNhdGVTeW5jKHBhdGgsYXR0ci5zaXplKX19Y2F0Y2goZSl7aWYoIWUuY29kZSl0aHJvdyBlO3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTW2UuY29kZV0pfX0pLGxvb2t1cDooZnVuY3Rpb24ocGFyZW50LG5hbWUpe3ZhciBwYXRoPVBBVEguam9pbjIoTk9ERUZTLnJlYWxQYXRoKHBhcmVudCksbmFtZSk7dmFyIG1vZGU9Tk9ERUZTLmdldE1vZGUocGF0aCk7cmV0dXJuIE5PREVGUy5jcmVhdGVOb2RlKHBhcmVudCxuYW1lLG1vZGUpfSksbWtub2Q6KGZ1bmN0aW9uKHBhcmVudCxuYW1lLG1vZGUsZGV2KXt2YXIgbm9kZT1OT0RFRlMuY3JlYXRlTm9kZShwYXJlbnQsbmFtZSxtb2RlLGRldik7dmFyIHBhdGg9Tk9ERUZTLnJlYWxQYXRoKG5vZGUpO3RyeXtpZihGUy5pc0Rpcihub2RlLm1vZGUpKXtmcy5ta2RpclN5bmMocGF0aCxub2RlLm1vZGUpfWVsc2V7ZnMud3JpdGVGaWxlU3luYyhwYXRoLFwiXCIse21vZGU6bm9kZS5tb2RlfSl9fWNhdGNoKGUpe2lmKCFlLmNvZGUpdGhyb3cgZTt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX1yZXR1cm4gbm9kZX0pLHJlbmFtZTooZnVuY3Rpb24ob2xkTm9kZSxuZXdEaXIsbmV3TmFtZSl7dmFyIG9sZFBhdGg9Tk9ERUZTLnJlYWxQYXRoKG9sZE5vZGUpO3ZhciBuZXdQYXRoPVBBVEguam9pbjIoTk9ERUZTLnJlYWxQYXRoKG5ld0RpciksbmV3TmFtZSk7dHJ5e2ZzLnJlbmFtZVN5bmMob2xkUGF0aCxuZXdQYXRoKX1jYXRjaChlKXtpZighZS5jb2RlKXRocm93IGU7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVNbZS5jb2RlXSl9fSksdW5saW5rOihmdW5jdGlvbihwYXJlbnQsbmFtZSl7dmFyIHBhdGg9UEFUSC5qb2luMihOT0RFRlMucmVhbFBhdGgocGFyZW50KSxuYW1lKTt0cnl7ZnMudW5saW5rU3luYyhwYXRoKX1jYXRjaChlKXtpZighZS5jb2RlKXRocm93IGU7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVNbZS5jb2RlXSl9fSkscm1kaXI6KGZ1bmN0aW9uKHBhcmVudCxuYW1lKXt2YXIgcGF0aD1QQVRILmpvaW4yKE5PREVGUy5yZWFsUGF0aChwYXJlbnQpLG5hbWUpO3RyeXtmcy5ybWRpclN5bmMocGF0aCl9Y2F0Y2goZSl7aWYoIWUuY29kZSl0aHJvdyBlO3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTW2UuY29kZV0pfX0pLHJlYWRkaXI6KGZ1bmN0aW9uKG5vZGUpe3ZhciBwYXRoPU5PREVGUy5yZWFsUGF0aChub2RlKTt0cnl7cmV0dXJuIGZzLnJlYWRkaXJTeW5jKHBhdGgpfWNhdGNoKGUpe2lmKCFlLmNvZGUpdGhyb3cgZTt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX19KSxzeW1saW5rOihmdW5jdGlvbihwYXJlbnQsbmV3TmFtZSxvbGRQYXRoKXt2YXIgbmV3UGF0aD1QQVRILmpvaW4yKE5PREVGUy5yZWFsUGF0aChwYXJlbnQpLG5ld05hbWUpO3RyeXtmcy5zeW1saW5rU3luYyhvbGRQYXRoLG5ld1BhdGgpfWNhdGNoKGUpe2lmKCFlLmNvZGUpdGhyb3cgZTt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX19KSxyZWFkbGluazooZnVuY3Rpb24obm9kZSl7dmFyIHBhdGg9Tk9ERUZTLnJlYWxQYXRoKG5vZGUpO3RyeXtwYXRoPWZzLnJlYWRsaW5rU3luYyhwYXRoKTtwYXRoPU5PREVKU19QQVRILnJlbGF0aXZlKE5PREVKU19QQVRILnJlc29sdmUobm9kZS5tb3VudC5vcHRzLnJvb3QpLHBhdGgpO3JldHVybiBwYXRofWNhdGNoKGUpe2lmKCFlLmNvZGUpdGhyb3cgZTt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX19KX0sc3RyZWFtX29wczp7b3BlbjooZnVuY3Rpb24oc3RyZWFtKXt2YXIgcGF0aD1OT0RFRlMucmVhbFBhdGgoc3RyZWFtLm5vZGUpO3RyeXtpZihGUy5pc0ZpbGUoc3RyZWFtLm5vZGUubW9kZSkpe3N0cmVhbS5uZmQ9ZnMub3BlblN5bmMocGF0aCxOT0RFRlMuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoc3RyZWFtLmZsYWdzKSl9fWNhdGNoKGUpe2lmKCFlLmNvZGUpdGhyb3cgZTt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX19KSxjbG9zZTooZnVuY3Rpb24oc3RyZWFtKXt0cnl7aWYoRlMuaXNGaWxlKHN0cmVhbS5ub2RlLm1vZGUpJiZzdHJlYW0ubmZkKXtmcy5jbG9zZVN5bmMoc3RyZWFtLm5mZCl9fWNhdGNoKGUpe2lmKCFlLmNvZGUpdGhyb3cgZTt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX19KSxyZWFkOihmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zaXRpb24pe2lmKGxlbmd0aD09PTApcmV0dXJuIDA7dmFyIG5idWZmZXI9bmV3IEJ1ZmZlcihsZW5ndGgpO3ZhciByZXM7dHJ5e3Jlcz1mcy5yZWFkU3luYyhzdHJlYW0ubmZkLG5idWZmZXIsMCxsZW5ndGgscG9zaXRpb24pfWNhdGNoKGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTW2UuY29kZV0pfWlmKHJlcz4wKXtmb3IodmFyIGk9MDtpPHJlcztpKyspe2J1ZmZlcltvZmZzZXQraV09bmJ1ZmZlcltpXX19cmV0dXJuIHJlc30pLHdyaXRlOihmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zaXRpb24pe3ZhciBuYnVmZmVyPW5ldyBCdWZmZXIoYnVmZmVyLnN1YmFycmF5KG9mZnNldCxvZmZzZXQrbGVuZ3RoKSk7dmFyIHJlczt0cnl7cmVzPWZzLndyaXRlU3luYyhzdHJlYW0ubmZkLG5idWZmZXIsMCxsZW5ndGgscG9zaXRpb24pfWNhdGNoKGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTW2UuY29kZV0pfXJldHVybiByZXN9KSxsbHNlZWs6KGZ1bmN0aW9uKHN0cmVhbSxvZmZzZXQsd2hlbmNlKXt2YXIgcG9zaXRpb249b2Zmc2V0O2lmKHdoZW5jZT09PTEpe3Bvc2l0aW9uKz1zdHJlYW0ucG9zaXRpb259ZWxzZSBpZih3aGVuY2U9PT0yKXtpZihGUy5pc0ZpbGUoc3RyZWFtLm5vZGUubW9kZSkpe3RyeXt2YXIgc3RhdD1mcy5mc3RhdFN5bmMoc3RyZWFtLm5mZCk7cG9zaXRpb24rPXN0YXQuc2l6ZX1jYXRjaChlKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX19fWlmKHBvc2l0aW9uPDApe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCl9cmV0dXJuIHBvc2l0aW9ufSl9fTt2YXIgV09SS0VSRlM9e0RJUl9NT0RFOjE2ODk1LEZJTEVfTU9ERTozMzI3OSxyZWFkZXI6bnVsbCxtb3VudDooZnVuY3Rpb24obW91bnQpe2Fzc2VydChFTlZJUk9OTUVOVF9JU19XT1JLRVIpO2lmKCFXT1JLRVJGUy5yZWFkZXIpV09SS0VSRlMucmVhZGVyPW5ldyBGaWxlUmVhZGVyU3luYzt2YXIgcm9vdD1XT1JLRVJGUy5jcmVhdGVOb2RlKG51bGwsXCIvXCIsV09SS0VSRlMuRElSX01PREUsMCk7dmFyIGNyZWF0ZWRQYXJlbnRzPXt9O2Z1bmN0aW9uIGVuc3VyZVBhcmVudChwYXRoKXt2YXIgcGFydHM9cGF0aC5zcGxpdChcIi9cIik7dmFyIHBhcmVudD1yb290O2Zvcih2YXIgaT0wO2k8cGFydHMubGVuZ3RoLTE7aSsrKXt2YXIgY3Vycj1wYXJ0cy5zbGljZSgwLGkrMSkuam9pbihcIi9cIik7aWYoIWNyZWF0ZWRQYXJlbnRzW2N1cnJdKXtjcmVhdGVkUGFyZW50c1tjdXJyXT1XT1JLRVJGUy5jcmVhdGVOb2RlKHBhcmVudCxjdXJyLFdPUktFUkZTLkRJUl9NT0RFLDApfXBhcmVudD1jcmVhdGVkUGFyZW50c1tjdXJyXX1yZXR1cm4gcGFyZW50fWZ1bmN0aW9uIGJhc2UocGF0aCl7dmFyIHBhcnRzPXBhdGguc3BsaXQoXCIvXCIpO3JldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGgtMV19QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChtb3VudC5vcHRzW1wiZmlsZXNcIl18fFtdLChmdW5jdGlvbihmaWxlKXtXT1JLRVJGUy5jcmVhdGVOb2RlKGVuc3VyZVBhcmVudChmaWxlLm5hbWUpLGJhc2UoZmlsZS5uYW1lKSxXT1JLRVJGUy5GSUxFX01PREUsMCxmaWxlLGZpbGUubGFzdE1vZGlmaWVkRGF0ZSl9KSk7KG1vdW50Lm9wdHNbXCJibG9ic1wiXXx8W10pLmZvckVhY2goKGZ1bmN0aW9uKG9iail7V09SS0VSRlMuY3JlYXRlTm9kZShlbnN1cmVQYXJlbnQob2JqW1wibmFtZVwiXSksYmFzZShvYmpbXCJuYW1lXCJdKSxXT1JLRVJGUy5GSUxFX01PREUsMCxvYmpbXCJkYXRhXCJdKX0pKTsobW91bnQub3B0c1tcInBhY2thZ2VzXCJdfHxbXSkuZm9yRWFjaCgoZnVuY3Rpb24ocGFjayl7cGFja1tcIm1ldGFkYXRhXCJdLmZpbGVzLmZvckVhY2goKGZ1bmN0aW9uKGZpbGUpe3ZhciBuYW1lPWZpbGUuZmlsZW5hbWUuc3Vic3RyKDEpO1dPUktFUkZTLmNyZWF0ZU5vZGUoZW5zdXJlUGFyZW50KG5hbWUpLGJhc2UobmFtZSksV09SS0VSRlMuRklMRV9NT0RFLDAscGFja1tcImJsb2JcIl0uc2xpY2UoZmlsZS5zdGFydCxmaWxlLmVuZCkpfSkpfSkpO3JldHVybiByb290fSksY3JlYXRlTm9kZTooZnVuY3Rpb24ocGFyZW50LG5hbWUsbW9kZSxkZXYsY29udGVudHMsbXRpbWUpe3ZhciBub2RlPUZTLmNyZWF0ZU5vZGUocGFyZW50LG5hbWUsbW9kZSk7bm9kZS5tb2RlPW1vZGU7bm9kZS5ub2RlX29wcz1XT1JLRVJGUy5ub2RlX29wcztub2RlLnN0cmVhbV9vcHM9V09SS0VSRlMuc3RyZWFtX29wcztub2RlLnRpbWVzdGFtcD0obXRpbWV8fG5ldyBEYXRlKS5nZXRUaW1lKCk7YXNzZXJ0KFdPUktFUkZTLkZJTEVfTU9ERSE9PVdPUktFUkZTLkRJUl9NT0RFKTtpZihtb2RlPT09V09SS0VSRlMuRklMRV9NT0RFKXtub2RlLnNpemU9Y29udGVudHMuc2l6ZTtub2RlLmNvbnRlbnRzPWNvbnRlbnRzfWVsc2V7bm9kZS5zaXplPTQwOTY7bm9kZS5jb250ZW50cz17fX1pZihwYXJlbnQpe3BhcmVudC5jb250ZW50c1tuYW1lXT1ub2RlfXJldHVybiBub2RlfSksbm9kZV9vcHM6e2dldGF0dHI6KGZ1bmN0aW9uKG5vZGUpe3JldHVybntkZXY6MSxpbm86dW5kZWZpbmVkLG1vZGU6bm9kZS5tb2RlLG5saW5rOjEsdWlkOjAsZ2lkOjAscmRldjp1bmRlZmluZWQsc2l6ZTpub2RlLnNpemUsYXRpbWU6bmV3IERhdGUobm9kZS50aW1lc3RhbXApLG10aW1lOm5ldyBEYXRlKG5vZGUudGltZXN0YW1wKSxjdGltZTpuZXcgRGF0ZShub2RlLnRpbWVzdGFtcCksYmxrc2l6ZTo0MDk2LGJsb2NrczpNYXRoLmNlaWwobm9kZS5zaXplLzQwOTYpfX0pLHNldGF0dHI6KGZ1bmN0aW9uKG5vZGUsYXR0cil7aWYoYXR0ci5tb2RlIT09dW5kZWZpbmVkKXtub2RlLm1vZGU9YXR0ci5tb2RlfWlmKGF0dHIudGltZXN0YW1wIT09dW5kZWZpbmVkKXtub2RlLnRpbWVzdGFtcD1hdHRyLnRpbWVzdGFtcH19KSxsb29rdXA6KGZ1bmN0aW9uKHBhcmVudCxuYW1lKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9FTlQpfSksbWtub2Q6KGZ1bmN0aW9uKHBhcmVudCxuYW1lLG1vZGUsZGV2KXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSl9KSxyZW5hbWU6KGZ1bmN0aW9uKG9sZE5vZGUsbmV3RGlyLG5ld05hbWUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKX0pLHVubGluazooZnVuY3Rpb24ocGFyZW50LG5hbWUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKX0pLHJtZGlyOihmdW5jdGlvbihwYXJlbnQsbmFtZSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pfSkscmVhZGRpcjooZnVuY3Rpb24obm9kZSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pfSksc3ltbGluazooZnVuY3Rpb24ocGFyZW50LG5ld05hbWUsb2xkUGF0aCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pfSkscmVhZGxpbms6KGZ1bmN0aW9uKG5vZGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKX0pfSxzdHJlYW1fb3BzOntyZWFkOihmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zaXRpb24pe2lmKHBvc2l0aW9uPj1zdHJlYW0ubm9kZS5zaXplKXJldHVybiAwO3ZhciBjaHVuaz1zdHJlYW0ubm9kZS5jb250ZW50cy5zbGljZShwb3NpdGlvbixwb3NpdGlvbitsZW5ndGgpO3ZhciBhYj1XT1JLRVJGUy5yZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoY2h1bmspO2J1ZmZlci5zZXQobmV3IFVpbnQ4QXJyYXkoYWIpLG9mZnNldCk7cmV0dXJuIGNodW5rLnNpemV9KSx3cml0ZTooZnVuY3Rpb24oc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLHBvc2l0aW9uKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU8pfSksbGxzZWVrOihmdW5jdGlvbihzdHJlYW0sb2Zmc2V0LHdoZW5jZSl7dmFyIHBvc2l0aW9uPW9mZnNldDtpZih3aGVuY2U9PT0xKXtwb3NpdGlvbis9c3RyZWFtLnBvc2l0aW9ufWVsc2UgaWYod2hlbmNlPT09Mil7aWYoRlMuaXNGaWxlKHN0cmVhbS5ub2RlLm1vZGUpKXtwb3NpdGlvbis9c3RyZWFtLm5vZGUuc2l6ZX19aWYocG9zaXRpb248MCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKX1yZXR1cm4gcG9zaXRpb259KX19O3ZhciBfc3RkaW49YWxsb2NhdGUoMSxcImkzMipcIixBTExPQ19TVEFUSUMpO3ZhciBfc3Rkb3V0PWFsbG9jYXRlKDEsXCJpMzIqXCIsQUxMT0NfU1RBVElDKTt2YXIgX3N0ZGVycj1hbGxvY2F0ZSgxLFwiaTMyKlwiLEFMTE9DX1NUQVRJQyk7dmFyIEZTPXtyb290Om51bGwsbW91bnRzOltdLGRldmljZXM6W251bGxdLHN0cmVhbXM6W10sbmV4dElub2RlOjEsbmFtZVRhYmxlOm51bGwsY3VycmVudFBhdGg6XCIvXCIsaW5pdGlhbGl6ZWQ6ZmFsc2UsaWdub3JlUGVybWlzc2lvbnM6dHJ1ZSx0cmFja2luZ0RlbGVnYXRlOnt9LHRyYWNraW5nOntvcGVuRmxhZ3M6e1JFQUQ6MSxXUklURToyfX0sRXJybm9FcnJvcjpudWxsLGdlbmVyaWNFcnJvcnM6e30sZmlsZXN5c3RlbXM6bnVsbCxoYW5kbGVGU0Vycm9yOihmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSl0aHJvdyBlK1wiIDogXCIrc3RhY2tUcmFjZSgpO3JldHVybiBfX19zZXRFcnJObyhlLmVycm5vKX0pLGxvb2t1cFBhdGg6KGZ1bmN0aW9uKHBhdGgsb3B0cyl7cGF0aD1QQVRILnJlc29sdmUoRlMuY3dkKCkscGF0aCk7b3B0cz1vcHRzfHx7fTtpZighcGF0aClyZXR1cm57cGF0aDpcIlwiLG5vZGU6bnVsbH07dmFyIGRlZmF1bHRzPXtmb2xsb3dfbW91bnQ6dHJ1ZSxyZWN1cnNlX2NvdW50OjB9O2Zvcih2YXIga2V5IGluIGRlZmF1bHRzKXtpZihvcHRzW2tleV09PT11bmRlZmluZWQpe29wdHNba2V5XT1kZWZhdWx0c1trZXldfX1pZihvcHRzLnJlY3Vyc2VfY291bnQ+OCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUxPT1ApfXZhciBwYXJ0cz1QQVRILm5vcm1hbGl6ZUFycmF5KHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigoZnVuY3Rpb24ocCl7cmV0dXJuISFwfSkpLGZhbHNlKTt2YXIgY3VycmVudD1GUy5yb290O3ZhciBjdXJyZW50X3BhdGg9XCIvXCI7Zm9yKHZhciBpPTA7aTxwYXJ0cy5sZW5ndGg7aSsrKXt2YXIgaXNsYXN0PWk9PT1wYXJ0cy5sZW5ndGgtMTtpZihpc2xhc3QmJm9wdHMucGFyZW50KXticmVha31jdXJyZW50PUZTLmxvb2t1cE5vZGUoY3VycmVudCxwYXJ0c1tpXSk7Y3VycmVudF9wYXRoPVBBVEguam9pbjIoY3VycmVudF9wYXRoLHBhcnRzW2ldKTtpZihGUy5pc01vdW50cG9pbnQoY3VycmVudCkpe2lmKCFpc2xhc3R8fGlzbGFzdCYmb3B0cy5mb2xsb3dfbW91bnQpe2N1cnJlbnQ9Y3VycmVudC5tb3VudGVkLnJvb3R9fWlmKCFpc2xhc3R8fG9wdHMuZm9sbG93KXt2YXIgY291bnQ9MDt3aGlsZShGUy5pc0xpbmsoY3VycmVudC5tb2RlKSl7dmFyIGxpbms9RlMucmVhZGxpbmsoY3VycmVudF9wYXRoKTtjdXJyZW50X3BhdGg9UEFUSC5yZXNvbHZlKFBBVEguZGlybmFtZShjdXJyZW50X3BhdGgpLGxpbmspO3ZhciBsb29rdXA9RlMubG9va3VwUGF0aChjdXJyZW50X3BhdGgse3JlY3Vyc2VfY291bnQ6b3B0cy5yZWN1cnNlX2NvdW50fSk7Y3VycmVudD1sb29rdXAubm9kZTtpZihjb3VudCsrPjQwKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTE9PUCl9fX19cmV0dXJue3BhdGg6Y3VycmVudF9wYXRoLG5vZGU6Y3VycmVudH19KSxnZXRQYXRoOihmdW5jdGlvbihub2RlKXt2YXIgcGF0aDt3aGlsZSh0cnVlKXtpZihGUy5pc1Jvb3Qobm9kZSkpe3ZhciBtb3VudD1ub2RlLm1vdW50Lm1vdW50cG9pbnQ7aWYoIXBhdGgpcmV0dXJuIG1vdW50O3JldHVybiBtb3VudFttb3VudC5sZW5ndGgtMV0hPT1cIi9cIj9tb3VudCtcIi9cIitwYXRoOm1vdW50K3BhdGh9cGF0aD1wYXRoP25vZGUubmFtZStcIi9cIitwYXRoOm5vZGUubmFtZTtub2RlPW5vZGUucGFyZW50fX0pLGhhc2hOYW1lOihmdW5jdGlvbihwYXJlbnRpZCxuYW1lKXt2YXIgaGFzaD0wO2Zvcih2YXIgaT0wO2k8bmFtZS5sZW5ndGg7aSsrKXtoYXNoPShoYXNoPDw1KS1oYXNoK25hbWUuY2hhckNvZGVBdChpKXwwfXJldHVybihwYXJlbnRpZCtoYXNoPj4+MCklRlMubmFtZVRhYmxlLmxlbmd0aH0pLGhhc2hBZGROb2RlOihmdW5jdGlvbihub2RlKXt2YXIgaGFzaD1GUy5oYXNoTmFtZShub2RlLnBhcmVudC5pZCxub2RlLm5hbWUpO25vZGUubmFtZV9uZXh0PUZTLm5hbWVUYWJsZVtoYXNoXTtGUy5uYW1lVGFibGVbaGFzaF09bm9kZX0pLGhhc2hSZW1vdmVOb2RlOihmdW5jdGlvbihub2RlKXt2YXIgaGFzaD1GUy5oYXNoTmFtZShub2RlLnBhcmVudC5pZCxub2RlLm5hbWUpO2lmKEZTLm5hbWVUYWJsZVtoYXNoXT09PW5vZGUpe0ZTLm5hbWVUYWJsZVtoYXNoXT1ub2RlLm5hbWVfbmV4dH1lbHNle3ZhciBjdXJyZW50PUZTLm5hbWVUYWJsZVtoYXNoXTt3aGlsZShjdXJyZW50KXtpZihjdXJyZW50Lm5hbWVfbmV4dD09PW5vZGUpe2N1cnJlbnQubmFtZV9uZXh0PW5vZGUubmFtZV9uZXh0O2JyZWFrfWN1cnJlbnQ9Y3VycmVudC5uYW1lX25leHR9fX0pLGxvb2t1cE5vZGU6KGZ1bmN0aW9uKHBhcmVudCxuYW1lKXt2YXIgZXJyPUZTLm1heUxvb2t1cChwYXJlbnQpO2lmKGVycil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyLHBhcmVudCl9dmFyIGhhc2g9RlMuaGFzaE5hbWUocGFyZW50LmlkLG5hbWUpO2Zvcih2YXIgbm9kZT1GUy5uYW1lVGFibGVbaGFzaF07bm9kZTtub2RlPW5vZGUubmFtZV9uZXh0KXt2YXIgbm9kZU5hbWU9bm9kZS5uYW1lO2lmKG5vZGUucGFyZW50LmlkPT09cGFyZW50LmlkJiZub2RlTmFtZT09PW5hbWUpe3JldHVybiBub2RlfX1yZXR1cm4gRlMubG9va3VwKHBhcmVudCxuYW1lKX0pLGNyZWF0ZU5vZGU6KGZ1bmN0aW9uKHBhcmVudCxuYW1lLG1vZGUscmRldil7aWYoIUZTLkZTTm9kZSl7RlMuRlNOb2RlPShmdW5jdGlvbihwYXJlbnQsbmFtZSxtb2RlLHJkZXYpe2lmKCFwYXJlbnQpe3BhcmVudD10aGlzfXRoaXMucGFyZW50PXBhcmVudDt0aGlzLm1vdW50PXBhcmVudC5tb3VudDt0aGlzLm1vdW50ZWQ9bnVsbDt0aGlzLmlkPUZTLm5leHRJbm9kZSsrO3RoaXMubmFtZT1uYW1lO3RoaXMubW9kZT1tb2RlO3RoaXMubm9kZV9vcHM9e307dGhpcy5zdHJlYW1fb3BzPXt9O3RoaXMucmRldj1yZGV2fSk7RlMuRlNOb2RlLnByb3RvdHlwZT17fTt2YXIgcmVhZE1vZGU9MjkyfDczO3ZhciB3cml0ZU1vZGU9MTQ2O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZTLkZTTm9kZS5wcm90b3R5cGUse3JlYWQ6e2dldDooZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5tb2RlJnJlYWRNb2RlKT09PXJlYWRNb2RlfSksc2V0OihmdW5jdGlvbih2YWwpe3ZhbD90aGlzLm1vZGV8PXJlYWRNb2RlOnRoaXMubW9kZSY9fnJlYWRNb2RlfSl9LHdyaXRlOntnZXQ6KGZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMubW9kZSZ3cml0ZU1vZGUpPT09d3JpdGVNb2RlfSksc2V0OihmdW5jdGlvbih2YWwpe3ZhbD90aGlzLm1vZGV8PXdyaXRlTW9kZTp0aGlzLm1vZGUmPX53cml0ZU1vZGV9KX0saXNGb2xkZXI6e2dldDooZnVuY3Rpb24oKXtyZXR1cm4gRlMuaXNEaXIodGhpcy5tb2RlKX0pfSxpc0RldmljZTp7Z2V0OihmdW5jdGlvbigpe3JldHVybiBGUy5pc0NocmRldih0aGlzLm1vZGUpfSl9fSl9dmFyIG5vZGU9bmV3IEZTLkZTTm9kZShwYXJlbnQsbmFtZSxtb2RlLHJkZXYpO0ZTLmhhc2hBZGROb2RlKG5vZGUpO3JldHVybiBub2RlfSksZGVzdHJveU5vZGU6KGZ1bmN0aW9uKG5vZGUpe0ZTLmhhc2hSZW1vdmVOb2RlKG5vZGUpfSksaXNSb290OihmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZT09PW5vZGUucGFyZW50fSksaXNNb3VudHBvaW50OihmdW5jdGlvbihub2RlKXtyZXR1cm4hIW5vZGUubW91bnRlZH0pLGlzRmlsZTooZnVuY3Rpb24obW9kZSl7cmV0dXJuKG1vZGUmNjE0NDApPT09MzI3Njh9KSxpc0RpcjooZnVuY3Rpb24obW9kZSl7cmV0dXJuKG1vZGUmNjE0NDApPT09MTYzODR9KSxpc0xpbms6KGZ1bmN0aW9uKG1vZGUpe3JldHVybihtb2RlJjYxNDQwKT09PTQwOTYwfSksaXNDaHJkZXY6KGZ1bmN0aW9uKG1vZGUpe3JldHVybihtb2RlJjYxNDQwKT09PTgxOTJ9KSxpc0Jsa2RldjooZnVuY3Rpb24obW9kZSl7cmV0dXJuKG1vZGUmNjE0NDApPT09MjQ1NzZ9KSxpc0ZJRk86KGZ1bmN0aW9uKG1vZGUpe3JldHVybihtb2RlJjYxNDQwKT09PTQwOTZ9KSxpc1NvY2tldDooZnVuY3Rpb24obW9kZSl7cmV0dXJuKG1vZGUmNDkxNTIpPT09NDkxNTJ9KSxmbGFnTW9kZXM6e1wiclwiOjAsXCJyc1wiOjEwNTI2NzIsXCJyK1wiOjIsXCJ3XCI6NTc3LFwid3hcIjo3MDUsXCJ4d1wiOjcwNSxcIncrXCI6NTc4LFwid3grXCI6NzA2LFwieHcrXCI6NzA2LFwiYVwiOjEwODksXCJheFwiOjEyMTcsXCJ4YVwiOjEyMTcsXCJhK1wiOjEwOTAsXCJheCtcIjoxMjE4LFwieGErXCI6MTIxOH0sbW9kZVN0cmluZ1RvRmxhZ3M6KGZ1bmN0aW9uKHN0cil7dmFyIGZsYWdzPUZTLmZsYWdNb2Rlc1tzdHJdO2lmKHR5cGVvZiBmbGFncz09PVwidW5kZWZpbmVkXCIpe3Rocm93IG5ldyBFcnJvcihcIlVua25vd24gZmlsZSBvcGVuIG1vZGU6IFwiK3N0cil9cmV0dXJuIGZsYWdzfSksZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmc6KGZ1bmN0aW9uKGZsYWcpe3ZhciBwZXJtcz1bXCJyXCIsXCJ3XCIsXCJyd1wiXVtmbGFnJjNdO2lmKGZsYWcmNTEyKXtwZXJtcys9XCJ3XCJ9cmV0dXJuIHBlcm1zfSksbm9kZVBlcm1pc3Npb25zOihmdW5jdGlvbihub2RlLHBlcm1zKXtpZihGUy5pZ25vcmVQZXJtaXNzaW9ucyl7cmV0dXJuIDB9aWYocGVybXMuaW5kZXhPZihcInJcIikhPT0tMSYmIShub2RlLm1vZGUmMjkyKSl7cmV0dXJuIEVSUk5PX0NPREVTLkVBQ0NFU31lbHNlIGlmKHBlcm1zLmluZGV4T2YoXCJ3XCIpIT09LTEmJiEobm9kZS5tb2RlJjE0Nikpe3JldHVybiBFUlJOT19DT0RFUy5FQUNDRVN9ZWxzZSBpZihwZXJtcy5pbmRleE9mKFwieFwiKSE9PS0xJiYhKG5vZGUubW9kZSY3Mykpe3JldHVybiBFUlJOT19DT0RFUy5FQUNDRVN9cmV0dXJuIDB9KSxtYXlMb29rdXA6KGZ1bmN0aW9uKGRpcil7dmFyIGVycj1GUy5ub2RlUGVybWlzc2lvbnMoZGlyLFwieFwiKTtpZihlcnIpcmV0dXJuIGVycjtpZighZGlyLm5vZGVfb3BzLmxvb2t1cClyZXR1cm4gRVJSTk9fQ09ERVMuRUFDQ0VTO3JldHVybiAwfSksbWF5Q3JlYXRlOihmdW5jdGlvbihkaXIsbmFtZSl7dHJ5e3ZhciBub2RlPUZTLmxvb2t1cE5vZGUoZGlyLG5hbWUpO3JldHVybiBFUlJOT19DT0RFUy5FRVhJU1R9Y2F0Y2goZSl7fXJldHVybiBGUy5ub2RlUGVybWlzc2lvbnMoZGlyLFwid3hcIil9KSxtYXlEZWxldGU6KGZ1bmN0aW9uKGRpcixuYW1lLGlzZGlyKXt2YXIgbm9kZTt0cnl7bm9kZT1GUy5sb29rdXBOb2RlKGRpcixuYW1lKX1jYXRjaChlKXtyZXR1cm4gZS5lcnJub312YXIgZXJyPUZTLm5vZGVQZXJtaXNzaW9ucyhkaXIsXCJ3eFwiKTtpZihlcnIpe3JldHVybiBlcnJ9aWYoaXNkaXIpe2lmKCFGUy5pc0Rpcihub2RlLm1vZGUpKXtyZXR1cm4gRVJSTk9fQ09ERVMuRU5PVERJUn1pZihGUy5pc1Jvb3Qobm9kZSl8fEZTLmdldFBhdGgobm9kZSk9PT1GUy5jd2QoKSl7cmV0dXJuIEVSUk5PX0NPREVTLkVCVVNZfX1lbHNle2lmKEZTLmlzRGlyKG5vZGUubW9kZSkpe3JldHVybiBFUlJOT19DT0RFUy5FSVNESVJ9fXJldHVybiAwfSksbWF5T3BlbjooZnVuY3Rpb24obm9kZSxmbGFncyl7aWYoIW5vZGUpe3JldHVybiBFUlJOT19DT0RFUy5FTk9FTlR9aWYoRlMuaXNMaW5rKG5vZGUubW9kZSkpe3JldHVybiBFUlJOT19DT0RFUy5FTE9PUH1lbHNlIGlmKEZTLmlzRGlyKG5vZGUubW9kZSkpe2lmKChmbGFncyYyMDk3MTU1KSE9PTB8fGZsYWdzJjUxMil7cmV0dXJuIEVSUk5PX0NPREVTLkVJU0RJUn19cmV0dXJuIEZTLm5vZGVQZXJtaXNzaW9ucyhub2RlLEZTLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKGZsYWdzKSl9KSxNQVhfT1BFTl9GRFM6NDA5NixuZXh0ZmQ6KGZ1bmN0aW9uKGZkX3N0YXJ0LGZkX2VuZCl7ZmRfc3RhcnQ9ZmRfc3RhcnR8fDA7ZmRfZW5kPWZkX2VuZHx8RlMuTUFYX09QRU5fRkRTO2Zvcih2YXIgZmQ9ZmRfc3RhcnQ7ZmQ8PWZkX2VuZDtmZCsrKXtpZighRlMuc3RyZWFtc1tmZF0pe3JldHVybiBmZH19dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU1GSUxFKX0pLGdldFN0cmVhbTooZnVuY3Rpb24oZmQpe3JldHVybiBGUy5zdHJlYW1zW2ZkXX0pLGNyZWF0ZVN0cmVhbTooZnVuY3Rpb24oc3RyZWFtLGZkX3N0YXJ0LGZkX2VuZCl7aWYoIUZTLkZTU3RyZWFtKXtGUy5GU1N0cmVhbT0oZnVuY3Rpb24oKXt9KTtGUy5GU1N0cmVhbS5wcm90b3R5cGU9e307T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRlMuRlNTdHJlYW0ucHJvdG90eXBlLHtvYmplY3Q6e2dldDooZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlfSksc2V0OihmdW5jdGlvbih2YWwpe3RoaXMubm9kZT12YWx9KX0saXNSZWFkOntnZXQ6KGZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZmxhZ3MmMjA5NzE1NSkhPT0xfSl9LGlzV3JpdGU6e2dldDooZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5mbGFncyYyMDk3MTU1KSE9PTB9KX0saXNBcHBlbmQ6e2dldDooZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mbGFncyYxMDI0fSl9fSl9dmFyIG5ld1N0cmVhbT1uZXcgRlMuRlNTdHJlYW07Zm9yKHZhciBwIGluIHN0cmVhbSl7bmV3U3RyZWFtW3BdPXN0cmVhbVtwXX1zdHJlYW09bmV3U3RyZWFtO3ZhciBmZD1GUy5uZXh0ZmQoZmRfc3RhcnQsZmRfZW5kKTtzdHJlYW0uZmQ9ZmQ7RlMuc3RyZWFtc1tmZF09c3RyZWFtO3JldHVybiBzdHJlYW19KSxjbG9zZVN0cmVhbTooZnVuY3Rpb24oZmQpe0ZTLnN0cmVhbXNbZmRdPW51bGx9KSxjaHJkZXZfc3RyZWFtX29wczp7b3BlbjooZnVuY3Rpb24oc3RyZWFtKXt2YXIgZGV2aWNlPUZTLmdldERldmljZShzdHJlYW0ubm9kZS5yZGV2KTtzdHJlYW0uc3RyZWFtX29wcz1kZXZpY2Uuc3RyZWFtX29wcztpZihzdHJlYW0uc3RyZWFtX29wcy5vcGVuKXtzdHJlYW0uc3RyZWFtX29wcy5vcGVuKHN0cmVhbSl9fSksbGxzZWVrOihmdW5jdGlvbigpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVTUElQRSl9KX0sbWFqb3I6KGZ1bmN0aW9uKGRldil7cmV0dXJuIGRldj4+OH0pLG1pbm9yOihmdW5jdGlvbihkZXYpe3JldHVybiBkZXYmMjU1fSksbWFrZWRldjooZnVuY3Rpb24obWEsbWkpe3JldHVybiBtYTw8OHxtaX0pLHJlZ2lzdGVyRGV2aWNlOihmdW5jdGlvbihkZXYsb3BzKXtGUy5kZXZpY2VzW2Rldl09e3N0cmVhbV9vcHM6b3BzfX0pLGdldERldmljZTooZnVuY3Rpb24oZGV2KXtyZXR1cm4gRlMuZGV2aWNlc1tkZXZdfSksZ2V0TW91bnRzOihmdW5jdGlvbihtb3VudCl7dmFyIG1vdW50cz1bXTt2YXIgY2hlY2s9W21vdW50XTt3aGlsZShjaGVjay5sZW5ndGgpe3ZhciBtPWNoZWNrLnBvcCgpO21vdW50cy5wdXNoKG0pO2NoZWNrLnB1c2guYXBwbHkoY2hlY2ssbS5tb3VudHMpfXJldHVybiBtb3VudHN9KSxzeW5jZnM6KGZ1bmN0aW9uKHBvcHVsYXRlLGNhbGxiYWNrKXtpZih0eXBlb2YgcG9wdWxhdGU9PT1cImZ1bmN0aW9uXCIpe2NhbGxiYWNrPXBvcHVsYXRlO3BvcHVsYXRlPWZhbHNlfXZhciBtb3VudHM9RlMuZ2V0TW91bnRzKEZTLnJvb3QubW91bnQpO3ZhciBjb21wbGV0ZWQ9MDtmdW5jdGlvbiBkb25lKGVycil7aWYoZXJyKXtpZighZG9uZS5lcnJvcmVkKXtkb25lLmVycm9yZWQ9dHJ1ZTtyZXR1cm4gY2FsbGJhY2soZXJyKX1yZXR1cm59aWYoKytjb21wbGV0ZWQ+PW1vdW50cy5sZW5ndGgpe2NhbGxiYWNrKG51bGwpfX1tb3VudHMuZm9yRWFjaCgoZnVuY3Rpb24obW91bnQpe2lmKCFtb3VudC50eXBlLnN5bmNmcyl7cmV0dXJuIGRvbmUobnVsbCl9bW91bnQudHlwZS5zeW5jZnMobW91bnQscG9wdWxhdGUsZG9uZSl9KSl9KSxtb3VudDooZnVuY3Rpb24odHlwZSxvcHRzLG1vdW50cG9pbnQpe3ZhciByb290PW1vdW50cG9pbnQ9PT1cIi9cIjt2YXIgcHNldWRvPSFtb3VudHBvaW50O3ZhciBub2RlO2lmKHJvb3QmJkZTLnJvb3Qpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCVVNZKX1lbHNlIGlmKCFyb290JiYhcHNldWRvKXt2YXIgbG9va3VwPUZTLmxvb2t1cFBhdGgobW91bnRwb2ludCx7Zm9sbG93X21vdW50OmZhbHNlfSk7bW91bnRwb2ludD1sb29rdXAucGF0aDtub2RlPWxvb2t1cC5ub2RlO2lmKEZTLmlzTW91bnRwb2ludChub2RlKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJVU1kpfWlmKCFGUy5pc0Rpcihub2RlLm1vZGUpKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9URElSKX19dmFyIG1vdW50PXt0eXBlOnR5cGUsb3B0czpvcHRzLG1vdW50cG9pbnQ6bW91bnRwb2ludCxtb3VudHM6W119O3ZhciBtb3VudFJvb3Q9dHlwZS5tb3VudChtb3VudCk7bW91bnRSb290Lm1vdW50PW1vdW50O21vdW50LnJvb3Q9bW91bnRSb290O2lmKHJvb3Qpe0ZTLnJvb3Q9bW91bnRSb290fWVsc2UgaWYobm9kZSl7bm9kZS5tb3VudGVkPW1vdW50O2lmKG5vZGUubW91bnQpe25vZGUubW91bnQubW91bnRzLnB1c2gobW91bnQpfX1yZXR1cm4gbW91bnRSb290fSksdW5tb3VudDooZnVuY3Rpb24obW91bnRwb2ludCl7dmFyIGxvb2t1cD1GUy5sb29rdXBQYXRoKG1vdW50cG9pbnQse2ZvbGxvd19tb3VudDpmYWxzZX0pO2lmKCFGUy5pc01vdW50cG9pbnQobG9va3VwLm5vZGUpKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpfXZhciBub2RlPWxvb2t1cC5ub2RlO3ZhciBtb3VudD1ub2RlLm1vdW50ZWQ7dmFyIG1vdW50cz1GUy5nZXRNb3VudHMobW91bnQpO09iamVjdC5rZXlzKEZTLm5hbWVUYWJsZSkuZm9yRWFjaCgoZnVuY3Rpb24oaGFzaCl7dmFyIGN1cnJlbnQ9RlMubmFtZVRhYmxlW2hhc2hdO3doaWxlKGN1cnJlbnQpe3ZhciBuZXh0PWN1cnJlbnQubmFtZV9uZXh0O2lmKG1vdW50cy5pbmRleE9mKGN1cnJlbnQubW91bnQpIT09LTEpe0ZTLmRlc3Ryb3lOb2RlKGN1cnJlbnQpfWN1cnJlbnQ9bmV4dH19KSk7bm9kZS5tb3VudGVkPW51bGw7dmFyIGlkeD1ub2RlLm1vdW50Lm1vdW50cy5pbmRleE9mKG1vdW50KTthc3NlcnQoaWR4IT09LTEpO25vZGUubW91bnQubW91bnRzLnNwbGljZShpZHgsMSl9KSxsb29rdXA6KGZ1bmN0aW9uKHBhcmVudCxuYW1lKXtyZXR1cm4gcGFyZW50Lm5vZGVfb3BzLmxvb2t1cChwYXJlbnQsbmFtZSl9KSxta25vZDooZnVuY3Rpb24ocGF0aCxtb2RlLGRldil7dmFyIGxvb2t1cD1GUy5sb29rdXBQYXRoKHBhdGgse3BhcmVudDp0cnVlfSk7dmFyIHBhcmVudD1sb29rdXAubm9kZTt2YXIgbmFtZT1QQVRILmJhc2VuYW1lKHBhdGgpO2lmKCFuYW1lfHxuYW1lPT09XCIuXCJ8fG5hbWU9PT1cIi4uXCIpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCl9dmFyIGVycj1GUy5tYXlDcmVhdGUocGFyZW50LG5hbWUpO2lmKGVycil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyKX1pZighcGFyZW50Lm5vZGVfb3BzLm1rbm9kKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSl9cmV0dXJuIHBhcmVudC5ub2RlX29wcy5ta25vZChwYXJlbnQsbmFtZSxtb2RlLGRldil9KSxjcmVhdGU6KGZ1bmN0aW9uKHBhdGgsbW9kZSl7bW9kZT1tb2RlIT09dW5kZWZpbmVkP21vZGU6NDM4O21vZGUmPTQwOTU7bW9kZXw9MzI3Njg7cmV0dXJuIEZTLm1rbm9kKHBhdGgsbW9kZSwwKX0pLG1rZGlyOihmdW5jdGlvbihwYXRoLG1vZGUpe21vZGU9bW9kZSE9PXVuZGVmaW5lZD9tb2RlOjUxMTttb2RlJj01MTF8NTEyO21vZGV8PTE2Mzg0O3JldHVybiBGUy5ta25vZChwYXRoLG1vZGUsMCl9KSxta2RldjooZnVuY3Rpb24ocGF0aCxtb2RlLGRldil7aWYodHlwZW9mIGRldj09PVwidW5kZWZpbmVkXCIpe2Rldj1tb2RlO21vZGU9NDM4fW1vZGV8PTgxOTI7cmV0dXJuIEZTLm1rbm9kKHBhdGgsbW9kZSxkZXYpfSksc3ltbGluazooZnVuY3Rpb24ob2xkcGF0aCxuZXdwYXRoKXtpZighUEFUSC5yZXNvbHZlKG9sZHBhdGgpKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9FTlQpfXZhciBsb29rdXA9RlMubG9va3VwUGF0aChuZXdwYXRoLHtwYXJlbnQ6dHJ1ZX0pO3ZhciBwYXJlbnQ9bG9va3VwLm5vZGU7aWYoIXBhcmVudCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PRU5UKX12YXIgbmV3bmFtZT1QQVRILmJhc2VuYW1lKG5ld3BhdGgpO3ZhciBlcnI9RlMubWF5Q3JlYXRlKHBhcmVudCxuZXduYW1lKTtpZihlcnIpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKGVycil9aWYoIXBhcmVudC5ub2RlX29wcy5zeW1saW5rKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSl9cmV0dXJuIHBhcmVudC5ub2RlX29wcy5zeW1saW5rKHBhcmVudCxuZXduYW1lLG9sZHBhdGgpfSkscmVuYW1lOihmdW5jdGlvbihvbGRfcGF0aCxuZXdfcGF0aCl7dmFyIG9sZF9kaXJuYW1lPVBBVEguZGlybmFtZShvbGRfcGF0aCk7dmFyIG5ld19kaXJuYW1lPVBBVEguZGlybmFtZShuZXdfcGF0aCk7dmFyIG9sZF9uYW1lPVBBVEguYmFzZW5hbWUob2xkX3BhdGgpO3ZhciBuZXdfbmFtZT1QQVRILmJhc2VuYW1lKG5ld19wYXRoKTt2YXIgbG9va3VwLG9sZF9kaXIsbmV3X2Rpcjt0cnl7bG9va3VwPUZTLmxvb2t1cFBhdGgob2xkX3BhdGgse3BhcmVudDp0cnVlfSk7b2xkX2Rpcj1sb29rdXAubm9kZTtsb29rdXA9RlMubG9va3VwUGF0aChuZXdfcGF0aCx7cGFyZW50OnRydWV9KTtuZXdfZGlyPWxvb2t1cC5ub2RlfWNhdGNoKGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCVVNZKX1pZighb2xkX2Rpcnx8IW5ld19kaXIpdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PRU5UKTtpZihvbGRfZGlyLm1vdW50IT09bmV3X2Rpci5tb3VudCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVhERVYpfXZhciBvbGRfbm9kZT1GUy5sb29rdXBOb2RlKG9sZF9kaXIsb2xkX25hbWUpO3ZhciByZWxhdGl2ZT1QQVRILnJlbGF0aXZlKG9sZF9wYXRoLG5ld19kaXJuYW1lKTtpZihyZWxhdGl2ZS5jaGFyQXQoMCkhPT1cIi5cIil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKX1yZWxhdGl2ZT1QQVRILnJlbGF0aXZlKG5ld19wYXRoLG9sZF9kaXJuYW1lKTtpZihyZWxhdGl2ZS5jaGFyQXQoMCkhPT1cIi5cIil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PVEVNUFRZKX12YXIgbmV3X25vZGU7dHJ5e25ld19ub2RlPUZTLmxvb2t1cE5vZGUobmV3X2RpcixuZXdfbmFtZSl9Y2F0Y2goZSl7fWlmKG9sZF9ub2RlPT09bmV3X25vZGUpe3JldHVybn12YXIgaXNkaXI9RlMuaXNEaXIob2xkX25vZGUubW9kZSk7dmFyIGVycj1GUy5tYXlEZWxldGUob2xkX2RpcixvbGRfbmFtZSxpc2Rpcik7aWYoZXJyKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnIpfWVycj1uZXdfbm9kZT9GUy5tYXlEZWxldGUobmV3X2RpcixuZXdfbmFtZSxpc2Rpcik6RlMubWF5Q3JlYXRlKG5ld19kaXIsbmV3X25hbWUpO2lmKGVycil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyKX1pZighb2xkX2Rpci5ub2RlX29wcy5yZW5hbWUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKX1pZihGUy5pc01vdW50cG9pbnQob2xkX25vZGUpfHxuZXdfbm9kZSYmRlMuaXNNb3VudHBvaW50KG5ld19ub2RlKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJVU1kpfWlmKG5ld19kaXIhPT1vbGRfZGlyKXtlcnI9RlMubm9kZVBlcm1pc3Npb25zKG9sZF9kaXIsXCJ3XCIpO2lmKGVycil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyKX19dHJ5e2lmKEZTLnRyYWNraW5nRGVsZWdhdGVbXCJ3aWxsTW92ZVBhdGhcIl0pe0ZTLnRyYWNraW5nRGVsZWdhdGVbXCJ3aWxsTW92ZVBhdGhcIl0ob2xkX3BhdGgsbmV3X3BhdGgpfX1jYXRjaChlKXtjb25zb2xlLmxvZyhcIkZTLnRyYWNraW5nRGVsZWdhdGVbJ3dpbGxNb3ZlUGF0aCddKCdcIitvbGRfcGF0aCtcIicsICdcIituZXdfcGF0aCtcIicpIHRocmV3IGFuIGV4Y2VwdGlvbjogXCIrZS5tZXNzYWdlKX1GUy5oYXNoUmVtb3ZlTm9kZShvbGRfbm9kZSk7dHJ5e29sZF9kaXIubm9kZV9vcHMucmVuYW1lKG9sZF9ub2RlLG5ld19kaXIsbmV3X25hbWUpfWNhdGNoKGUpe3Rocm93IGV9ZmluYWxseXtGUy5oYXNoQWRkTm9kZShvbGRfbm9kZSl9dHJ5e2lmKEZTLnRyYWNraW5nRGVsZWdhdGVbXCJvbk1vdmVQYXRoXCJdKUZTLnRyYWNraW5nRGVsZWdhdGVbXCJvbk1vdmVQYXRoXCJdKG9sZF9wYXRoLG5ld19wYXRoKX1jYXRjaChlKXtjb25zb2xlLmxvZyhcIkZTLnRyYWNraW5nRGVsZWdhdGVbJ29uTW92ZVBhdGgnXSgnXCIrb2xkX3BhdGgrXCInLCAnXCIrbmV3X3BhdGgrXCInKSB0aHJldyBhbiBleGNlcHRpb246IFwiK2UubWVzc2FnZSl9fSkscm1kaXI6KGZ1bmN0aW9uKHBhdGgpe3ZhciBsb29rdXA9RlMubG9va3VwUGF0aChwYXRoLHtwYXJlbnQ6dHJ1ZX0pO3ZhciBwYXJlbnQ9bG9va3VwLm5vZGU7dmFyIG5hbWU9UEFUSC5iYXNlbmFtZShwYXRoKTt2YXIgbm9kZT1GUy5sb29rdXBOb2RlKHBhcmVudCxuYW1lKTt2YXIgZXJyPUZTLm1heURlbGV0ZShwYXJlbnQsbmFtZSx0cnVlKTtpZihlcnIpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKGVycil9aWYoIXBhcmVudC5ub2RlX29wcy5ybWRpcil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pfWlmKEZTLmlzTW91bnRwb2ludChub2RlKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJVU1kpfXRyeXtpZihGUy50cmFja2luZ0RlbGVnYXRlW1wid2lsbERlbGV0ZVBhdGhcIl0pe0ZTLnRyYWNraW5nRGVsZWdhdGVbXCJ3aWxsRGVsZXRlUGF0aFwiXShwYXRoKX19Y2F0Y2goZSl7Y29uc29sZS5sb2coXCJGUy50cmFja2luZ0RlbGVnYXRlWyd3aWxsRGVsZXRlUGF0aCddKCdcIitwYXRoK1wiJykgdGhyZXcgYW4gZXhjZXB0aW9uOiBcIitlLm1lc3NhZ2UpfXBhcmVudC5ub2RlX29wcy5ybWRpcihwYXJlbnQsbmFtZSk7RlMuZGVzdHJveU5vZGUobm9kZSk7dHJ5e2lmKEZTLnRyYWNraW5nRGVsZWdhdGVbXCJvbkRlbGV0ZVBhdGhcIl0pRlMudHJhY2tpbmdEZWxlZ2F0ZVtcIm9uRGVsZXRlUGF0aFwiXShwYXRoKX1jYXRjaChlKXtjb25zb2xlLmxvZyhcIkZTLnRyYWNraW5nRGVsZWdhdGVbJ29uRGVsZXRlUGF0aCddKCdcIitwYXRoK1wiJykgdGhyZXcgYW4gZXhjZXB0aW9uOiBcIitlLm1lc3NhZ2UpfX0pLHJlYWRkaXI6KGZ1bmN0aW9uKHBhdGgpe3ZhciBsb29rdXA9RlMubG9va3VwUGF0aChwYXRoLHtmb2xsb3c6dHJ1ZX0pO3ZhciBub2RlPWxvb2t1cC5ub2RlO2lmKCFub2RlLm5vZGVfb3BzLnJlYWRkaXIpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT1RESVIpfXJldHVybiBub2RlLm5vZGVfb3BzLnJlYWRkaXIobm9kZSl9KSx1bmxpbms6KGZ1bmN0aW9uKHBhdGgpe3ZhciBsb29rdXA9RlMubG9va3VwUGF0aChwYXRoLHtwYXJlbnQ6dHJ1ZX0pO3ZhciBwYXJlbnQ9bG9va3VwLm5vZGU7dmFyIG5hbWU9UEFUSC5iYXNlbmFtZShwYXRoKTt2YXIgbm9kZT1GUy5sb29rdXBOb2RlKHBhcmVudCxuYW1lKTt2YXIgZXJyPUZTLm1heURlbGV0ZShwYXJlbnQsbmFtZSxmYWxzZSk7aWYoZXJyKXtpZihlcnI9PT1FUlJOT19DT0RFUy5FSVNESVIpZXJyPUVSUk5PX0NPREVTLkVQRVJNO3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKGVycil9aWYoIXBhcmVudC5ub2RlX29wcy51bmxpbmspe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKX1pZihGUy5pc01vdW50cG9pbnQobm9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCVVNZKX10cnl7aWYoRlMudHJhY2tpbmdEZWxlZ2F0ZVtcIndpbGxEZWxldGVQYXRoXCJdKXtGUy50cmFja2luZ0RlbGVnYXRlW1wid2lsbERlbGV0ZVBhdGhcIl0ocGF0aCl9fWNhdGNoKGUpe2NvbnNvbGUubG9nKFwiRlMudHJhY2tpbmdEZWxlZ2F0ZVsnd2lsbERlbGV0ZVBhdGgnXSgnXCIrcGF0aCtcIicpIHRocmV3IGFuIGV4Y2VwdGlvbjogXCIrZS5tZXNzYWdlKX1wYXJlbnQubm9kZV9vcHMudW5saW5rKHBhcmVudCxuYW1lKTtGUy5kZXN0cm95Tm9kZShub2RlKTt0cnl7aWYoRlMudHJhY2tpbmdEZWxlZ2F0ZVtcIm9uRGVsZXRlUGF0aFwiXSlGUy50cmFja2luZ0RlbGVnYXRlW1wib25EZWxldGVQYXRoXCJdKHBhdGgpfWNhdGNoKGUpe2NvbnNvbGUubG9nKFwiRlMudHJhY2tpbmdEZWxlZ2F0ZVsnb25EZWxldGVQYXRoJ10oJ1wiK3BhdGgrXCInKSB0aHJldyBhbiBleGNlcHRpb246IFwiK2UubWVzc2FnZSl9fSkscmVhZGxpbms6KGZ1bmN0aW9uKHBhdGgpe3ZhciBsb29rdXA9RlMubG9va3VwUGF0aChwYXRoKTt2YXIgbGluaz1sb29rdXAubm9kZTtpZighbGluayl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PRU5UKX1pZighbGluay5ub2RlX29wcy5yZWFkbGluayl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKX1yZXR1cm4gUEFUSC5yZXNvbHZlKEZTLmdldFBhdGgobGluay5wYXJlbnQpLGxpbmsubm9kZV9vcHMucmVhZGxpbmsobGluaykpfSksc3RhdDooZnVuY3Rpb24ocGF0aCxkb250Rm9sbG93KXt2YXIgbG9va3VwPUZTLmxvb2t1cFBhdGgocGF0aCx7Zm9sbG93OiFkb250Rm9sbG93fSk7dmFyIG5vZGU9bG9va3VwLm5vZGU7aWYoIW5vZGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT0VOVCl9aWYoIW5vZGUubm9kZV9vcHMuZ2V0YXR0cil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pfXJldHVybiBub2RlLm5vZGVfb3BzLmdldGF0dHIobm9kZSl9KSxsc3RhdDooZnVuY3Rpb24ocGF0aCl7cmV0dXJuIEZTLnN0YXQocGF0aCx0cnVlKX0pLGNobW9kOihmdW5jdGlvbihwYXRoLG1vZGUsZG9udEZvbGxvdyl7dmFyIG5vZGU7aWYodHlwZW9mIHBhdGg9PT1cInN0cmluZ1wiKXt2YXIgbG9va3VwPUZTLmxvb2t1cFBhdGgocGF0aCx7Zm9sbG93OiFkb250Rm9sbG93fSk7bm9kZT1sb29rdXAubm9kZX1lbHNle25vZGU9cGF0aH1pZighbm9kZS5ub2RlX29wcy5zZXRhdHRyKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSl9bm9kZS5ub2RlX29wcy5zZXRhdHRyKG5vZGUse21vZGU6bW9kZSY0MDk1fG5vZGUubW9kZSZ+NDA5NSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSksbGNobW9kOihmdW5jdGlvbihwYXRoLG1vZGUpe0ZTLmNobW9kKHBhdGgsbW9kZSx0cnVlKX0pLGZjaG1vZDooZnVuY3Rpb24oZmQsbW9kZSl7dmFyIHN0cmVhbT1GUy5nZXRTdHJlYW0oZmQpO2lmKCFzdHJlYW0pe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKX1GUy5jaG1vZChzdHJlYW0ubm9kZSxtb2RlKX0pLGNob3duOihmdW5jdGlvbihwYXRoLHVpZCxnaWQsZG9udEZvbGxvdyl7dmFyIG5vZGU7aWYodHlwZW9mIHBhdGg9PT1cInN0cmluZ1wiKXt2YXIgbG9va3VwPUZTLmxvb2t1cFBhdGgocGF0aCx7Zm9sbG93OiFkb250Rm9sbG93fSk7bm9kZT1sb29rdXAubm9kZX1lbHNle25vZGU9cGF0aH1pZighbm9kZS5ub2RlX29wcy5zZXRhdHRyKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSl9bm9kZS5ub2RlX29wcy5zZXRhdHRyKG5vZGUse3RpbWVzdGFtcDpEYXRlLm5vdygpfSl9KSxsY2hvd246KGZ1bmN0aW9uKHBhdGgsdWlkLGdpZCl7RlMuY2hvd24ocGF0aCx1aWQsZ2lkLHRydWUpfSksZmNob3duOihmdW5jdGlvbihmZCx1aWQsZ2lkKXt2YXIgc3RyZWFtPUZTLmdldFN0cmVhbShmZCk7aWYoIXN0cmVhbSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJBREYpfUZTLmNob3duKHN0cmVhbS5ub2RlLHVpZCxnaWQpfSksdHJ1bmNhdGU6KGZ1bmN0aW9uKHBhdGgsbGVuKXtpZihsZW48MCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKX12YXIgbm9kZTtpZih0eXBlb2YgcGF0aD09PVwic3RyaW5nXCIpe3ZhciBsb29rdXA9RlMubG9va3VwUGF0aChwYXRoLHtmb2xsb3c6dHJ1ZX0pO25vZGU9bG9va3VwLm5vZGV9ZWxzZXtub2RlPXBhdGh9aWYoIW5vZGUubm9kZV9vcHMuc2V0YXR0cil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pfWlmKEZTLmlzRGlyKG5vZGUubW9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJU0RJUil9aWYoIUZTLmlzRmlsZShub2RlLm1vZGUpKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpfXZhciBlcnI9RlMubm9kZVBlcm1pc3Npb25zKG5vZGUsXCJ3XCIpO2lmKGVycil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyKX1ub2RlLm5vZGVfb3BzLnNldGF0dHIobm9kZSx7c2l6ZTpsZW4sdGltZXN0YW1wOkRhdGUubm93KCl9KX0pLGZ0cnVuY2F0ZTooZnVuY3Rpb24oZmQsbGVuKXt2YXIgc3RyZWFtPUZTLmdldFN0cmVhbShmZCk7aWYoIXN0cmVhbSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJBREYpfWlmKChzdHJlYW0uZmxhZ3MmMjA5NzE1NSk9PT0wKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpfUZTLnRydW5jYXRlKHN0cmVhbS5ub2RlLGxlbil9KSx1dGltZTooZnVuY3Rpb24ocGF0aCxhdGltZSxtdGltZSl7dmFyIGxvb2t1cD1GUy5sb29rdXBQYXRoKHBhdGgse2ZvbGxvdzp0cnVlfSk7dmFyIG5vZGU9bG9va3VwLm5vZGU7bm9kZS5ub2RlX29wcy5zZXRhdHRyKG5vZGUse3RpbWVzdGFtcDpNYXRoLm1heChhdGltZSxtdGltZSl9KX0pLG9wZW46KGZ1bmN0aW9uKHBhdGgsZmxhZ3MsbW9kZSxmZF9zdGFydCxmZF9lbmQpe2lmKHBhdGg9PT1cIlwiKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9FTlQpfWZsYWdzPXR5cGVvZiBmbGFncz09PVwic3RyaW5nXCI/RlMubW9kZVN0cmluZ1RvRmxhZ3MoZmxhZ3MpOmZsYWdzO21vZGU9dHlwZW9mIG1vZGU9PT1cInVuZGVmaW5lZFwiPzQzODptb2RlO2lmKGZsYWdzJjY0KXttb2RlPW1vZGUmNDA5NXwzMjc2OH1lbHNle21vZGU9MH12YXIgbm9kZTtpZih0eXBlb2YgcGF0aD09PVwib2JqZWN0XCIpe25vZGU9cGF0aH1lbHNle3BhdGg9UEFUSC5ub3JtYWxpemUocGF0aCk7dHJ5e3ZhciBsb29rdXA9RlMubG9va3VwUGF0aChwYXRoLHtmb2xsb3c6IShmbGFncyYxMzEwNzIpfSk7bm9kZT1sb29rdXAubm9kZX1jYXRjaChlKXt9fXZhciBjcmVhdGVkPWZhbHNlO2lmKGZsYWdzJjY0KXtpZihub2RlKXtpZihmbGFncyYxMjgpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVFWElTVCl9fWVsc2V7bm9kZT1GUy5ta25vZChwYXRoLG1vZGUsMCk7Y3JlYXRlZD10cnVlfX1pZighbm9kZSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PRU5UKX1pZihGUy5pc0NocmRldihub2RlLm1vZGUpKXtmbGFncyY9fjUxMn1pZihmbGFncyY2NTUzNiYmIUZTLmlzRGlyKG5vZGUubW9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT1RESVIpfWlmKCFjcmVhdGVkKXt2YXIgZXJyPUZTLm1heU9wZW4obm9kZSxmbGFncyk7aWYoZXJyKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnIpfX1pZihmbGFncyY1MTIpe0ZTLnRydW5jYXRlKG5vZGUsMCl9ZmxhZ3MmPX4oMTI4fDUxMik7dmFyIHN0cmVhbT1GUy5jcmVhdGVTdHJlYW0oe25vZGU6bm9kZSxwYXRoOkZTLmdldFBhdGgobm9kZSksZmxhZ3M6ZmxhZ3Msc2Vla2FibGU6dHJ1ZSxwb3NpdGlvbjowLHN0cmVhbV9vcHM6bm9kZS5zdHJlYW1fb3BzLHVuZ290dGVuOltdLGVycm9yOmZhbHNlfSxmZF9zdGFydCxmZF9lbmQpO2lmKHN0cmVhbS5zdHJlYW1fb3BzLm9wZW4pe3N0cmVhbS5zdHJlYW1fb3BzLm9wZW4oc3RyZWFtKX1pZihNb2R1bGVbXCJsb2dSZWFkRmlsZXNcIl0mJiEoZmxhZ3MmMSkpe2lmKCFGUy5yZWFkRmlsZXMpRlMucmVhZEZpbGVzPXt9O2lmKCEocGF0aCBpbiBGUy5yZWFkRmlsZXMpKXtGUy5yZWFkRmlsZXNbcGF0aF09MTtNb2R1bGVbXCJwcmludEVyclwiXShcInJlYWQgZmlsZTogXCIrcGF0aCl9fXRyeXtpZihGUy50cmFja2luZ0RlbGVnYXRlW1wib25PcGVuRmlsZVwiXSl7dmFyIHRyYWNraW5nRmxhZ3M9MDtpZigoZmxhZ3MmMjA5NzE1NSkhPT0xKXt0cmFja2luZ0ZsYWdzfD1GUy50cmFja2luZy5vcGVuRmxhZ3MuUkVBRH1pZigoZmxhZ3MmMjA5NzE1NSkhPT0wKXt0cmFja2luZ0ZsYWdzfD1GUy50cmFja2luZy5vcGVuRmxhZ3MuV1JJVEV9RlMudHJhY2tpbmdEZWxlZ2F0ZVtcIm9uT3BlbkZpbGVcIl0ocGF0aCx0cmFja2luZ0ZsYWdzKX19Y2F0Y2goZSl7Y29uc29sZS5sb2coXCJGUy50cmFja2luZ0RlbGVnYXRlWydvbk9wZW5GaWxlJ10oJ1wiK3BhdGgrXCInLCBmbGFncykgdGhyZXcgYW4gZXhjZXB0aW9uOiBcIitlLm1lc3NhZ2UpfXJldHVybiBzdHJlYW19KSxjbG9zZTooZnVuY3Rpb24oc3RyZWFtKXtpZihzdHJlYW0uZ2V0ZGVudHMpc3RyZWFtLmdldGRlbnRzPW51bGw7dHJ5e2lmKHN0cmVhbS5zdHJlYW1fb3BzLmNsb3NlKXtzdHJlYW0uc3RyZWFtX29wcy5jbG9zZShzdHJlYW0pfX1jYXRjaChlKXt0aHJvdyBlfWZpbmFsbHl7RlMuY2xvc2VTdHJlYW0oc3RyZWFtLmZkKX19KSxsbHNlZWs6KGZ1bmN0aW9uKHN0cmVhbSxvZmZzZXQsd2hlbmNlKXtpZighc3RyZWFtLnNlZWthYmxlfHwhc3RyZWFtLnN0cmVhbV9vcHMubGxzZWVrKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FU1BJUEUpfXN0cmVhbS5wb3NpdGlvbj1zdHJlYW0uc3RyZWFtX29wcy5sbHNlZWsoc3RyZWFtLG9mZnNldCx3aGVuY2UpO3N0cmVhbS51bmdvdHRlbj1bXTtyZXR1cm4gc3RyZWFtLnBvc2l0aW9ufSkscmVhZDooZnVuY3Rpb24oc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLHBvc2l0aW9uKXtpZihsZW5ndGg8MHx8cG9zaXRpb248MCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKX1pZigoc3RyZWFtLmZsYWdzJjIwOTcxNTUpPT09MSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJBREYpfWlmKEZTLmlzRGlyKHN0cmVhbS5ub2RlLm1vZGUpKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSVNESVIpfWlmKCFzdHJlYW0uc3RyZWFtX29wcy5yZWFkKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpfXZhciBzZWVraW5nPXRydWU7aWYodHlwZW9mIHBvc2l0aW9uPT09XCJ1bmRlZmluZWRcIil7cG9zaXRpb249c3RyZWFtLnBvc2l0aW9uO3NlZWtpbmc9ZmFsc2V9ZWxzZSBpZighc3RyZWFtLnNlZWthYmxlKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FU1BJUEUpfXZhciBieXRlc1JlYWQ9c3RyZWFtLnN0cmVhbV9vcHMucmVhZChzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zaXRpb24pO2lmKCFzZWVraW5nKXN0cmVhbS5wb3NpdGlvbis9Ynl0ZXNSZWFkO3JldHVybiBieXRlc1JlYWR9KSx3cml0ZTooZnVuY3Rpb24oc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLHBvc2l0aW9uLGNhbk93bil7aWYobGVuZ3RoPDB8fHBvc2l0aW9uPDApe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCl9aWYoKHN0cmVhbS5mbGFncyYyMDk3MTU1KT09PTApe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKX1pZihGUy5pc0RpcihzdHJlYW0ubm9kZS5tb2RlKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlTRElSKX1pZighc3RyZWFtLnN0cmVhbV9vcHMud3JpdGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCl9aWYoc3RyZWFtLmZsYWdzJjEwMjQpe0ZTLmxsc2VlayhzdHJlYW0sMCwyKX12YXIgc2Vla2luZz10cnVlO2lmKHR5cGVvZiBwb3NpdGlvbj09PVwidW5kZWZpbmVkXCIpe3Bvc2l0aW9uPXN0cmVhbS5wb3NpdGlvbjtzZWVraW5nPWZhbHNlfWVsc2UgaWYoIXN0cmVhbS5zZWVrYWJsZSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVNQSVBFKX12YXIgYnl0ZXNXcml0dGVuPXN0cmVhbS5zdHJlYW1fb3BzLndyaXRlKHN0cmVhbSxidWZmZXIsb2Zmc2V0LGxlbmd0aCxwb3NpdGlvbixjYW5Pd24pO2lmKCFzZWVraW5nKXN0cmVhbS5wb3NpdGlvbis9Ynl0ZXNXcml0dGVuO3RyeXtpZihzdHJlYW0ucGF0aCYmRlMudHJhY2tpbmdEZWxlZ2F0ZVtcIm9uV3JpdGVUb0ZpbGVcIl0pRlMudHJhY2tpbmdEZWxlZ2F0ZVtcIm9uV3JpdGVUb0ZpbGVcIl0oc3RyZWFtLnBhdGgpfWNhdGNoKGUpe2NvbnNvbGUubG9nKFwiRlMudHJhY2tpbmdEZWxlZ2F0ZVsnb25Xcml0ZVRvRmlsZSddKCdcIitwYXRoK1wiJykgdGhyZXcgYW4gZXhjZXB0aW9uOiBcIitlLm1lc3NhZ2UpfXJldHVybiBieXRlc1dyaXR0ZW59KSxhbGxvY2F0ZTooZnVuY3Rpb24oc3RyZWFtLG9mZnNldCxsZW5ndGgpe2lmKG9mZnNldDwwfHxsZW5ndGg8PTApe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCl9aWYoKHN0cmVhbS5mbGFncyYyMDk3MTU1KT09PTApe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKX1pZighRlMuaXNGaWxlKHN0cmVhbS5ub2RlLm1vZGUpJiYhRlMuaXNEaXIobm9kZS5tb2RlKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PREVWKX1pZighc3RyZWFtLnN0cmVhbV9vcHMuYWxsb2NhdGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVPUE5PVFNVUFApfXN0cmVhbS5zdHJlYW1fb3BzLmFsbG9jYXRlKHN0cmVhbSxvZmZzZXQsbGVuZ3RoKX0pLG1tYXA6KGZ1bmN0aW9uKHN0cmVhbSxidWZmZXIsb2Zmc2V0LGxlbmd0aCxwb3NpdGlvbixwcm90LGZsYWdzKXtpZigoc3RyZWFtLmZsYWdzJjIwOTcxNTUpPT09MSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUFDQ0VTKX1pZighc3RyZWFtLnN0cmVhbV9vcHMubW1hcCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PREVWKX1yZXR1cm4gc3RyZWFtLnN0cmVhbV9vcHMubW1hcChzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zaXRpb24scHJvdCxmbGFncyl9KSxtc3luYzooZnVuY3Rpb24oc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLG1tYXBGbGFncyl7aWYoIXN0cmVhbXx8IXN0cmVhbS5zdHJlYW1fb3BzLm1zeW5jKXtyZXR1cm4gMH1yZXR1cm4gc3RyZWFtLnN0cmVhbV9vcHMubXN5bmMoc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLG1tYXBGbGFncyl9KSxtdW5tYXA6KGZ1bmN0aW9uKHN0cmVhbSl7cmV0dXJuIDB9KSxpb2N0bDooZnVuY3Rpb24oc3RyZWFtLGNtZCxhcmcpe2lmKCFzdHJlYW0uc3RyZWFtX29wcy5pb2N0bCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PVFRZKX1yZXR1cm4gc3RyZWFtLnN0cmVhbV9vcHMuaW9jdGwoc3RyZWFtLGNtZCxhcmcpfSkscmVhZEZpbGU6KGZ1bmN0aW9uKHBhdGgsb3B0cyl7b3B0cz1vcHRzfHx7fTtvcHRzLmZsYWdzPW9wdHMuZmxhZ3N8fFwiclwiO29wdHMuZW5jb2Rpbmc9b3B0cy5lbmNvZGluZ3x8XCJiaW5hcnlcIjtpZihvcHRzLmVuY29kaW5nIT09XCJ1dGY4XCImJm9wdHMuZW5jb2RpbmchPT1cImJpbmFyeVwiKXt0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW5jb2RpbmcgdHlwZSBcIicrb3B0cy5lbmNvZGluZysnXCInKX12YXIgcmV0O3ZhciBzdHJlYW09RlMub3BlbihwYXRoLG9wdHMuZmxhZ3MpO3ZhciBzdGF0PUZTLnN0YXQocGF0aCk7dmFyIGxlbmd0aD1zdGF0LnNpemU7dmFyIGJ1Zj1uZXcgVWludDhBcnJheShsZW5ndGgpO0ZTLnJlYWQoc3RyZWFtLGJ1ZiwwLGxlbmd0aCwwKTtpZihvcHRzLmVuY29kaW5nPT09XCJ1dGY4XCIpe3JldD1VVEY4QXJyYXlUb1N0cmluZyhidWYsMCl9ZWxzZSBpZihvcHRzLmVuY29kaW5nPT09XCJiaW5hcnlcIil7cmV0PWJ1Zn1GUy5jbG9zZShzdHJlYW0pO3JldHVybiByZXR9KSx3cml0ZUZpbGU6KGZ1bmN0aW9uKHBhdGgsZGF0YSxvcHRzKXtvcHRzPW9wdHN8fHt9O29wdHMuZmxhZ3M9b3B0cy5mbGFnc3x8XCJ3XCI7b3B0cy5lbmNvZGluZz1vcHRzLmVuY29kaW5nfHxcInV0ZjhcIjtpZihvcHRzLmVuY29kaW5nIT09XCJ1dGY4XCImJm9wdHMuZW5jb2RpbmchPT1cImJpbmFyeVwiKXt0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW5jb2RpbmcgdHlwZSBcIicrb3B0cy5lbmNvZGluZysnXCInKX12YXIgc3RyZWFtPUZTLm9wZW4ocGF0aCxvcHRzLmZsYWdzLG9wdHMubW9kZSk7aWYob3B0cy5lbmNvZGluZz09PVwidXRmOFwiKXt2YXIgYnVmPW5ldyBVaW50OEFycmF5KGxlbmd0aEJ5dGVzVVRGOChkYXRhKSsxKTt2YXIgYWN0dWFsTnVtQnl0ZXM9c3RyaW5nVG9VVEY4QXJyYXkoZGF0YSxidWYsMCxidWYubGVuZ3RoKTtGUy53cml0ZShzdHJlYW0sYnVmLDAsYWN0dWFsTnVtQnl0ZXMsMCxvcHRzLmNhbk93bil9ZWxzZSBpZihvcHRzLmVuY29kaW5nPT09XCJiaW5hcnlcIil7RlMud3JpdGUoc3RyZWFtLGRhdGEsMCxkYXRhLmxlbmd0aCwwLG9wdHMuY2FuT3duKX1GUy5jbG9zZShzdHJlYW0pfSksY3dkOihmdW5jdGlvbigpe3JldHVybiBGUy5jdXJyZW50UGF0aH0pLGNoZGlyOihmdW5jdGlvbihwYXRoKXt2YXIgbG9va3VwPUZTLmxvb2t1cFBhdGgocGF0aCx7Zm9sbG93OnRydWV9KTtpZighRlMuaXNEaXIobG9va3VwLm5vZGUubW9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT1RESVIpfXZhciBlcnI9RlMubm9kZVBlcm1pc3Npb25zKGxvb2t1cC5ub2RlLFwieFwiKTtpZihlcnIpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKGVycil9RlMuY3VycmVudFBhdGg9bG9va3VwLnBhdGh9KSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXM6KGZ1bmN0aW9uKCl7RlMubWtkaXIoXCIvdG1wXCIpO0ZTLm1rZGlyKFwiL2hvbWVcIik7RlMubWtkaXIoXCIvaG9tZS93ZWJfdXNlclwiKX0pLGNyZWF0ZURlZmF1bHREZXZpY2VzOihmdW5jdGlvbigpe0ZTLm1rZGlyKFwiL2RldlwiKTtGUy5yZWdpc3RlckRldmljZShGUy5tYWtlZGV2KDEsMykse3JlYWQ6KGZ1bmN0aW9uKCl7cmV0dXJuIDB9KSx3cml0ZTooZnVuY3Rpb24oc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLHBvcyl7cmV0dXJuIGxlbmd0aH0pfSk7RlMubWtkZXYoXCIvZGV2L251bGxcIixGUy5tYWtlZGV2KDEsMykpO1RUWS5yZWdpc3RlcihGUy5tYWtlZGV2KDUsMCksVFRZLmRlZmF1bHRfdHR5X29wcyk7VFRZLnJlZ2lzdGVyKEZTLm1ha2VkZXYoNiwwKSxUVFkuZGVmYXVsdF90dHkxX29wcyk7RlMubWtkZXYoXCIvZGV2L3R0eVwiLEZTLm1ha2VkZXYoNSwwKSk7RlMubWtkZXYoXCIvZGV2L3R0eTFcIixGUy5tYWtlZGV2KDYsMCkpO3ZhciByYW5kb21fZGV2aWNlO2lmKHR5cGVvZiBjcnlwdG8hPT1cInVuZGVmaW5lZFwiKXt2YXIgcmFuZG9tQnVmZmVyPW5ldyBVaW50OEFycmF5KDEpO3JhbmRvbV9kZXZpY2U9KGZ1bmN0aW9uKCl7Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhyYW5kb21CdWZmZXIpO3JldHVybiByYW5kb21CdWZmZXJbMF19KX1lbHNlIGlmKEVOVklST05NRU5UX0lTX05PREUpe3JhbmRvbV9kZXZpY2U9KGZ1bmN0aW9uKCl7cmV0dXJuIHJlcXVpcmUoXCJjcnlwdG9cIikucmFuZG9tQnl0ZXMoMSlbMF19KX1lbHNle3JhbmRvbV9kZXZpY2U9KGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucmFuZG9tKCkqMjU2fDB9KX1GUy5jcmVhdGVEZXZpY2UoXCIvZGV2XCIsXCJyYW5kb21cIixyYW5kb21fZGV2aWNlKTtGUy5jcmVhdGVEZXZpY2UoXCIvZGV2XCIsXCJ1cmFuZG9tXCIscmFuZG9tX2RldmljZSk7RlMubWtkaXIoXCIvZGV2L3NobVwiKTtGUy5ta2RpcihcIi9kZXYvc2htL3RtcFwiKX0pLGNyZWF0ZVNwZWNpYWxEaXJlY3RvcmllczooZnVuY3Rpb24oKXtGUy5ta2RpcihcIi9wcm9jXCIpO0ZTLm1rZGlyKFwiL3Byb2Mvc2VsZlwiKTtGUy5ta2RpcihcIi9wcm9jL3NlbGYvZmRcIik7RlMubW91bnQoe21vdW50OihmdW5jdGlvbigpe3ZhciBub2RlPUZTLmNyZWF0ZU5vZGUoXCIvcHJvYy9zZWxmXCIsXCJmZFwiLDE2Mzg0fDUxMSw3Myk7bm9kZS5ub2RlX29wcz17bG9va3VwOihmdW5jdGlvbihwYXJlbnQsbmFtZSl7dmFyIGZkPStuYW1lO3ZhciBzdHJlYW09RlMuZ2V0U3RyZWFtKGZkKTtpZighc3RyZWFtKXRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKTt2YXIgcmV0PXtwYXJlbnQ6bnVsbCxtb3VudDp7bW91bnRwb2ludDpcImZha2VcIn0sbm9kZV9vcHM6e3JlYWRsaW5rOihmdW5jdGlvbigpe3JldHVybiBzdHJlYW0ucGF0aH0pfX07cmV0LnBhcmVudD1yZXQ7cmV0dXJuIHJldH0pfTtyZXR1cm4gbm9kZX0pfSx7fSxcIi9wcm9jL3NlbGYvZmRcIil9KSxjcmVhdGVTdGFuZGFyZFN0cmVhbXM6KGZ1bmN0aW9uKCl7aWYoTW9kdWxlW1wic3RkaW5cIl0pe0ZTLmNyZWF0ZURldmljZShcIi9kZXZcIixcInN0ZGluXCIsTW9kdWxlW1wic3RkaW5cIl0pfWVsc2V7RlMuc3ltbGluayhcIi9kZXYvdHR5XCIsXCIvZGV2L3N0ZGluXCIpfWlmKE1vZHVsZVtcInN0ZG91dFwiXSl7RlMuY3JlYXRlRGV2aWNlKFwiL2RldlwiLFwic3Rkb3V0XCIsbnVsbCxNb2R1bGVbXCJzdGRvdXRcIl0pfWVsc2V7RlMuc3ltbGluayhcIi9kZXYvdHR5XCIsXCIvZGV2L3N0ZG91dFwiKX1pZihNb2R1bGVbXCJzdGRlcnJcIl0pe0ZTLmNyZWF0ZURldmljZShcIi9kZXZcIixcInN0ZGVyclwiLG51bGwsTW9kdWxlW1wic3RkZXJyXCJdKX1lbHNle0ZTLnN5bWxpbmsoXCIvZGV2L3R0eTFcIixcIi9kZXYvc3RkZXJyXCIpfXZhciBzdGRpbj1GUy5vcGVuKFwiL2Rldi9zdGRpblwiLFwiclwiKTthc3NlcnQoc3RkaW4uZmQ9PT0wLFwiaW52YWxpZCBoYW5kbGUgZm9yIHN0ZGluIChcIitzdGRpbi5mZCtcIilcIik7dmFyIHN0ZG91dD1GUy5vcGVuKFwiL2Rldi9zdGRvdXRcIixcIndcIik7YXNzZXJ0KHN0ZG91dC5mZD09PTEsXCJpbnZhbGlkIGhhbmRsZSBmb3Igc3Rkb3V0IChcIitzdGRvdXQuZmQrXCIpXCIpO3ZhciBzdGRlcnI9RlMub3BlbihcIi9kZXYvc3RkZXJyXCIsXCJ3XCIpO2Fzc2VydChzdGRlcnIuZmQ9PT0yLFwiaW52YWxpZCBoYW5kbGUgZm9yIHN0ZGVyciAoXCIrc3RkZXJyLmZkK1wiKVwiKX0pLGVuc3VyZUVycm5vRXJyb3I6KGZ1bmN0aW9uKCl7aWYoRlMuRXJybm9FcnJvcilyZXR1cm47RlMuRXJybm9FcnJvcj1mdW5jdGlvbiBFcnJub0Vycm9yKGVycm5vLG5vZGUpe3RoaXMubm9kZT1ub2RlO3RoaXMuc2V0RXJybm89KGZ1bmN0aW9uKGVycm5vKXt0aGlzLmVycm5vPWVycm5vO2Zvcih2YXIga2V5IGluIEVSUk5PX0NPREVTKXtpZihFUlJOT19DT0RFU1trZXldPT09ZXJybm8pe3RoaXMuY29kZT1rZXk7YnJlYWt9fX0pO3RoaXMuc2V0RXJybm8oZXJybm8pO3RoaXMubWVzc2FnZT1FUlJOT19NRVNTQUdFU1tlcnJub119O0ZTLkVycm5vRXJyb3IucHJvdG90eXBlPW5ldyBFcnJvcjtGUy5FcnJub0Vycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1GUy5FcnJub0Vycm9yO1tFUlJOT19DT0RFUy5FTk9FTlRdLmZvckVhY2goKGZ1bmN0aW9uKGNvZGUpe0ZTLmdlbmVyaWNFcnJvcnNbY29kZV09bmV3IEZTLkVycm5vRXJyb3IoY29kZSk7RlMuZ2VuZXJpY0Vycm9yc1tjb2RlXS5zdGFjaz1cIjxnZW5lcmljIGVycm9yLCBubyBzdGFjaz5cIn0pKX0pLHN0YXRpY0luaXQ6KGZ1bmN0aW9uKCl7RlMuZW5zdXJlRXJybm9FcnJvcigpO0ZTLm5hbWVUYWJsZT1uZXcgQXJyYXkoNDA5Nik7RlMubW91bnQoTUVNRlMse30sXCIvXCIpO0ZTLmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpO0ZTLmNyZWF0ZURlZmF1bHREZXZpY2VzKCk7RlMuY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCk7RlMuZmlsZXN5c3RlbXM9e1wiTUVNRlNcIjpNRU1GUyxcIklEQkZTXCI6SURCRlMsXCJOT0RFRlNcIjpOT0RFRlMsXCJXT1JLRVJGU1wiOldPUktFUkZTfX0pLGluaXQ6KGZ1bmN0aW9uKGlucHV0LG91dHB1dCxlcnJvcil7YXNzZXJ0KCFGUy5pbml0LmluaXRpYWxpemVkLFwiRlMuaW5pdCB3YXMgcHJldmlvdXNseSBjYWxsZWQuIElmIHlvdSB3YW50IHRvIGluaXRpYWxpemUgbGF0ZXIgd2l0aCBjdXN0b20gcGFyYW1ldGVycywgcmVtb3ZlIGFueSBlYXJsaWVyIGNhbGxzIChub3RlIHRoYXQgb25lIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIGdlbmVyYXRlZCBjb2RlKVwiKTtGUy5pbml0LmluaXRpYWxpemVkPXRydWU7RlMuZW5zdXJlRXJybm9FcnJvcigpO01vZHVsZVtcInN0ZGluXCJdPWlucHV0fHxNb2R1bGVbXCJzdGRpblwiXTtNb2R1bGVbXCJzdGRvdXRcIl09b3V0cHV0fHxNb2R1bGVbXCJzdGRvdXRcIl07TW9kdWxlW1wic3RkZXJyXCJdPWVycm9yfHxNb2R1bGVbXCJzdGRlcnJcIl07RlMuY3JlYXRlU3RhbmRhcmRTdHJlYW1zKCl9KSxxdWl0OihmdW5jdGlvbigpe0ZTLmluaXQuaW5pdGlhbGl6ZWQ9ZmFsc2U7dmFyIGZmbHVzaD1Nb2R1bGVbXCJfZmZsdXNoXCJdO2lmKGZmbHVzaClmZmx1c2goMCk7Zm9yKHZhciBpPTA7aTxGUy5zdHJlYW1zLmxlbmd0aDtpKyspe3ZhciBzdHJlYW09RlMuc3RyZWFtc1tpXTtpZighc3RyZWFtKXtjb250aW51ZX1GUy5jbG9zZShzdHJlYW0pfX0pLGdldE1vZGU6KGZ1bmN0aW9uKGNhblJlYWQsY2FuV3JpdGUpe3ZhciBtb2RlPTA7aWYoY2FuUmVhZCltb2RlfD0yOTJ8NzM7aWYoY2FuV3JpdGUpbW9kZXw9MTQ2O3JldHVybiBtb2RlfSksam9pblBhdGg6KGZ1bmN0aW9uKHBhcnRzLGZvcmNlUmVsYXRpdmUpe3ZhciBwYXRoPVBBVEguam9pbi5hcHBseShudWxsLHBhcnRzKTtpZihmb3JjZVJlbGF0aXZlJiZwYXRoWzBdPT1cIi9cIilwYXRoPXBhdGguc3Vic3RyKDEpO3JldHVybiBwYXRofSksYWJzb2x1dGVQYXRoOihmdW5jdGlvbihyZWxhdGl2ZSxiYXNlKXtyZXR1cm4gUEFUSC5yZXNvbHZlKGJhc2UscmVsYXRpdmUpfSksc3RhbmRhcmRpemVQYXRoOihmdW5jdGlvbihwYXRoKXtyZXR1cm4gUEFUSC5ub3JtYWxpemUocGF0aCl9KSxmaW5kT2JqZWN0OihmdW5jdGlvbihwYXRoLGRvbnRSZXNvbHZlTGFzdExpbmspe3ZhciByZXQ9RlMuYW5hbHl6ZVBhdGgocGF0aCxkb250UmVzb2x2ZUxhc3RMaW5rKTtpZihyZXQuZXhpc3RzKXtyZXR1cm4gcmV0Lm9iamVjdH1lbHNle19fX3NldEVyck5vKHJldC5lcnJvcik7cmV0dXJuIG51bGx9fSksYW5hbHl6ZVBhdGg6KGZ1bmN0aW9uKHBhdGgsZG9udFJlc29sdmVMYXN0TGluayl7dHJ5e3ZhciBsb29rdXA9RlMubG9va3VwUGF0aChwYXRoLHtmb2xsb3c6IWRvbnRSZXNvbHZlTGFzdExpbmt9KTtwYXRoPWxvb2t1cC5wYXRofWNhdGNoKGUpe312YXIgcmV0PXtpc1Jvb3Q6ZmFsc2UsZXhpc3RzOmZhbHNlLGVycm9yOjAsbmFtZTpudWxsLHBhdGg6bnVsbCxvYmplY3Q6bnVsbCxwYXJlbnRFeGlzdHM6ZmFsc2UscGFyZW50UGF0aDpudWxsLHBhcmVudE9iamVjdDpudWxsfTt0cnl7dmFyIGxvb2t1cD1GUy5sb29rdXBQYXRoKHBhdGgse3BhcmVudDp0cnVlfSk7cmV0LnBhcmVudEV4aXN0cz10cnVlO3JldC5wYXJlbnRQYXRoPWxvb2t1cC5wYXRoO3JldC5wYXJlbnRPYmplY3Q9bG9va3VwLm5vZGU7cmV0Lm5hbWU9UEFUSC5iYXNlbmFtZShwYXRoKTtsb29rdXA9RlMubG9va3VwUGF0aChwYXRoLHtmb2xsb3c6IWRvbnRSZXNvbHZlTGFzdExpbmt9KTtyZXQuZXhpc3RzPXRydWU7cmV0LnBhdGg9bG9va3VwLnBhdGg7cmV0Lm9iamVjdD1sb29rdXAubm9kZTtyZXQubmFtZT1sb29rdXAubm9kZS5uYW1lO3JldC5pc1Jvb3Q9bG9va3VwLnBhdGg9PT1cIi9cIn1jYXRjaChlKXtyZXQuZXJyb3I9ZS5lcnJub31yZXR1cm4gcmV0fSksY3JlYXRlRm9sZGVyOihmdW5jdGlvbihwYXJlbnQsbmFtZSxjYW5SZWFkLGNhbldyaXRlKXt2YXIgcGF0aD1QQVRILmpvaW4yKHR5cGVvZiBwYXJlbnQ9PT1cInN0cmluZ1wiP3BhcmVudDpGUy5nZXRQYXRoKHBhcmVudCksbmFtZSk7dmFyIG1vZGU9RlMuZ2V0TW9kZShjYW5SZWFkLGNhbldyaXRlKTtyZXR1cm4gRlMubWtkaXIocGF0aCxtb2RlKX0pLGNyZWF0ZVBhdGg6KGZ1bmN0aW9uKHBhcmVudCxwYXRoLGNhblJlYWQsY2FuV3JpdGUpe3BhcmVudD10eXBlb2YgcGFyZW50PT09XCJzdHJpbmdcIj9wYXJlbnQ6RlMuZ2V0UGF0aChwYXJlbnQpO3ZhciBwYXJ0cz1wYXRoLnNwbGl0KFwiL1wiKS5yZXZlcnNlKCk7d2hpbGUocGFydHMubGVuZ3RoKXt2YXIgcGFydD1wYXJ0cy5wb3AoKTtpZighcGFydCljb250aW51ZTt2YXIgY3VycmVudD1QQVRILmpvaW4yKHBhcmVudCxwYXJ0KTt0cnl7RlMubWtkaXIoY3VycmVudCl9Y2F0Y2goZSl7fXBhcmVudD1jdXJyZW50fXJldHVybiBjdXJyZW50fSksY3JlYXRlRmlsZTooZnVuY3Rpb24ocGFyZW50LG5hbWUscHJvcGVydGllcyxjYW5SZWFkLGNhbldyaXRlKXt2YXIgcGF0aD1QQVRILmpvaW4yKHR5cGVvZiBwYXJlbnQ9PT1cInN0cmluZ1wiP3BhcmVudDpGUy5nZXRQYXRoKHBhcmVudCksbmFtZSk7dmFyIG1vZGU9RlMuZ2V0TW9kZShjYW5SZWFkLGNhbldyaXRlKTtyZXR1cm4gRlMuY3JlYXRlKHBhdGgsbW9kZSl9KSxjcmVhdGVEYXRhRmlsZTooZnVuY3Rpb24ocGFyZW50LG5hbWUsZGF0YSxjYW5SZWFkLGNhbldyaXRlLGNhbk93bil7dmFyIHBhdGg9bmFtZT9QQVRILmpvaW4yKHR5cGVvZiBwYXJlbnQ9PT1cInN0cmluZ1wiP3BhcmVudDpGUy5nZXRQYXRoKHBhcmVudCksbmFtZSk6cGFyZW50O3ZhciBtb2RlPUZTLmdldE1vZGUoY2FuUmVhZCxjYW5Xcml0ZSk7dmFyIG5vZGU9RlMuY3JlYXRlKHBhdGgsbW9kZSk7aWYoZGF0YSl7aWYodHlwZW9mIGRhdGE9PT1cInN0cmluZ1wiKXt2YXIgYXJyPW5ldyBBcnJheShkYXRhLmxlbmd0aCk7Zm9yKHZhciBpPTAsbGVuPWRhdGEubGVuZ3RoO2k8bGVuOysraSlhcnJbaV09ZGF0YS5jaGFyQ29kZUF0KGkpO2RhdGE9YXJyfUZTLmNobW9kKG5vZGUsbW9kZXwxNDYpO3ZhciBzdHJlYW09RlMub3Blbihub2RlLFwid1wiKTtGUy53cml0ZShzdHJlYW0sZGF0YSwwLGRhdGEubGVuZ3RoLDAsY2FuT3duKTtGUy5jbG9zZShzdHJlYW0pO0ZTLmNobW9kKG5vZGUsbW9kZSl9cmV0dXJuIG5vZGV9KSxjcmVhdGVEZXZpY2U6KGZ1bmN0aW9uKHBhcmVudCxuYW1lLGlucHV0LG91dHB1dCl7dmFyIHBhdGg9UEFUSC5qb2luMih0eXBlb2YgcGFyZW50PT09XCJzdHJpbmdcIj9wYXJlbnQ6RlMuZ2V0UGF0aChwYXJlbnQpLG5hbWUpO3ZhciBtb2RlPUZTLmdldE1vZGUoISFpbnB1dCwhIW91dHB1dCk7aWYoIUZTLmNyZWF0ZURldmljZS5tYWpvcilGUy5jcmVhdGVEZXZpY2UubWFqb3I9NjQ7dmFyIGRldj1GUy5tYWtlZGV2KEZTLmNyZWF0ZURldmljZS5tYWpvcisrLDApO0ZTLnJlZ2lzdGVyRGV2aWNlKGRldix7b3BlbjooZnVuY3Rpb24oc3RyZWFtKXtzdHJlYW0uc2Vla2FibGU9ZmFsc2V9KSxjbG9zZTooZnVuY3Rpb24oc3RyZWFtKXtpZihvdXRwdXQmJm91dHB1dC5idWZmZXImJm91dHB1dC5idWZmZXIubGVuZ3RoKXtvdXRwdXQoMTApfX0pLHJlYWQ6KGZ1bmN0aW9uKHN0cmVhbSxidWZmZXIsb2Zmc2V0LGxlbmd0aCxwb3Mpe3ZhciBieXRlc1JlYWQ9MDtmb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspe3ZhciByZXN1bHQ7dHJ5e3Jlc3VsdD1pbnB1dCgpfWNhdGNoKGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTyl9aWYocmVzdWx0PT09dW5kZWZpbmVkJiZieXRlc1JlYWQ9PT0wKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FQUdBSU4pfWlmKHJlc3VsdD09PW51bGx8fHJlc3VsdD09PXVuZGVmaW5lZClicmVhaztieXRlc1JlYWQrKztidWZmZXJbb2Zmc2V0K2ldPXJlc3VsdH1pZihieXRlc1JlYWQpe3N0cmVhbS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpfXJldHVybiBieXRlc1JlYWR9KSx3cml0ZTooZnVuY3Rpb24oc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLHBvcyl7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSsrKXt0cnl7b3V0cHV0KGJ1ZmZlcltvZmZzZXQraV0pfWNhdGNoKGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTyl9fWlmKGxlbmd0aCl7c3RyZWFtLm5vZGUudGltZXN0YW1wPURhdGUubm93KCl9cmV0dXJuIGl9KX0pO3JldHVybiBGUy5ta2RldihwYXRoLG1vZGUsZGV2KX0pLGNyZWF0ZUxpbms6KGZ1bmN0aW9uKHBhcmVudCxuYW1lLHRhcmdldCxjYW5SZWFkLGNhbldyaXRlKXt2YXIgcGF0aD1QQVRILmpvaW4yKHR5cGVvZiBwYXJlbnQ9PT1cInN0cmluZ1wiP3BhcmVudDpGUy5nZXRQYXRoKHBhcmVudCksbmFtZSk7cmV0dXJuIEZTLnN5bWxpbmsodGFyZ2V0LHBhdGgpfSksZm9yY2VMb2FkRmlsZTooZnVuY3Rpb24ob2JqKXtpZihvYmouaXNEZXZpY2V8fG9iai5pc0ZvbGRlcnx8b2JqLmxpbmt8fG9iai5jb250ZW50cylyZXR1cm4gdHJ1ZTt2YXIgc3VjY2Vzcz10cnVlO2lmKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCE9PVwidW5kZWZpbmVkXCIpe3Rocm93IG5ldyBFcnJvcihcIkxhenkgbG9hZGluZyBzaG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhyZWFkLlwiKX1lbHNlIGlmKE1vZHVsZVtcInJlYWRcIl0pe3RyeXtvYmouY29udGVudHM9aW50QXJyYXlGcm9tU3RyaW5nKE1vZHVsZVtcInJlYWRcIl0ob2JqLnVybCksdHJ1ZSk7b2JqLnVzZWRCeXRlcz1vYmouY29udGVudHMubGVuZ3RofWNhdGNoKGUpe3N1Y2Nlc3M9ZmFsc2V9fWVsc2V7dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGxvYWQgd2l0aG91dCByZWFkKCkgb3IgWE1MSHR0cFJlcXVlc3QuXCIpfWlmKCFzdWNjZXNzKV9fX3NldEVyck5vKEVSUk5PX0NPREVTLkVJTyk7cmV0dXJuIHN1Y2Nlc3N9KSxjcmVhdGVMYXp5RmlsZTooZnVuY3Rpb24ocGFyZW50LG5hbWUsdXJsLGNhblJlYWQsY2FuV3JpdGUpe2Z1bmN0aW9uIExhenlVaW50OEFycmF5KCl7dGhpcy5sZW5ndGhLbm93bj1mYWxzZTt0aGlzLmNodW5rcz1bXX1MYXp5VWludDhBcnJheS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIExhenlVaW50OEFycmF5X2dldChpZHgpe2lmKGlkeD50aGlzLmxlbmd0aC0xfHxpZHg8MCl7cmV0dXJuIHVuZGVmaW5lZH12YXIgY2h1bmtPZmZzZXQ9aWR4JXRoaXMuY2h1bmtTaXplO3ZhciBjaHVua051bT1pZHgvdGhpcy5jaHVua1NpemV8MDtyZXR1cm4gdGhpcy5nZXR0ZXIoY2h1bmtOdW0pW2NodW5rT2Zmc2V0XX07TGF6eVVpbnQ4QXJyYXkucHJvdG90eXBlLnNldERhdGFHZXR0ZXI9ZnVuY3Rpb24gTGF6eVVpbnQ4QXJyYXlfc2V0RGF0YUdldHRlcihnZXR0ZXIpe3RoaXMuZ2V0dGVyPWdldHRlcn07TGF6eVVpbnQ4QXJyYXkucHJvdG90eXBlLmNhY2hlTGVuZ3RoPWZ1bmN0aW9uIExhenlVaW50OEFycmF5X2NhY2hlTGVuZ3RoKCl7dmFyIHhocj1uZXcgWE1MSHR0cFJlcXVlc3Q7eGhyLm9wZW4oXCJIRUFEXCIsdXJsLGZhbHNlKTt4aHIuc2VuZChudWxsKTtpZighKHhoci5zdGF0dXM+PTIwMCYmeGhyLnN0YXR1czwzMDB8fHhoci5zdGF0dXM9PT0zMDQpKXRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGxvYWQgXCIrdXJsK1wiLiBTdGF0dXM6IFwiK3hoci5zdGF0dXMpO3ZhciBkYXRhbGVuZ3RoPU51bWJlcih4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LWxlbmd0aFwiKSk7dmFyIGhlYWRlcjt2YXIgaGFzQnl0ZVNlcnZpbmc9KGhlYWRlcj14aHIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJBY2NlcHQtUmFuZ2VzXCIpKSYmaGVhZGVyPT09XCJieXRlc1wiO3ZhciBjaHVua1NpemU9MTAyNCoxMDI0O2lmKCFoYXNCeXRlU2VydmluZyljaHVua1NpemU9ZGF0YWxlbmd0aDt2YXIgZG9YSFI9KGZ1bmN0aW9uKGZyb20sdG8pe2lmKGZyb20+dG8pdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCByYW5nZSAoXCIrZnJvbStcIiwgXCIrdG8rXCIpIG9yIG5vIGJ5dGVzIHJlcXVlc3RlZCFcIik7aWYodG8+ZGF0YWxlbmd0aC0xKXRocm93IG5ldyBFcnJvcihcIm9ubHkgXCIrZGF0YWxlbmd0aCtcIiBieXRlcyBhdmFpbGFibGUhIHByb2dyYW1tZXIgZXJyb3IhXCIpO3ZhciB4aHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3hoci5vcGVuKFwiR0VUXCIsdXJsLGZhbHNlKTtpZihkYXRhbGVuZ3RoIT09Y2h1bmtTaXplKXhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiUmFuZ2VcIixcImJ5dGVzPVwiK2Zyb20rXCItXCIrdG8pO2lmKHR5cGVvZiBVaW50OEFycmF5IT1cInVuZGVmaW5lZFwiKXhoci5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiO2lmKHhoci5vdmVycmlkZU1pbWVUeXBlKXt4aHIub3ZlcnJpZGVNaW1lVHlwZShcInRleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRlZmluZWRcIil9eGhyLnNlbmQobnVsbCk7aWYoISh4aHIuc3RhdHVzPj0yMDAmJnhoci5zdGF0dXM8MzAwfHx4aHIuc3RhdHVzPT09MzA0KSl0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBsb2FkIFwiK3VybCtcIi4gU3RhdHVzOiBcIit4aHIuc3RhdHVzKTtpZih4aHIucmVzcG9uc2UhPT11bmRlZmluZWQpe3JldHVybiBuZXcgVWludDhBcnJheSh4aHIucmVzcG9uc2V8fFtdKX1lbHNle3JldHVybiBpbnRBcnJheUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dHx8XCJcIix0cnVlKX19KTt2YXIgbGF6eUFycmF5PXRoaXM7bGF6eUFycmF5LnNldERhdGFHZXR0ZXIoKGZ1bmN0aW9uKGNodW5rTnVtKXt2YXIgc3RhcnQ9Y2h1bmtOdW0qY2h1bmtTaXplO3ZhciBlbmQ9KGNodW5rTnVtKzEpKmNodW5rU2l6ZS0xO2VuZD1NYXRoLm1pbihlbmQsZGF0YWxlbmd0aC0xKTtpZih0eXBlb2YgbGF6eUFycmF5LmNodW5rc1tjaHVua051bV09PT1cInVuZGVmaW5lZFwiKXtsYXp5QXJyYXkuY2h1bmtzW2NodW5rTnVtXT1kb1hIUihzdGFydCxlbmQpfWlmKHR5cGVvZiBsYXp5QXJyYXkuY2h1bmtzW2NodW5rTnVtXT09PVwidW5kZWZpbmVkXCIpdGhyb3cgbmV3IEVycm9yKFwiZG9YSFIgZmFpbGVkIVwiKTtyZXR1cm4gbGF6eUFycmF5LmNodW5rc1tjaHVua051bV19KSk7dGhpcy5fbGVuZ3RoPWRhdGFsZW5ndGg7dGhpcy5fY2h1bmtTaXplPWNodW5rU2l6ZTt0aGlzLmxlbmd0aEtub3duPXRydWV9O2lmKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCE9PVwidW5kZWZpbmVkXCIpe2lmKCFFTlZJUk9OTUVOVF9JU19XT1JLRVIpdGhyb3dcIkNhbm5vdCBkbyBzeW5jaHJvbm91cyBiaW5hcnkgWEhScyBvdXRzaWRlIHdlYndvcmtlcnMgaW4gbW9kZXJuIGJyb3dzZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2NcIjt2YXIgbGF6eUFycmF5PW5ldyBMYXp5VWludDhBcnJheTtPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eUFycmF5LFwibGVuZ3RoXCIse2dldDooZnVuY3Rpb24oKXtpZighdGhpcy5sZW5ndGhLbm93bil7dGhpcy5jYWNoZUxlbmd0aCgpfXJldHVybiB0aGlzLl9sZW5ndGh9KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5QXJyYXksXCJjaHVua1NpemVcIix7Z2V0OihmdW5jdGlvbigpe2lmKCF0aGlzLmxlbmd0aEtub3duKXt0aGlzLmNhY2hlTGVuZ3RoKCl9cmV0dXJuIHRoaXMuX2NodW5rU2l6ZX0pfSk7dmFyIHByb3BlcnRpZXM9e2lzRGV2aWNlOmZhbHNlLGNvbnRlbnRzOmxhenlBcnJheX19ZWxzZXt2YXIgcHJvcGVydGllcz17aXNEZXZpY2U6ZmFsc2UsdXJsOnVybH19dmFyIG5vZGU9RlMuY3JlYXRlRmlsZShwYXJlbnQsbmFtZSxwcm9wZXJ0aWVzLGNhblJlYWQsY2FuV3JpdGUpO2lmKHByb3BlcnRpZXMuY29udGVudHMpe25vZGUuY29udGVudHM9cHJvcGVydGllcy5jb250ZW50c31lbHNlIGlmKHByb3BlcnRpZXMudXJsKXtub2RlLmNvbnRlbnRzPW51bGw7bm9kZS51cmw9cHJvcGVydGllcy51cmx9T2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsXCJ1c2VkQnl0ZXNcIix7Z2V0OihmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRlbnRzLmxlbmd0aH0pfSk7dmFyIHN0cmVhbV9vcHM9e307dmFyIGtleXM9T2JqZWN0LmtleXMobm9kZS5zdHJlYW1fb3BzKTtrZXlzLmZvckVhY2goKGZ1bmN0aW9uKGtleSl7dmFyIGZuPW5vZGUuc3RyZWFtX29wc1trZXldO3N0cmVhbV9vcHNba2V5XT1mdW5jdGlvbiBmb3JjZUxvYWRMYXp5RmlsZSgpe2lmKCFGUy5mb3JjZUxvYWRGaWxlKG5vZGUpKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU8pfXJldHVybiBmbi5hcHBseShudWxsLGFyZ3VtZW50cyl9fSkpO3N0cmVhbV9vcHMucmVhZD1mdW5jdGlvbiBzdHJlYW1fb3BzX3JlYWQoc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLHBvc2l0aW9uKXtpZighRlMuZm9yY2VMb2FkRmlsZShub2RlKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlPKX12YXIgY29udGVudHM9c3RyZWFtLm5vZGUuY29udGVudHM7aWYocG9zaXRpb24+PWNvbnRlbnRzLmxlbmd0aClyZXR1cm4gMDt2YXIgc2l6ZT1NYXRoLm1pbihjb250ZW50cy5sZW5ndGgtcG9zaXRpb24sbGVuZ3RoKTthc3NlcnQoc2l6ZT49MCk7aWYoY29udGVudHMuc2xpY2Upe2Zvcih2YXIgaT0wO2k8c2l6ZTtpKyspe2J1ZmZlcltvZmZzZXQraV09Y29udGVudHNbcG9zaXRpb24raV19fWVsc2V7Zm9yKHZhciBpPTA7aTxzaXplO2krKyl7YnVmZmVyW29mZnNldCtpXT1jb250ZW50cy5nZXQocG9zaXRpb24raSl9fXJldHVybiBzaXplfTtub2RlLnN0cmVhbV9vcHM9c3RyZWFtX29wcztyZXR1cm4gbm9kZX0pLGNyZWF0ZVByZWxvYWRlZEZpbGU6KGZ1bmN0aW9uKHBhcmVudCxuYW1lLHVybCxjYW5SZWFkLGNhbldyaXRlLG9ubG9hZCxvbmVycm9yLGRvbnRDcmVhdGVGaWxlLGNhbk93bixwcmVGaW5pc2gpe0Jyb3dzZXIuaW5pdCgpO3ZhciBmdWxsbmFtZT1uYW1lP1BBVEgucmVzb2x2ZShQQVRILmpvaW4yKHBhcmVudCxuYW1lKSk6cGFyZW50O3ZhciBkZXA9Z2V0VW5pcXVlUnVuRGVwZW5kZW5jeShcImNwIFwiK2Z1bGxuYW1lKTtmdW5jdGlvbiBwcm9jZXNzRGF0YShieXRlQXJyYXkpe2Z1bmN0aW9uIGZpbmlzaChieXRlQXJyYXkpe2lmKHByZUZpbmlzaClwcmVGaW5pc2goKTtpZighZG9udENyZWF0ZUZpbGUpe0ZTLmNyZWF0ZURhdGFGaWxlKHBhcmVudCxuYW1lLGJ5dGVBcnJheSxjYW5SZWFkLGNhbldyaXRlLGNhbk93bil9aWYob25sb2FkKW9ubG9hZCgpO3JlbW92ZVJ1bkRlcGVuZGVuY3koZGVwKX12YXIgaGFuZGxlZD1mYWxzZTtNb2R1bGVbXCJwcmVsb2FkUGx1Z2luc1wiXS5mb3JFYWNoKChmdW5jdGlvbihwbHVnaW4pe2lmKGhhbmRsZWQpcmV0dXJuO2lmKHBsdWdpbltcImNhbkhhbmRsZVwiXShmdWxsbmFtZSkpe3BsdWdpbltcImhhbmRsZVwiXShieXRlQXJyYXksZnVsbG5hbWUsZmluaXNoLChmdW5jdGlvbigpe2lmKG9uZXJyb3Ipb25lcnJvcigpO3JlbW92ZVJ1bkRlcGVuZGVuY3koZGVwKX0pKTtoYW5kbGVkPXRydWV9fSkpO2lmKCFoYW5kbGVkKWZpbmlzaChieXRlQXJyYXkpfWFkZFJ1bkRlcGVuZGVuY3koZGVwKTtpZih0eXBlb2YgdXJsPT1cInN0cmluZ1wiKXtCcm93c2VyLmFzeW5jTG9hZCh1cmwsKGZ1bmN0aW9uKGJ5dGVBcnJheSl7cHJvY2Vzc0RhdGEoYnl0ZUFycmF5KX0pLG9uZXJyb3IpfWVsc2V7cHJvY2Vzc0RhdGEodXJsKX19KSxpbmRleGVkREI6KGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5pbmRleGVkREJ8fHdpbmRvdy5tb3pJbmRleGVkREJ8fHdpbmRvdy53ZWJraXRJbmRleGVkREJ8fHdpbmRvdy5tc0luZGV4ZWREQn0pLERCX05BTUU6KGZ1bmN0aW9uKCl7cmV0dXJuXCJFTV9GU19cIit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9KSxEQl9WRVJTSU9OOjIwLERCX1NUT1JFX05BTUU6XCJGSUxFX0RBVEFcIixzYXZlRmlsZXNUb0RCOihmdW5jdGlvbihwYXRocyxvbmxvYWQsb25lcnJvcil7b25sb2FkPW9ubG9hZHx8KGZ1bmN0aW9uKCl7fSk7b25lcnJvcj1vbmVycm9yfHwoZnVuY3Rpb24oKXt9KTt2YXIgaW5kZXhlZERCPUZTLmluZGV4ZWREQigpO3RyeXt2YXIgb3BlblJlcXVlc3Q9aW5kZXhlZERCLm9wZW4oRlMuREJfTkFNRSgpLEZTLkRCX1ZFUlNJT04pfWNhdGNoKGUpe3JldHVybiBvbmVycm9yKGUpfW9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZD1mdW5jdGlvbiBvcGVuUmVxdWVzdF9vbnVwZ3JhZGVuZWVkZWQoKXtjb25zb2xlLmxvZyhcImNyZWF0aW5nIGRiXCIpO3ZhciBkYj1vcGVuUmVxdWVzdC5yZXN1bHQ7ZGIuY3JlYXRlT2JqZWN0U3RvcmUoRlMuREJfU1RPUkVfTkFNRSl9O29wZW5SZXF1ZXN0Lm9uc3VjY2Vzcz1mdW5jdGlvbiBvcGVuUmVxdWVzdF9vbnN1Y2Nlc3MoKXt2YXIgZGI9b3BlblJlcXVlc3QucmVzdWx0O3ZhciB0cmFuc2FjdGlvbj1kYi50cmFuc2FjdGlvbihbRlMuREJfU1RPUkVfTkFNRV0sXCJyZWFkd3JpdGVcIik7dmFyIGZpbGVzPXRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKEZTLkRCX1NUT1JFX05BTUUpO3ZhciBvaz0wLGZhaWw9MCx0b3RhbD1wYXRocy5sZW5ndGg7ZnVuY3Rpb24gZmluaXNoKCl7aWYoZmFpbD09MClvbmxvYWQoKTtlbHNlIG9uZXJyb3IoKX1wYXRocy5mb3JFYWNoKChmdW5jdGlvbihwYXRoKXt2YXIgcHV0UmVxdWVzdD1maWxlcy5wdXQoRlMuYW5hbHl6ZVBhdGgocGF0aCkub2JqZWN0LmNvbnRlbnRzLHBhdGgpO3B1dFJlcXVlc3Qub25zdWNjZXNzPWZ1bmN0aW9uIHB1dFJlcXVlc3Rfb25zdWNjZXNzKCl7b2srKztpZihvaytmYWlsPT10b3RhbClmaW5pc2goKX07cHV0UmVxdWVzdC5vbmVycm9yPWZ1bmN0aW9uIHB1dFJlcXVlc3Rfb25lcnJvcigpe2ZhaWwrKztpZihvaytmYWlsPT10b3RhbClmaW5pc2goKX19KSk7dHJhbnNhY3Rpb24ub25lcnJvcj1vbmVycm9yfTtvcGVuUmVxdWVzdC5vbmVycm9yPW9uZXJyb3J9KSxsb2FkRmlsZXNGcm9tREI6KGZ1bmN0aW9uKHBhdGhzLG9ubG9hZCxvbmVycm9yKXtvbmxvYWQ9b25sb2FkfHwoZnVuY3Rpb24oKXt9KTtvbmVycm9yPW9uZXJyb3J8fChmdW5jdGlvbigpe30pO3ZhciBpbmRleGVkREI9RlMuaW5kZXhlZERCKCk7dHJ5e3ZhciBvcGVuUmVxdWVzdD1pbmRleGVkREIub3BlbihGUy5EQl9OQU1FKCksRlMuREJfVkVSU0lPTil9Y2F0Y2goZSl7cmV0dXJuIG9uZXJyb3IoZSl9b3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkPW9uZXJyb3I7b3BlblJlcXVlc3Qub25zdWNjZXNzPWZ1bmN0aW9uIG9wZW5SZXF1ZXN0X29uc3VjY2Vzcygpe3ZhciBkYj1vcGVuUmVxdWVzdC5yZXN1bHQ7dHJ5e3ZhciB0cmFuc2FjdGlvbj1kYi50cmFuc2FjdGlvbihbRlMuREJfU1RPUkVfTkFNRV0sXCJyZWFkb25seVwiKX1jYXRjaChlKXtvbmVycm9yKGUpO3JldHVybn12YXIgZmlsZXM9dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoRlMuREJfU1RPUkVfTkFNRSk7dmFyIG9rPTAsZmFpbD0wLHRvdGFsPXBhdGhzLmxlbmd0aDtmdW5jdGlvbiBmaW5pc2goKXtpZihmYWlsPT0wKW9ubG9hZCgpO2Vsc2Ugb25lcnJvcigpfXBhdGhzLmZvckVhY2goKGZ1bmN0aW9uKHBhdGgpe3ZhciBnZXRSZXF1ZXN0PWZpbGVzLmdldChwYXRoKTtnZXRSZXF1ZXN0Lm9uc3VjY2Vzcz1mdW5jdGlvbiBnZXRSZXF1ZXN0X29uc3VjY2Vzcygpe2lmKEZTLmFuYWx5emVQYXRoKHBhdGgpLmV4aXN0cyl7RlMudW5saW5rKHBhdGgpfUZTLmNyZWF0ZURhdGFGaWxlKFBBVEguZGlybmFtZShwYXRoKSxQQVRILmJhc2VuYW1lKHBhdGgpLGdldFJlcXVlc3QucmVzdWx0LHRydWUsdHJ1ZSx0cnVlKTtvaysrO2lmKG9rK2ZhaWw9PXRvdGFsKWZpbmlzaCgpfTtnZXRSZXF1ZXN0Lm9uZXJyb3I9ZnVuY3Rpb24gZ2V0UmVxdWVzdF9vbmVycm9yKCl7ZmFpbCsrO2lmKG9rK2ZhaWw9PXRvdGFsKWZpbmlzaCgpfX0pKTt0cmFuc2FjdGlvbi5vbmVycm9yPW9uZXJyb3J9O29wZW5SZXF1ZXN0Lm9uZXJyb3I9b25lcnJvcn0pfTt2YXIgU1lTQ0FMTFM9e0RFRkFVTFRfUE9MTE1BU0s6NSxtYXBwaW5nczp7fSx1bWFzazo1MTEsY2FsY3VsYXRlQXQ6KGZ1bmN0aW9uKGRpcmZkLHBhdGgpe2lmKHBhdGhbMF0hPT1cIi9cIil7dmFyIGRpcjtpZihkaXJmZD09PS0xMDApe2Rpcj1GUy5jd2QoKX1lbHNle3ZhciBkaXJzdHJlYW09RlMuZ2V0U3RyZWFtKGRpcmZkKTtpZighZGlyc3RyZWFtKXRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKTtkaXI9ZGlyc3RyZWFtLnBhdGh9cGF0aD1QQVRILmpvaW4yKGRpcixwYXRoKX1yZXR1cm4gcGF0aH0pLGRvU3RhdDooZnVuY3Rpb24oZnVuYyxwYXRoLGJ1Zil7dHJ5e3ZhciBzdGF0PWZ1bmMocGF0aCl9Y2F0Y2goZSl7aWYoZSYmZS5ub2RlJiZQQVRILm5vcm1hbGl6ZShwYXRoKSE9PVBBVEgubm9ybWFsaXplKEZTLmdldFBhdGgoZS5ub2RlKSkpe3JldHVybi1FUlJOT19DT0RFUy5FTk9URElSfXRocm93IGV9SEVBUDMyW2J1Zj4+Ml09c3RhdC5kZXY7SEVBUDMyW2J1Zis0Pj4yXT0wO0hFQVAzMltidWYrOD4+Ml09c3RhdC5pbm87SEVBUDMyW2J1ZisxMj4+Ml09c3RhdC5tb2RlO0hFQVAzMltidWYrMTY+PjJdPXN0YXQubmxpbms7SEVBUDMyW2J1ZisyMD4+Ml09c3RhdC51aWQ7SEVBUDMyW2J1ZisyND4+Ml09c3RhdC5naWQ7SEVBUDMyW2J1ZisyOD4+Ml09c3RhdC5yZGV2O0hFQVAzMltidWYrMzI+PjJdPTA7SEVBUDMyW2J1ZiszNj4+Ml09c3RhdC5zaXplO0hFQVAzMltidWYrNDA+PjJdPTQwOTY7SEVBUDMyW2J1Zis0ND4+Ml09c3RhdC5ibG9ja3M7SEVBUDMyW2J1Zis0OD4+Ml09c3RhdC5hdGltZS5nZXRUaW1lKCkvMWUzfDA7SEVBUDMyW2J1Zis1Mj4+Ml09MDtIRUFQMzJbYnVmKzU2Pj4yXT1zdGF0Lm10aW1lLmdldFRpbWUoKS8xZTN8MDtIRUFQMzJbYnVmKzYwPj4yXT0wO0hFQVAzMltidWYrNjQ+PjJdPXN0YXQuY3RpbWUuZ2V0VGltZSgpLzFlM3wwO0hFQVAzMltidWYrNjg+PjJdPTA7SEVBUDMyW2J1Zis3Mj4+Ml09c3RhdC5pbm87cmV0dXJuIDB9KSxkb01zeW5jOihmdW5jdGlvbihhZGRyLHN0cmVhbSxsZW4sZmxhZ3Mpe3ZhciBidWZmZXI9bmV3IFVpbnQ4QXJyYXkoSEVBUFU4LnN1YmFycmF5KGFkZHIsYWRkcitsZW4pKTtGUy5tc3luYyhzdHJlYW0sYnVmZmVyLDAsbGVuLGZsYWdzKX0pLGRvTWtkaXI6KGZ1bmN0aW9uKHBhdGgsbW9kZSl7cGF0aD1QQVRILm5vcm1hbGl6ZShwYXRoKTtpZihwYXRoW3BhdGgubGVuZ3RoLTFdPT09XCIvXCIpcGF0aD1wYXRoLnN1YnN0cigwLHBhdGgubGVuZ3RoLTEpO0ZTLm1rZGlyKHBhdGgsbW9kZSwwKTtyZXR1cm4gMH0pLGRvTWtub2Q6KGZ1bmN0aW9uKHBhdGgsbW9kZSxkZXYpe3N3aXRjaChtb2RlJjYxNDQwKXtjYXNlIDMyNzY4OmNhc2UgODE5MjpjYXNlIDI0NTc2OmNhc2UgNDA5NjpjYXNlIDQ5MTUyOmJyZWFrO2RlZmF1bHQ6cmV0dXJuLUVSUk5PX0NPREVTLkVJTlZBTH1GUy5ta25vZChwYXRoLG1vZGUsZGV2KTtyZXR1cm4gMH0pLGRvUmVhZGxpbms6KGZ1bmN0aW9uKHBhdGgsYnVmLGJ1ZnNpemUpe2lmKGJ1ZnNpemU8PTApcmV0dXJuLUVSUk5PX0NPREVTLkVJTlZBTDt2YXIgcmV0PUZTLnJlYWRsaW5rKHBhdGgpO3JldD1yZXQuc2xpY2UoMCxNYXRoLm1heCgwLGJ1ZnNpemUpKTt3cml0ZVN0cmluZ1RvTWVtb3J5KHJldCxidWYsdHJ1ZSk7cmV0dXJuIHJldC5sZW5ndGh9KSxkb0FjY2VzczooZnVuY3Rpb24ocGF0aCxhbW9kZSl7aWYoYW1vZGUmfjcpe3JldHVybi1FUlJOT19DT0RFUy5FSU5WQUx9dmFyIG5vZGU7dmFyIGxvb2t1cD1GUy5sb29rdXBQYXRoKHBhdGgse2ZvbGxvdzp0cnVlfSk7bm9kZT1sb29rdXAubm9kZTt2YXIgcGVybXM9XCJcIjtpZihhbW9kZSY0KXBlcm1zKz1cInJcIjtpZihhbW9kZSYyKXBlcm1zKz1cIndcIjtpZihhbW9kZSYxKXBlcm1zKz1cInhcIjtpZihwZXJtcyYmRlMubm9kZVBlcm1pc3Npb25zKG5vZGUscGVybXMpKXtyZXR1cm4tRVJSTk9fQ09ERVMuRUFDQ0VTfXJldHVybiAwfSksZG9EdXA6KGZ1bmN0aW9uKHBhdGgsZmxhZ3Msc3VnZ2VzdEZEKXt2YXIgc3VnZ2VzdD1GUy5nZXRTdHJlYW0oc3VnZ2VzdEZEKTtpZihzdWdnZXN0KUZTLmNsb3NlKHN1Z2dlc3QpO3JldHVybiBGUy5vcGVuKHBhdGgsZmxhZ3MsMCxzdWdnZXN0RkQsc3VnZ2VzdEZEKS5mZH0pLGRvUmVhZHY6KGZ1bmN0aW9uKHN0cmVhbSxpb3YsaW92Y250LG9mZnNldCl7dmFyIHJldD0wO2Zvcih2YXIgaT0wO2k8aW92Y250O2krKyl7dmFyIHB0cj1IRUFQMzJbaW92K2kqOD4+Ml07dmFyIGxlbj1IRUFQMzJbaW92KyhpKjgrNCk+PjJdO3ZhciBjdXJyPUZTLnJlYWQoc3RyZWFtLEhFQVA4LHB0cixsZW4sb2Zmc2V0KTtpZihjdXJyPDApcmV0dXJuLTE7cmV0Kz1jdXJyO2lmKGN1cnI8bGVuKWJyZWFrfXJldHVybiByZXR9KSxkb1dyaXRldjooZnVuY3Rpb24oc3RyZWFtLGlvdixpb3ZjbnQsb2Zmc2V0KXt2YXIgcmV0PTA7Zm9yKHZhciBpPTA7aTxpb3ZjbnQ7aSsrKXt2YXIgcHRyPUhFQVAzMltpb3YraSo4Pj4yXTt2YXIgbGVuPUhFQVAzMltpb3YrKGkqOCs0KT4+Ml07dmFyIGN1cnI9RlMud3JpdGUoc3RyZWFtLEhFQVA4LHB0cixsZW4sb2Zmc2V0KTtpZihjdXJyPDApcmV0dXJuLTE7cmV0Kz1jdXJyfXJldHVybiByZXR9KSx2YXJhcmdzOjAsZ2V0OihmdW5jdGlvbih2YXJhcmdzKXtTWVNDQUxMUy52YXJhcmdzKz00O3ZhciByZXQ9SEVBUDMyW1NZU0NBTExTLnZhcmFyZ3MtND4+Ml07cmV0dXJuIHJldH0pLGdldFN0cjooZnVuY3Rpb24oKXt2YXIgcmV0PVBvaW50ZXJfc3RyaW5naWZ5KFNZU0NBTExTLmdldCgpKTtyZXR1cm4gcmV0fSksZ2V0U3RyZWFtRnJvbUZEOihmdW5jdGlvbigpe3ZhciBzdHJlYW09RlMuZ2V0U3RyZWFtKFNZU0NBTExTLmdldCgpKTtpZighc3RyZWFtKXRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKTtyZXR1cm4gc3RyZWFtfSksZ2V0U29ja2V0RnJvbUZEOihmdW5jdGlvbigpe3ZhciBzb2NrZXQ9U09DS0ZTLmdldFNvY2tldChTWVNDQUxMUy5nZXQoKSk7aWYoIXNvY2tldCl0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FQkFERik7cmV0dXJuIHNvY2tldH0pLGdldFNvY2tldEFkZHJlc3M6KGZ1bmN0aW9uKGFsbG93TnVsbCl7dmFyIGFkZHJwPVNZU0NBTExTLmdldCgpLGFkZHJsZW49U1lTQ0FMTFMuZ2V0KCk7aWYoYWxsb3dOdWxsJiZhZGRycD09PTApcmV0dXJuIG51bGw7dmFyIGluZm89X19yZWFkX3NvY2thZGRyKGFkZHJwLGFkZHJsZW4pO2lmKGluZm8uZXJybm8pdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoaW5mby5lcnJubyk7aW5mby5hZGRyPUROUy5sb29rdXBfYWRkcihpbmZvLmFkZHIpfHxpbmZvLmFkZHI7cmV0dXJuIGluZm99KSxnZXQ2NDooZnVuY3Rpb24oKXt2YXIgbG93PVNZU0NBTExTLmdldCgpLGhpZ2g9U1lTQ0FMTFMuZ2V0KCk7aWYobG93Pj0wKWFzc2VydChoaWdoPT09MCk7ZWxzZSBhc3NlcnQoaGlnaD09PS0xKTtyZXR1cm4gbG93fSksZ2V0WmVybzooZnVuY3Rpb24oKXthc3NlcnQoU1lTQ0FMTFMuZ2V0KCk9PT0wKX0pfTtmdW5jdGlvbiBfX19zeXNjYWxsNih3aGljaCx2YXJhcmdzKXtTWVNDQUxMUy52YXJhcmdzPXZhcmFyZ3M7dHJ5e3ZhciBzdHJlYW09U1lTQ0FMTFMuZ2V0U3RyZWFtRnJvbUZEKCk7RlMuY2xvc2Uoc3RyZWFtKTtyZXR1cm4gMH1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT1cInVuZGVmaW5lZFwifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4tZS5lcnJub319dmFyIF9lbXNjcmlwdGVuX2FzbV9jb25zdD10cnVlO2Z1bmN0aW9uIF9fX2Fzc2VydF9mYWlsKGNvbmRpdGlvbixmaWxlbmFtZSxsaW5lLGZ1bmMpe0FCT1JUPXRydWU7dGhyb3dcIkFzc2VydGlvbiBmYWlsZWQ6IFwiK1BvaW50ZXJfc3RyaW5naWZ5KGNvbmRpdGlvbikrXCIsIGF0OiBcIitbZmlsZW5hbWU/UG9pbnRlcl9zdHJpbmdpZnkoZmlsZW5hbWUpOlwidW5rbm93biBmaWxlbmFtZVwiLGxpbmUsZnVuYz9Qb2ludGVyX3N0cmluZ2lmeShmdW5jKTpcInVua25vd24gZnVuY3Rpb25cIl0rXCIgYXQgXCIrc3RhY2tUcmFjZSgpfWZ1bmN0aW9uIF9zYnJrKGJ5dGVzKXt2YXIgc2VsZj1fc2JyaztpZighc2VsZi5jYWxsZWQpe0RZTkFNSUNUT1A9YWxpZ25NZW1vcnlQYWdlKERZTkFNSUNUT1ApO3NlbGYuY2FsbGVkPXRydWU7YXNzZXJ0KFJ1bnRpbWUuZHluYW1pY0FsbG9jKTtzZWxmLmFsbG9jPVJ1bnRpbWUuZHluYW1pY0FsbG9jO1J1bnRpbWUuZHluYW1pY0FsbG9jPShmdW5jdGlvbigpe2Fib3J0KFwiY2Fubm90IGR5bmFtaWNhbGx5IGFsbG9jYXRlLCBzYnJrIG5vdyBoYXMgY29udHJvbFwiKX0pfXZhciByZXQ9RFlOQU1JQ1RPUDtpZihieXRlcyE9MCl7dmFyIHN1Y2Nlc3M9c2VsZi5hbGxvYyhieXRlcyk7aWYoIXN1Y2Nlc3MpcmV0dXJuLTE+Pj4wfXJldHVybiByZXR9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyhkZXN0LHNyYyxudW0pe0hFQVBVOC5zZXQoSEVBUFU4LnN1YmFycmF5KHNyYyxzcmMrbnVtKSxkZXN0KTtyZXR1cm4gZGVzdH1Nb2R1bGVbXCJfbWVtY3B5XCJdPV9tZW1jcHk7TW9kdWxlW1wiX21lbW1vdmVcIl09X21lbW1vdmU7dmFyIF9lbXNjcmlwdGVuX2FzbV9jb25zdF9pbnQ9dHJ1ZTtmdW5jdGlvbiBfdGltZShwdHIpe3ZhciByZXQ9RGF0ZS5ub3coKS8xZTN8MDtpZihwdHIpe0hFQVAzMltwdHI+PjJdPXJldH1yZXR1cm4gcmV0fWZ1bmN0aW9uIF9wdGhyZWFkX3NlbGYoKXtyZXR1cm4gMH1mdW5jdGlvbiBfX19zeXNjYWxsMTQwKHdoaWNoLHZhcmFyZ3Mpe1NZU0NBTExTLnZhcmFyZ3M9dmFyYXJnczt0cnl7dmFyIHN0cmVhbT1TWVNDQUxMUy5nZXRTdHJlYW1Gcm9tRkQoKSxvZmZzZXRfaGlnaD1TWVNDQUxMUy5nZXQoKSxvZmZzZXRfbG93PVNZU0NBTExTLmdldCgpLHJlc3VsdD1TWVNDQUxMUy5nZXQoKSx3aGVuY2U9U1lTQ0FMTFMuZ2V0KCk7dmFyIG9mZnNldD1vZmZzZXRfbG93O2Fzc2VydChvZmZzZXRfaGlnaD09PTApO0ZTLmxsc2VlayhzdHJlYW0sb2Zmc2V0LHdoZW5jZSk7SEVBUDMyW3Jlc3VsdD4+Ml09c3RyZWFtLnBvc2l0aW9uO2lmKHN0cmVhbS5nZXRkZW50cyYmb2Zmc2V0PT09MCYmd2hlbmNlPT09MClzdHJlYW0uZ2V0ZGVudHM9bnVsbDtyZXR1cm4gMH1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT1cInVuZGVmaW5lZFwifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4tZS5lcnJub319ZnVuY3Rpb24gX19fc3lzY2FsbDE0Nih3aGljaCx2YXJhcmdzKXtTWVNDQUxMUy52YXJhcmdzPXZhcmFyZ3M7dHJ5e3ZhciBzdHJlYW09U1lTQ0FMTFMuZ2V0U3RyZWFtRnJvbUZEKCksaW92PVNZU0NBTExTLmdldCgpLGlvdmNudD1TWVNDQUxMUy5nZXQoKTtyZXR1cm4gU1lTQ0FMTFMuZG9Xcml0ZXYoc3RyZWFtLGlvdixpb3ZjbnQpfWNhdGNoKGUpe2lmKHR5cGVvZiBGUz09PVwidW5kZWZpbmVkXCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybi1lLmVycm5vfX1mdW5jdGlvbiBfX19zeXNjYWxsNTQod2hpY2gsdmFyYXJncyl7U1lTQ0FMTFMudmFyYXJncz12YXJhcmdzO3RyeXt2YXIgc3RyZWFtPVNZU0NBTExTLmdldFN0cmVhbUZyb21GRCgpLG9wPVNZU0NBTExTLmdldCgpO3N3aXRjaChvcCl7Y2FzZSAyMTUwNTp7aWYoIXN0cmVhbS50dHkpcmV0dXJuLUVSUk5PX0NPREVTLkVOT1RUWTtyZXR1cm4gMH07Y2FzZSAyMTUwNjp7aWYoIXN0cmVhbS50dHkpcmV0dXJuLUVSUk5PX0NPREVTLkVOT1RUWTtyZXR1cm4gMH07Y2FzZSAyMTUxOTp7aWYoIXN0cmVhbS50dHkpcmV0dXJuLUVSUk5PX0NPREVTLkVOT1RUWTt2YXIgYXJncD1TWVNDQUxMUy5nZXQoKTtIRUFQMzJbYXJncD4+Ml09MDtyZXR1cm4gMH07Y2FzZSAyMTUyMDp7aWYoIXN0cmVhbS50dHkpcmV0dXJuLUVSUk5PX0NPREVTLkVOT1RUWTtyZXR1cm4tRVJSTk9fQ09ERVMuRUlOVkFMfTtjYXNlIDIxNTMxOnt2YXIgYXJncD1TWVNDQUxMUy5nZXQoKTtyZXR1cm4gRlMuaW9jdGwoc3RyZWFtLG9wLGFyZ3ApfTtkZWZhdWx0OmFib3J0KFwiYmFkIGlvY3RsIHN5c2NhbGwgXCIrb3ApfX1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT1cInVuZGVmaW5lZFwifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4tZS5lcnJub319RlMuc3RhdGljSW5pdCgpO19fQVRJTklUX18udW5zaGlmdCgoZnVuY3Rpb24oKXtpZighTW9kdWxlW1wibm9GU0luaXRcIl0mJiFGUy5pbml0LmluaXRpYWxpemVkKUZTLmluaXQoKX0pKTtfX0FUTUFJTl9fLnB1c2goKGZ1bmN0aW9uKCl7RlMuaWdub3JlUGVybWlzc2lvbnM9ZmFsc2V9KSk7X19BVEVYSVRfXy5wdXNoKChmdW5jdGlvbigpe0ZTLnF1aXQoKX0pKTtNb2R1bGVbXCJGU19jcmVhdGVGb2xkZXJcIl09RlMuY3JlYXRlRm9sZGVyO01vZHVsZVtcIkZTX2NyZWF0ZVBhdGhcIl09RlMuY3JlYXRlUGF0aDtNb2R1bGVbXCJGU19jcmVhdGVEYXRhRmlsZVwiXT1GUy5jcmVhdGVEYXRhRmlsZTtNb2R1bGVbXCJGU19jcmVhdGVQcmVsb2FkZWRGaWxlXCJdPUZTLmNyZWF0ZVByZWxvYWRlZEZpbGU7TW9kdWxlW1wiRlNfY3JlYXRlTGF6eUZpbGVcIl09RlMuY3JlYXRlTGF6eUZpbGU7TW9kdWxlW1wiRlNfY3JlYXRlTGlua1wiXT1GUy5jcmVhdGVMaW5rO01vZHVsZVtcIkZTX2NyZWF0ZURldmljZVwiXT1GUy5jcmVhdGVEZXZpY2U7TW9kdWxlW1wiRlNfdW5saW5rXCJdPUZTLnVubGluaztfX0FUSU5JVF9fLnVuc2hpZnQoKGZ1bmN0aW9uKCl7VFRZLmluaXQoKX0pKTtfX0FURVhJVF9fLnB1c2goKGZ1bmN0aW9uKCl7VFRZLnNodXRkb3duKCl9KSk7aWYoRU5WSVJPTk1FTlRfSVNfTk9ERSl7dmFyIGZzPXJlcXVpcmUoXCJmc1wiKTt2YXIgTk9ERUpTX1BBVEg9cmVxdWlyZShcInBhdGhcIik7Tk9ERUZTLnN0YXRpY0luaXQoKX1TVEFDS19CQVNFPVNUQUNLVE9QPVJ1bnRpbWUuYWxpZ25NZW1vcnkoU1RBVElDVE9QKTtzdGF0aWNTZWFsZWQ9dHJ1ZTtTVEFDS19NQVg9U1RBQ0tfQkFTRStUT1RBTF9TVEFDSztEWU5BTUlDX0JBU0U9RFlOQU1JQ1RPUD1SdW50aW1lLmFsaWduTWVtb3J5KFNUQUNLX01BWCk7YXNzZXJ0KERZTkFNSUNfQkFTRTxUT1RBTF9NRU1PUlksXCJUT1RBTF9NRU1PUlkgbm90IGJpZyBlbm91Z2ggZm9yIHN0YWNrXCIpO3ZhciBjdHR6X2k4PWFsbG9jYXRlKFs4LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDYsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNywwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwXSxcImk4XCIsQUxMT0NfRFlOQU1JQyk7ZnVuY3Rpb24gaW52b2tlX2koaW5kZXgpe3RyeXtyZXR1cm4gTW9kdWxlW1wiZHluQ2FsbF9pXCJdKGluZGV4KX1jYXRjaChlKXtpZih0eXBlb2YgZSE9PVwibnVtYmVyXCImJmUhPT1cImxvbmdqbXBcIil0aHJvdyBlO2FzbVtcInNldFRocmV3XCJdKDEsMCl9fWZ1bmN0aW9uIGpzQ2FsbF9pKGluZGV4KXtyZXR1cm4gUnVudGltZS5mdW5jdGlvblBvaW50ZXJzW2luZGV4XSgpfWZ1bmN0aW9uIGludm9rZV9paShpbmRleCxhMSl7dHJ5e3JldHVybiBNb2R1bGVbXCJkeW5DYWxsX2lpXCJdKGluZGV4LGExKX1jYXRjaChlKXtpZih0eXBlb2YgZSE9PVwibnVtYmVyXCImJmUhPT1cImxvbmdqbXBcIil0aHJvdyBlO2FzbVtcInNldFRocmV3XCJdKDEsMCl9fWZ1bmN0aW9uIGpzQ2FsbF9paShpbmRleCxhMSl7cmV0dXJuIFJ1bnRpbWUuZnVuY3Rpb25Qb2ludGVyc1tpbmRleF0oYTEpfWZ1bmN0aW9uIGludm9rZV9paWlpKGluZGV4LGExLGEyLGEzKXt0cnl7cmV0dXJuIE1vZHVsZVtcImR5bkNhbGxfaWlpaVwiXShpbmRleCxhMSxhMixhMyl9Y2F0Y2goZSl7aWYodHlwZW9mIGUhPT1cIm51bWJlclwiJiZlIT09XCJsb25nam1wXCIpdGhyb3cgZTthc21bXCJzZXRUaHJld1wiXSgxLDApfX1mdW5jdGlvbiBqc0NhbGxfaWlpaShpbmRleCxhMSxhMixhMyl7cmV0dXJuIFJ1bnRpbWUuZnVuY3Rpb25Qb2ludGVyc1tpbmRleF0oYTEsYTIsYTMpfWZ1bmN0aW9uIGludm9rZV92aShpbmRleCxhMSl7dHJ5e01vZHVsZVtcImR5bkNhbGxfdmlcIl0oaW5kZXgsYTEpfWNhdGNoKGUpe2lmKHR5cGVvZiBlIT09XCJudW1iZXJcIiYmZSE9PVwibG9uZ2ptcFwiKXRocm93IGU7YXNtW1wic2V0VGhyZXdcIl0oMSwwKX19ZnVuY3Rpb24ganNDYWxsX3ZpKGluZGV4LGExKXtSdW50aW1lLmZ1bmN0aW9uUG9pbnRlcnNbaW5kZXhdKGExKX1Nb2R1bGUuYXNtR2xvYmFsQXJnPXtcIk1hdGhcIjpNYXRoLFwiSW50OEFycmF5XCI6SW50OEFycmF5LFwiSW50MTZBcnJheVwiOkludDE2QXJyYXksXCJJbnQzMkFycmF5XCI6SW50MzJBcnJheSxcIlVpbnQ4QXJyYXlcIjpVaW50OEFycmF5LFwiVWludDE2QXJyYXlcIjpVaW50MTZBcnJheSxcIlVpbnQzMkFycmF5XCI6VWludDMyQXJyYXksXCJGbG9hdDMyQXJyYXlcIjpGbG9hdDMyQXJyYXksXCJGbG9hdDY0QXJyYXlcIjpGbG9hdDY0QXJyYXksXCJOYU5cIjpOYU4sXCJJbmZpbml0eVwiOkluZmluaXR5fTtNb2R1bGUuYXNtTGlicmFyeUFyZz17XCJhYm9ydFwiOmFib3J0LFwiYXNzZXJ0XCI6YXNzZXJ0LFwiaW52b2tlX2lcIjppbnZva2VfaSxcImpzQ2FsbF9pXCI6anNDYWxsX2ksXCJpbnZva2VfaWlcIjppbnZva2VfaWksXCJqc0NhbGxfaWlcIjpqc0NhbGxfaWksXCJpbnZva2VfaWlpaVwiOmludm9rZV9paWlpLFwianNDYWxsX2lpaWlcIjpqc0NhbGxfaWlpaSxcImludm9rZV92aVwiOmludm9rZV92aSxcImpzQ2FsbF92aVwiOmpzQ2FsbF92aSxcIl9wdGhyZWFkX2NsZWFudXBfcG9wXCI6X3B0aHJlYWRfY2xlYW51cF9wb3AsXCJfX19sb2NrXCI6X19fbG9jayxcIl9zeXNjb25mXCI6X3N5c2NvbmYsXCJfcHRocmVhZF9zZWxmXCI6X3B0aHJlYWRfc2VsZixcIl9fX3N5c2NhbGw2XCI6X19fc3lzY2FsbDYsXCJfX19zZXRFcnJOb1wiOl9fX3NldEVyck5vLFwiX2Fib3J0XCI6X2Fib3J0LFwiX3NicmtcIjpfc2JyayxcIl90aW1lXCI6X3RpbWUsXCJfcHRocmVhZF9jbGVhbnVwX3B1c2hcIjpfcHRocmVhZF9jbGVhbnVwX3B1c2gsXCJfZW1zY3JpcHRlbl9tZW1jcHlfYmlnXCI6X2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyxcIl9fX3N5c2NhbGw1NFwiOl9fX3N5c2NhbGw1NCxcIl9fX3VubG9ja1wiOl9fX3VubG9jayxcIl9fX3N5c2NhbGwxNDBcIjpfX19zeXNjYWxsMTQwLFwiX19fYXNzZXJ0X2ZhaWxcIjpfX19hc3NlcnRfZmFpbCxcIl9fX3N5c2NhbGwxNDZcIjpfX19zeXNjYWxsMTQ2LFwiX2Vtc2NyaXB0ZW5fYXNtX2NvbnN0XzBcIjpfZW1zY3JpcHRlbl9hc21fY29uc3RfMCxcIlNUQUNLVE9QXCI6U1RBQ0tUT1AsXCJTVEFDS19NQVhcIjpTVEFDS19NQVgsXCJ0ZW1wRG91YmxlUHRyXCI6dGVtcERvdWJsZVB0cixcIkFCT1JUXCI6QUJPUlQsXCJjdHR6X2k4XCI6Y3R0el9pOH07Ly8gRU1TQ1JJUFRFTl9TVEFSVF9BU01cbnZhciBhc209KGZ1bmN0aW9uKGdsb2JhbCxlbnYsYnVmZmVyKSB7XG5cInVzZSBhc21cIjt2YXIgYT1uZXcgZ2xvYmFsLkludDhBcnJheShidWZmZXIpO3ZhciBiPW5ldyBnbG9iYWwuSW50MTZBcnJheShidWZmZXIpO3ZhciBjPW5ldyBnbG9iYWwuSW50MzJBcnJheShidWZmZXIpO3ZhciBkPW5ldyBnbG9iYWwuVWludDhBcnJheShidWZmZXIpO3ZhciBlPW5ldyBnbG9iYWwuVWludDE2QXJyYXkoYnVmZmVyKTt2YXIgZj1uZXcgZ2xvYmFsLlVpbnQzMkFycmF5KGJ1ZmZlcik7dmFyIGc9bmV3IGdsb2JhbC5GbG9hdDMyQXJyYXkoYnVmZmVyKTt2YXIgaD1uZXcgZ2xvYmFsLkZsb2F0NjRBcnJheShidWZmZXIpO3ZhciBpPWVudi5TVEFDS1RPUHwwO3ZhciBqPWVudi5TVEFDS19NQVh8MDt2YXIgaz1lbnYudGVtcERvdWJsZVB0cnwwO3ZhciBsPWVudi5BQk9SVHwwO3ZhciBtPWVudi5jdHR6X2k4fDA7dmFyIG49MDt2YXIgbz0wO3ZhciBwPTA7dmFyIHE9MDt2YXIgcj1nbG9iYWwuTmFOLHM9Z2xvYmFsLkluZmluaXR5O3ZhciB0PTAsdT0wLHY9MCx3PTAseD0wLjAseT0wLHo9MCxBPTAsQj0wLjA7dmFyIEM9MDt2YXIgRD0wO3ZhciBFPTA7dmFyIEY9MDt2YXIgRz0wO3ZhciBIPTA7dmFyIEk9MDt2YXIgSj0wO3ZhciBLPTA7dmFyIEw9MDt2YXIgTT1nbG9iYWwuTWF0aC5mbG9vcjt2YXIgTj1nbG9iYWwuTWF0aC5hYnM7dmFyIE89Z2xvYmFsLk1hdGguc3FydDt2YXIgUD1nbG9iYWwuTWF0aC5wb3c7dmFyIFE9Z2xvYmFsLk1hdGguY29zO3ZhciBSPWdsb2JhbC5NYXRoLnNpbjt2YXIgUz1nbG9iYWwuTWF0aC50YW47dmFyIFQ9Z2xvYmFsLk1hdGguYWNvczt2YXIgVT1nbG9iYWwuTWF0aC5hc2luO3ZhciBWPWdsb2JhbC5NYXRoLmF0YW47dmFyIFc9Z2xvYmFsLk1hdGguYXRhbjI7dmFyIFg9Z2xvYmFsLk1hdGguZXhwO3ZhciBZPWdsb2JhbC5NYXRoLmxvZzt2YXIgWj1nbG9iYWwuTWF0aC5jZWlsO3ZhciBfPWdsb2JhbC5NYXRoLmltdWw7dmFyICQ9Z2xvYmFsLk1hdGgubWluO3ZhciBhYT1nbG9iYWwuTWF0aC5jbHozMjt2YXIgYmE9ZW52LmFib3J0O3ZhciBjYT1lbnYuYXNzZXJ0O3ZhciBkYT1lbnYuaW52b2tlX2k7dmFyIGVhPWVudi5qc0NhbGxfaTt2YXIgZmE9ZW52Lmludm9rZV9paTt2YXIgZ2E9ZW52LmpzQ2FsbF9paTt2YXIgaGE9ZW52Lmludm9rZV9paWlpO3ZhciBpYT1lbnYuanNDYWxsX2lpaWk7dmFyIGphPWVudi5pbnZva2Vfdmk7dmFyIGthPWVudi5qc0NhbGxfdmk7dmFyIGxhPWVudi5fcHRocmVhZF9jbGVhbnVwX3BvcDt2YXIgbWE9ZW52Ll9fX2xvY2s7dmFyIG5hPWVudi5fc3lzY29uZjt2YXIgb2E9ZW52Ll9wdGhyZWFkX3NlbGY7dmFyIHBhPWVudi5fX19zeXNjYWxsNjt2YXIgcWE9ZW52Ll9fX3NldEVyck5vO3ZhciByYT1lbnYuX2Fib3J0O3ZhciBzYT1lbnYuX3Nicms7dmFyIHRhPWVudi5fdGltZTt2YXIgdWE9ZW52Ll9wdGhyZWFkX2NsZWFudXBfcHVzaDt2YXIgdmE9ZW52Ll9lbXNjcmlwdGVuX21lbWNweV9iaWc7dmFyIHdhPWVudi5fX19zeXNjYWxsNTQ7dmFyIHhhPWVudi5fX191bmxvY2s7dmFyIHlhPWVudi5fX19zeXNjYWxsMTQwO3ZhciB6YT1lbnYuX19fYXNzZXJ0X2ZhaWw7dmFyIEFhPWVudi5fX19zeXNjYWxsMTQ2O3ZhciBCYT1lbnYuX2Vtc2NyaXB0ZW5fYXNtX2NvbnN0XzA7dmFyIENhPTAuMDtcbi8vIEVNU0NSSVBURU5fU1RBUlRfRlVOQ1NcbmZ1bmN0aW9uIE5jKGIsZSl7Yj1ifDA7ZT1lfDA7dmFyIGY9MCxnPTAsaD0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wLHM9MCx0PTAsdT0wLHY9MCx3PTAseD0wLHk9MCx6PTAsQT0wLEI9MCxEPTAsRT0wLEY9MCxHPTAsSD0wLEk9MCxKPTAsSz0wLEw9MCxNPTAsTj0wLE89MCxQPTAsUT0wLFI9MCxTPTAsVD0wO1I9aTtQPWk9aSs2MyYtNjQ7aT1pKzMyMHwwO1E9UCsyODB8MDtrPVArMjQwfDA7aj1QKzIwMHwwO3E9UCsxNjB8MDtsPVArMTIwfDA7bT1QKzgwfDA7bz1QKzQwfDA7Tz1iKzQwfDA7VD1kW2U+PjBdfDA7TT1IZChkW2UrMT4+MF18MHwwLDAsOCl8MDtKPUM7cj1IZChkW2UrMj4+MF18MHwwLDAsMTYpfDA7Sj1KfEM7cz1IZChkW2UrMz4+MF18MHwwLDAsMjQpfDA7Sj1KfEM7ST1hW2UrNj4+MF18MDtMPWRbZSs0Pj4wXXwwO3A9SGQoZFtlKzU+PjBdfDB8MCwwLDgpfDA7Sz1DO0k9SGQoSSYyNTV8MCwwLDE2KXwwO0s9SGQocHxMfEl8MCxLfEN8MCw2KXwwO0k9QztMPWFbZSs5Pj4wXXwwO3A9ZFtlKzc+PjBdfDA7Zj1IZChkW2UrOD4+MF18MHwwLDAsOCl8MDt3PUM7TD1IZChMJjI1NXwwLDAsMTYpfDA7dz1IZChmfHB8THwwLHd8Q3wwLDUpfDA7TD1DO3A9YVtlKzEyPj4wXXwwO2Y9ZFtlKzEwPj4wXXwwO3k9SGQoZFtlKzExPj4wXXwwfDAsMCw4KXwwO249QztwPUhkKHAmMjU1fDAsMCwxNil8MDtuPUhkKHl8ZnxwfDAsbnxDfDAsMyl8MDtwPUM7Zj1hW2UrMTU+PjBdfDA7eT1kW2UrMTM+PjBdfDA7Rj1IZChkW2UrMTQ+PjBdfDB8MCwwLDgpfDA7QT1DO2Y9SGQoZiYyNTV8MCwwLDE2KXwwO0E9SGQoRnx5fGZ8MCxBfEN8MCwyKXwwO2Y9Qzt5PWRbZSsxNj4+MF18MDtGPUhkKGRbZSsxNz4+MF18MHwwLDAsOCl8MDt1PUM7aD1IZChkW2UrMTg+PjBdfDB8MCwwLDE2KXwwO3U9dXxDO3Q9SGQoZFtlKzE5Pj4wXXwwfDAsMCwyNCl8MDt0PUZ8eXxofHQ7dT11fEM7aD1hW2UrMjI+PjBdfDA7eT1kW2UrMjA+PjBdfDA7Rj1IZChkW2UrMjE+PjBdfDB8MCwwLDgpfDA7RT1DO2g9SGQoaCYyNTV8MCwwLDE2KXwwO0U9SGQoRnx5fGh8MCxFfEN8MCw3KXwwO2g9Qzt5PWFbZSsyNT4+MF18MDtGPWRbZSsyMz4+MF18MDtOPUhkKGRbZSsyND4+MF18MHwwLDAsOCl8MDt4PUM7eT1IZCh5JjI1NXwwLDAsMTYpfDA7eD1IZChOfEZ8eXwwLHh8Q3wwLDUpfDA7eT1DO0Y9YVtlKzI4Pj4wXXwwO049ZFtlKzI2Pj4wXXwwO2c9SGQoZFtlKzI3Pj4wXXwwfDAsMCw4KXwwO0c9QztGPUhkKEYmMjU1fDAsMCwxNil8MDtHPUhkKGd8TnxGfDAsR3xDfDAsNCl8MDtGPUM7Tj1lKzMxfDA7Zz1hW04+PjBdfDA7RD1kW2UrMjk+PjBdfDA7dj1IZChkW2UrMzA+PjBdfDB8MCwwLDgpfDA7Qj1DO2c9SGQoZyYyNTV8MCwwLDE2KXwwO0I9SGQodnxEfGd8MCxCfEN8MCwyKXwwO0I9QiYzMzU1NDQyODtnPURkKEJ8MCwwLDE2Nzc3MjE2LDApfDA7Zz1HZChnfDAsQ3wwLDI1KXwwO0Q9Qzt2PUNkKDAsMCxnfDAsRHwwKXwwO0o9RGQodiYxOXwwLDAsTXxUfHJ8c3wwLEp8MCl8MDtzPUM7RD1IZChnfDAsRHwwLDI1KXwwO2c9QztyPURkKEt8MCxJfDAsMTY3NzcyMTYsMCl8MDtyPUdkKHJ8MCxDfDAsMjUpfDA7VD1DO0w9RGQod3wwLEx8MCxyfDAsVHwwKXwwO3c9QztUPUhkKHJ8MCxUfDAsMjUpfDA7VD1DZChLfDAsSXwwLFR8MCxDfDApfDA7ST1DO0s9RGQobnwwLHB8MCwxNjc3NzIxNiwwKXwwO0s9R2QoS3wwLEN8MCwyNSl8MDtyPUM7Zj1EZChBfDAsZnwwLEt8MCxyfDApfDA7QT1DO3I9SGQoS3wwLHJ8MCwyNSl8MDtLPUM7TT1EZCh0fDAsdXwwLDE2Nzc3MjE2LDApfDA7TT1HZChNfDAsQ3wwLDI1KXwwO3Y9QztoPURkKEV8MCxofDAsTXwwLHZ8MCl8MDtFPUM7dj1IZChNfDAsdnwwLDI1KXwwO009QztlPURkKHh8MCx5fDAsMTY3NzcyMTYsMCl8MDtlPUdkKGV8MCxDfDAsMjUpfDA7ej1DO0Y9RGQoR3wwLEZ8MCxlfDAsenwwKXwwO0c9Qzt6PUhkKGV8MCx6fDAsMjUpfDA7ZT1DO1M9RGQoSnwwLHN8MCwzMzU1NDQzMiwwKXwwO1M9RWQoU3wwLEN8MCwyNil8MDtIPUM7ST1EZChUfDAsSXwwLFN8MCxIfDApfDA7SD1IZChTfDAsSHwwLDI2KXwwO0g9Q2QoSnwwLHN8MCxIfDAsQ3wwKXwwO3M9RGQoTHwwLHd8MCwzMzU1NDQzMiwwKXwwO3M9RWQoc3wwLEN8MCwyNil8MDtKPUM7cD1EZChzfDAsSnwwLG58MCxwfDApfDA7Sz1DZChwfDAsQ3wwLHJ8MCxLfDApfDA7Sj1IZChzfDAsSnwwLDI2KXwwO0o9Q2QoTHwwLHd8MCxKfDAsQ3wwKXwwO3c9RGQoZnwwLEF8MCwzMzU1NDQzMiwwKXwwO3c9RWQod3wwLEN8MCwyNil8MDtMPUM7dT1EZCh3fDAsTHwwLHR8MCx1fDApfDA7TT1DZCh1fDAsQ3wwLHZ8MCxNfDApfDA7TD1IZCh3fDAsTHwwLDI2KXwwO0w9Q2QoZnwwLEF8MCxMfDAsQ3wwKXwwO0E9RGQoaHwwLEV8MCwzMzU1NDQzMiwwKXwwO0E9RWQoQXwwLEN8MCwyNil8MDtmPUM7eT1EZChBfDAsZnwwLHh8MCx5fDApfDA7ZT1DZCh5fDAsQ3wwLHp8MCxlfDApfDA7Zj1IZChBfDAsZnwwLDI2KXwwO2Y9Q2QoaHwwLEV8MCxmfDAsQ3wwKXwwO0U9RGQoRnwwLEd8MCwzMzU1NDQzMiwwKXwwO0U9RWQoRXwwLEN8MCwyNil8MDtoPUM7Qj1EZChCfDAsMCxFfDAsaHwwKXwwO2c9Q2QoQnwwLEN8MCxEfDAsZ3wwKXwwO2g9SGQoRXwwLGh8MCwyNil8MDtoPUNkKEZ8MCxHfDAsaHwwLEN8MCl8MDtjW08+PjJdPUg7Y1tiKzQ0Pj4yXT1JO2NbYis0OD4+Ml09SjtjW2IrNTI+PjJdPUs7Y1tiKzU2Pj4yXT1MO2NbYis2MD4+Ml09TTtjW2IrNjQ+PjJdPWY7Y1tiKzY4Pj4yXT1lO2NbYis3Mj4+Ml09aDtjW2IrNzY+PjJdPWc7Zz1iKzgwfDA7Y1tnPj4yXT0xO2g9Yis4NHwwO2U9aDtmPWUrMzZ8MDtkb3tjW2U+PjJdPTA7ZT1lKzR8MH13aGlsZSgoZXwwKTwoZnwwKSk7S2MocSxPKTtKYyhsLHEsMTA2NCk7Zj1xKzR8MDtuPXErOHwwO3A9cSsxMnwwO3I9cSsxNnwwO3M9cSsyMHwwO3Y9cSsyNHwwO3g9cSsyOHwwO3o9cSszMnwwO0I9cSszNnwwO2c9Y1tnPj4yXXwwO3Q9Y1toPj4yXXwwO3c9Y1tiKzg4Pj4yXXwwO0E9Y1tiKzkyPj4yXXwwO0U9Y1tiKzk2Pj4yXXwwO0c9Y1tiKzEwMD4+Ml18MDtJPWNbYisxMDQ+PjJdfDA7Sz1jW2IrMTA4Pj4yXXwwO009Y1tiKzExMj4+Ml18MDtUPWNbYisxMTY+PjJdfDA7ZT0oY1tmPj4yXXwwKS10fDA7Uz0oY1tuPj4yXXwwKS13fDA7TD0oY1twPj4yXXwwKS1BfDA7Sj0oY1tyPj4yXXwwKS1FfDA7SD0oY1tzPj4yXXwwKS1HfDA7Rj0oY1t2Pj4yXXwwKS1JfDA7RD0oY1t4Pj4yXXwwKS1LfDA7eT0oY1t6Pj4yXXwwKS1NfDA7dT0oY1tCPj4yXXwwKS1UfDA7Y1txPj4yXT0oY1txPj4yXXwwKS1nO2NbZj4+Ml09ZTtjW24+PjJdPVM7Y1twPj4yXT1MO2Nbcj4+Ml09SjtjW3M+PjJdPUg7Y1t2Pj4yXT1GO2NbeD4+Ml09RDtjW3o+PjJdPXk7Y1tCPj4yXT11O3U9bCs0fDA7eT1sKzh8MDtEPWwrMTJ8MDtGPWwrMTZ8MDtIPWwrMjB8MDtKPWwrMjR8MDtMPWwrMjh8MDtTPWwrMzJ8MDtlPWwrMzZ8MDt0PXQrKGNbdT4+Ml18MCl8MDt3PXcrKGNbeT4+Ml18MCl8MDtBPUErKGNbRD4+Ml18MCl8MDtFPUUrKGNbRj4+Ml18MCl8MDtHPUcrKGNbSD4+Ml18MCl8MDtJPUkrKGNbSj4+Ml18MCl8MDtLPUsrKGNbTD4+Ml18MCl8MDtNPU0rKGNbUz4+Ml18MCl8MDtUPVQrKGNbZT4+Ml18MCl8MDtjW2w+PjJdPWcrKGNbbD4+Ml18MCk7Y1t1Pj4yXT10O2NbeT4+Ml09dztjW0Q+PjJdPUE7Y1tGPj4yXT1FO2NbSD4+Ml09RztjW0o+PjJdPUk7Y1tMPj4yXT1LO2NbUz4+Ml09TTtjW2U+PjJdPVQ7S2MobSxsKTtKYyhtLG0sbCk7S2MoYixtKTtKYyhiLGIsbCk7SmMoYixiLHEpO0tjKFEsYik7S2MoayxRKTtLYyhrLGspO0pjKGssYixrKTtKYyhRLFEsayk7S2MoUSxRKTtKYyhRLGssUSk7S2MoayxRKTtLYyhrLGspO0tjKGssayk7S2MoayxrKTtLYyhrLGspO0pjKFEsayxRKTtLYyhrLFEpO0tjKGssayk7S2MoayxrKTtLYyhrLGspO0tjKGssayk7S2MoayxrKTtLYyhrLGspO0tjKGssayk7S2MoayxrKTtLYyhrLGspO0pjKGssayxRKTtLYyhqLGspO0tjKGosaik7S2MoaixqKTtLYyhqLGopO0tjKGosaik7S2MoaixqKTtLYyhqLGopO0tjKGosaik7S2MoaixqKTtLYyhqLGopO0tjKGosaik7S2MoaixqKTtLYyhqLGopO0tjKGosaik7S2MoaixqKTtLYyhqLGopO0tjKGosaik7S2MoaixqKTtLYyhqLGopO0tjKGosaik7SmMoayxqLGspO0tjKGssayk7S2MoayxrKTtLYyhrLGspO0tjKGssayk7S2MoayxrKTtLYyhrLGspO0tjKGssayk7S2MoayxrKTtLYyhrLGspO0tjKGssayk7SmMoUSxrLFEpO0tjKGssUSk7ZT0xO2Rve0tjKGssayk7ZT1lKzF8MH13aGlsZSgoZXwwKSE9NTApO0pjKGssayxRKTtLYyhqLGspO2U9MTtkb3tLYyhqLGopO2U9ZSsxfDB9d2hpbGUoKGV8MCkhPTEwMCk7SmMoayxqLGspO0tjKGssayk7ZT0xO2Rve0tjKGssayk7ZT1lKzF8MH13aGlsZSgoZXwwKSE9NTApO0pjKFEsayxRKTtLYyhRLFEpO0tjKFEsUSk7SmMoYixRLGIpO0pjKGIsYixtKTtKYyhiLGIscSk7S2MobyxiKTtKYyhvLG8sbCk7RT1jW28+PjJdfDA7Rj1jW28rND4+Ml18MDtHPWNbbys4Pj4yXXwwO0g9Y1tvKzEyPj4yXXwwO0k9Y1tvKzE2Pj4yXXwwO0o9Y1tvKzIwPj4yXXwwO0s9Y1tvKzI0Pj4yXXwwO0w9Y1tvKzI4Pj4yXXwwO009Y1tvKzMyPj4yXXwwO0Q9Y1tvKzM2Pj4yXXwwO0E9Y1txPj4yXXwwO3k9Y1tmPj4yXXwwO3c9Y1tuPj4yXXwwO3U9Y1twPj4yXXwwO3Q9Y1tyPj4yXXwwO3M9Y1tzPj4yXXwwO3I9Y1t2Pj4yXXwwO3E9Y1t4Pj4yXXwwO3A9Y1t6Pj4yXXwwO2U9Y1tCPj4yXXwwO2NbUD4+Ml09RS1BO2Y9UCs0fDA7Y1tmPj4yXT1GLXk7Zz1QKzh8MDtjW2c+PjJdPUctdztoPVArMTJ8MDtjW2g+PjJdPUgtdTtqPVArMTZ8MDtjW2o+PjJdPUktdDtrPVArMjB8MDtjW2s+PjJdPUotcztsPVArMjR8MDtjW2w+PjJdPUstcjttPVArMjh8MDtjW20+PjJdPUwtcTtuPVArMzJ8MDtjW24+PjJdPU0tcDtvPVArMzZ8MDtjW28+PjJdPUQtZTtMYyhRLFApO2RvIGlmKFljKFEsMzMwMDQpfDApe2NbUD4+Ml09QStFO2NbZj4+Ml09eStGO2NbZz4+Ml09dytHO2NbaD4+Ml09dStIO2Nbaj4+Ml09dCtJO2Nbaz4+Ml09cytKO2NbbD4+Ml09citLO2NbbT4+Ml09cStMO2Nbbj4+Ml09cCtNO2Nbbz4+Ml09ZStEO0xjKFEsUCk7aWYoIShZYyhRLDMzMDA0KXwwKSl7SmMoYixiLDExMDQpO2JyZWFrfWVsc2V7VD0tMTtpPVI7cmV0dXJuIFR8MH19d2hpbGUoMCk7TGMoUSxiKTtpZigoKGRbUT4+MF18MCkmMXwwKT09KChkW04+PjBdfDApPj4+N3wwKSl7QT1iKzR8MDtEPWIrOHwwO0Y9YisxMnwwO0g9YisxNnwwO0o9YisyMHwwO0w9YisyNHwwO049YisyOHwwO1E9YiszMnwwO1Q9YiszNnwwO3o9MC0oY1tBPj4yXXwwKXwwO0I9MC0oY1tEPj4yXXwwKXwwO0U9MC0oY1tGPj4yXXwwKXwwO0c9MC0oY1tIPj4yXXwwKXwwO0k9MC0oY1tKPj4yXXwwKXwwO0s9MC0oY1tMPj4yXXwwKXwwO009MC0oY1tOPj4yXXwwKXwwO1A9MC0oY1tRPj4yXXwwKXwwO1M9MC0oY1tUPj4yXXwwKXwwO2NbYj4+Ml09MC0oY1tiPj4yXXwwKTtjW0E+PjJdPXo7Y1tEPj4yXT1CO2NbRj4+Ml09RTtjW0g+PjJdPUc7Y1tKPj4yXT1JO2NbTD4+Ml09SztjW04+PjJdPU07Y1tRPj4yXT1QO2NbVD4+Ml09U31KYyhiKzEyMHwwLGIsTyk7VD0wO2k9UjtyZXR1cm4gVHwwfWZ1bmN0aW9uIE9jKGEsYixkKXthPWF8MDtiPWJ8MDtkPWR8MDt2YXIgZT0wLGY9MCxnPTAsaD0wLGk9MCxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTAsdD0wLHU9MCx2PTAsdz0wLHg9MCx5PTAsej0wLEE9MCxCPTAsQz0wLEQ9MCxFPTAsRj0wLEc9MCxIPTAsST0wLEo9MCxLPTAsTD0wLE09MCxOPTAsTz0wLFA9MCxRPTAsUj0wLFM9MCxUPTAsVT0wLFY9MCxXPTAsWD0wLFk9MCxaPTAsXz0wLCQ9MCxhYT0wLGJhPTAsY2E9MCxkYT0wLGVhPTAsZmE9MCxnYT0wLGhhPTA7Vj1iKzQwfDA7aj1iKzQ0fDA7bT1iKzQ4fDA7cD1iKzUyfDA7cz1iKzU2fDA7dj1iKzYwfDA7eT1iKzY0fDA7Qj1iKzY4fDA7RT1iKzcyfDA7Qz1iKzc2fDA7Uz1iKzR8MDtQPWIrOHwwO2U9YisxMnwwO2w9YisxNnwwO249YisyMHwwO3U9YisyNHwwO3c9YisyOHwwO0Q9YiszMnwwO089YiszNnwwO2dhPShjW1M+PjJdfDApKyhjW2o+PjJdfDApfDA7ZmE9KGNbUD4+Ml18MCkrKGNbbT4+Ml18MCl8MDtlYT0oY1tlPj4yXXwwKSsoY1twPj4yXXwwKXwwO2RhPShjW2w+PjJdfDApKyhjW3M+PjJdfDApfDA7Y2E9KGNbbj4+Ml18MCkrKGNbdj4+Ml18MCl8MDtiYT0oY1t1Pj4yXXwwKSsoY1t5Pj4yXXwwKXwwO2FhPShjW3c+PjJdfDApKyhjW0I+PjJdfDApfDA7JD0oY1tEPj4yXXwwKSsoY1tFPj4yXXwwKXwwO1k9KGNbTz4+Ml18MCkrKGNbQz4+Ml18MCl8MDtjW2E+PjJdPShjW2I+PjJdfDApKyhjW1Y+PjJdfDApO2hhPWErNHwwO2NbaGE+PjJdPWdhO2dhPWErOHwwO2NbZ2E+PjJdPWZhO2ZhPWErMTJ8MDtjW2ZhPj4yXT1lYTtlYT1hKzE2fDA7Y1tlYT4+Ml09ZGE7ZGE9YSsyMHwwO2NbZGE+PjJdPWNhO2NhPWErMjR8MDtjW2NhPj4yXT1iYTtiYT1hKzI4fDA7Y1tiYT4+Ml09YWE7YWE9YSszMnwwO2NbYWE+PjJdPSQ7JD1hKzM2fDA7Y1skPj4yXT1ZO1k9YSs0MHwwO1M9KGNbaj4+Ml18MCktKGNbUz4+Ml18MCl8MDtQPShjW20+PjJdfDApLShjW1A+PjJdfDApfDA7ZT0oY1twPj4yXXwwKS0oY1tlPj4yXXwwKXwwO2w9KGNbcz4+Ml18MCktKGNbbD4+Ml18MCl8MDtuPShjW3Y+PjJdfDApLShjW24+PjJdfDApfDA7dT0oY1t5Pj4yXXwwKS0oY1t1Pj4yXXwwKXwwO3c9KGNbQj4+Ml18MCktKGNbdz4+Ml18MCl8MDtEPShjW0U+PjJdfDApLShjW0Q+PjJdfDApfDA7Tz0oY1tDPj4yXXwwKS0oY1tPPj4yXXwwKXwwO2NbWT4+Ml09KGNbVj4+Ml18MCktKGNbYj4+Ml18MCk7Vj1hKzQ0fDA7Y1tWPj4yXT1TO1M9YSs0OHwwO2NbUz4+Ml09UDtQPWErNTJ8MDtjW1A+PjJdPWU7ZT1hKzU2fDA7Y1tlPj4yXT1sO2w9YSs2MHwwO2NbbD4+Ml09bjtuPWErNjR8MDtjW24+PjJdPXU7dT1hKzY4fDA7Y1t1Pj4yXT13O3c9YSs3MnwwO2Nbdz4+Ml09RDtEPWErNzZ8MDtjW0Q+PjJdPU87Tz1hKzgwfDA7SmMoTyxhLGQpO0pjKFksWSxkKzQwfDApO0M9YSsxMjB8MDtKYyhDLGQrODB8MCxiKzEyMHwwKTtFPWNbYis4MD4+Ml08PDE7Qj1jW2IrODQ+PjJdPDwxO3k9Y1tiKzg4Pj4yXTw8MTt2PWNbYis5Mj4+Ml08PDE7cz1jW2IrOTY+PjJdPDwxO3A9Y1tiKzEwMD4+Ml08PDE7bT1jW2IrMTA0Pj4yXTw8MTtqPWNbYisxMDg+PjJdPDwxO2c9Y1tiKzExMj4+Ml08PDE7Yj1jW2IrMTE2Pj4yXTw8MTtaPWNbTz4+Ml18MDtOPWErODR8MDtXPWNbTj4+Ml18MDtNPWErODh8MDtUPWNbTT4+Ml18MDtMPWErOTJ8MDtRPWNbTD4+Ml18MDtLPWErOTZ8MDtmPWNbSz4+Ml18MDtKPWErMTAwfDA7aD1jW0o+PjJdfDA7ST1hKzEwNHwwO289Y1tJPj4yXXwwO0g9YSsxMDh8MDtxPWNbSD4+Ml18MDtHPWErMTEyfDA7eD1jW0c+PjJdfDA7Rj1hKzExNnwwO3o9Y1tGPj4yXXwwO189Y1tZPj4yXXwwO1g9Y1tWPj4yXXwwO1U9Y1tTPj4yXXwwO1I9Y1tQPj4yXXwwO2Q9Y1tlPj4yXXwwO2k9Y1tsPj4yXXwwO2s9Y1tuPj4yXXwwO3I9Y1t1Pj4yXXwwO3Q9Y1t3Pj4yXXwwO0E9Y1tEPj4yXXwwO2NbYT4+Ml09Wi1fO2NbaGE+PjJdPVctWDtjW2dhPj4yXT1ULVU7Y1tmYT4+Ml09US1SO2NbZWE+PjJdPWYtZDtjW2RhPj4yXT1oLWk7Y1tjYT4+Ml09by1rO2NbYmE+PjJdPXEtcjtjW2FhPj4yXT14LXQ7Y1skPj4yXT16LUE7Y1tZPj4yXT1fK1o7Y1tWPj4yXT1YK1c7Y1tTPj4yXT1VK1Q7Y1tQPj4yXT1SK1E7Y1tlPj4yXT1kK2Y7Y1tsPj4yXT1pK2g7Y1tuPj4yXT1rK287Y1t1Pj4yXT1yK3E7Y1t3Pj4yXT10K3g7Y1tEPj4yXT1BK3o7RD1jW0M+PjJdfDA7ej1hKzEyNHwwO0E9Y1t6Pj4yXXwwO3c9YSsxMjh8MDt4PWNbdz4+Ml18MDt0PWErMTMyfDA7dT1jW3Q+PjJdfDA7cT1hKzEzNnwwO3I9Y1txPj4yXXwwO249YSsxNDB8MDtvPWNbbj4+Ml18MDtrPWErMTQ0fDA7bD1jW2s+PjJdfDA7aD1hKzE0OHwwO2k9Y1toPj4yXXwwO2U9YSsxNTJ8MDtmPWNbZT4+Ml18MDthPWErMTU2fDA7ZD1jW2E+PjJdfDA7Y1tPPj4yXT1EK0U7Y1tOPj4yXT1BK0I7Y1tNPj4yXT14K3k7Y1tMPj4yXT11K3Y7Y1tLPj4yXT1yK3M7Y1tKPj4yXT1vK3A7Y1tJPj4yXT1sK207Y1tIPj4yXT1pK2o7Y1tHPj4yXT1mK2c7Y1tGPj4yXT1kK2I7Y1tDPj4yXT1FLUQ7Y1t6Pj4yXT1CLUE7Y1t3Pj4yXT15LXg7Y1t0Pj4yXT12LXU7Y1txPj4yXT1zLXI7Y1tuPj4yXT1wLW87Y1trPj4yXT1tLWw7Y1toPj4yXT1qLWk7Y1tlPj4yXT1nLWY7Y1thPj4yXT1iLWQ7cmV0dXJufWZ1bmN0aW9uIFBjKGEsYil7YT1hfDA7Yj1ifDA7dmFyIGQ9MCxlPTAsZj0wLGc9MCxoPTAsaj0wLGs9MCxsPTAsbT0wLG49MCxvPTAscD0wLHE9MCxyPTAscz0wLHQ9MCx1PTAsdj0wLHc9MCx4PTAseT0wLHo9MCxBPTAsQj0wLEQ9MCxFPTAsRj0wLEc9MCxIPTAsST0wLEo9MCxLPTAsTD0wLE09MCxOPTAsTz0wLFA9MCxRPTAsUj0wLFM9MCxUPTAsVT0wLFY9MCxXPTAsWD0wLFk9MCxaPTAsXz0wLCQ9MCxhYT0wLGJhPTAsY2E9MCxkYT0wLGVhPTAsZmE9MCxnYT0wLGhhPTAsaWE9MCxqYT0wLGthPTAsbGE9MCxtYT0wLG5hPTAsb2E9MCxwYT0wLHFhPTAscmE9MCxzYT0wLHRhPTAsdWE9MCx2YT0wLHdhPTAseGE9MCx5YT0wLHphPTAsQWE9MCxCYT0wLENhPTAsRGE9MCxFYT0wLEZhPTAsR2E9MCxIYT0wLElhPTAsSmE9MCxLYT0wLExhPTAsTWE9MCxOYT0wLE9hPTAsUGE9MCxRYT0wLFJhPTAsU2E9MCxUYT0wLFVhPTAsVmE9MCxXYT0wLFhhPTAsWWE9MCxaYT0wLF9hPTAsJGE9MCxhYj0wLGJiPTAsY2I9MCxkYj0wLGViPTAsZmI9MCxnYj0wLGhiPTAsaWI9MCxqYj0wLGtiPTAsbGI9MCxtYj0wLG5iPTA7ZD1pO1M9aT1pKzYzJi02NDtpPWkrNDh8MDtLYyhhLGIpO2FhPWErODB8MDt0YT1iKzQwfDA7S2MoYWEsdGEpO3Y9YSsxMjB8MDtpYj1jW2IrODA+PjJdfDA7U2E9Y1tiKzg0Pj4yXXwwO3A9Y1tiKzg4Pj4yXXwwO3g9Y1tiKzkyPj4yXXwwO2Y9Y1tiKzk2Pj4yXXwwO2tiPWNbYisxMDA+PjJdfDA7Xz1jW2IrMTA0Pj4yXXwwO3dhPWNbYisxMDg+PjJdfDA7bD1jW2IrMTEyPj4yXXwwO3VhPWNbYisxMTY+PjJdfDA7dD1pYjw8MTtyYT1TYTw8MTtjYj1wPDwxO2c9eDw8MTtNYT1mPDwxO2U9a2I8PDE7dmE9Xzw8MTtuPXdhPDwxO2JiPWtiKjM4fDA7UWE9XyoxOXwwO1E9d2EqMzh8MDtIPWwqMTl8MDtuYj11YSozOHwwO2piPSgoaWJ8MCk8MCk8PDMxPj4zMTtqYj1PZChpYnwwLGpifDAsaWJ8MCxqYnwwKXwwO2liPUM7cWE9KCh0fDApPDApPDwzMT4+MzE7VGE9KChTYXwwKTwwKTw8MzE+PjMxOyRhPU9kKHR8MCxxYXwwLFNhfDAsVGF8MCl8MDtfYT1DO3I9KChwfDApPDApPDwzMT4+MzE7VmE9T2QocHwwLHJ8MCx0fDAscWF8MCl8MDtVYT1DO1I9KCh4fDApPDApPDwzMT4+MzE7TGE9T2QoeHwwLFJ8MCx0fDAscWF8MCl8MDtLYT1DO2thPSgoZnwwKTwwKTw8MzE+PjMxO3phPU9kKGZ8MCxrYXwwLHR8MCxxYXwwKXwwO3lhPUM7bGI9KChrYnwwKTwwKTw8MzE+PjMxO0s9T2Qoa2J8MCxsYnwwLHR8MCxxYXwwKXwwO009QztqPSgoX3wwKTwwKTw8MzE+PjMxO2s9T2QoX3wwLGp8MCx0fDAscWF8MCl8MDtGPUM7eGE9KCh3YXwwKTwwKTw8MzE+PjMxO3U9T2Qod2F8MCx4YXwwLHR8MCxxYXwwKXwwO1A9QzttYT0oKGx8MCk8MCk8PDMxPj4zMTtXPU9kKGx8MCxtYXwwLHR8MCxxYXwwKXwwO2ZhPUM7b2E9KCh1YXwwKTwwKTw8MzE+PjMxO3FhPU9kKHVhfDAsb2F8MCx0fDAscWF8MCl8MDt0PUM7cGE9KChyYXwwKTwwKTw8MzE+PjMxO1RhPU9kKHJhfDAscGF8MCxTYXwwLFRhfDApfDA7U2E9QztKYT1PZChyYXwwLHBhfDAscHwwLHJ8MCl8MDtJYT1DO2phPSgoZ3wwKTwwKTw8MzE+PjMxO0RhPU9kKGd8MCxqYXwwLHJhfDAscGF8MCl8MDtDYT1DO0I9T2QoZnwwLGthfDAscmF8MCxwYXwwKXwwO0U9QztsYT0oKGV8MCk8MCk8PDMxPj4zMTtoPU9kKGV8MCxsYXwwLHJhfDAscGF8MCl8MDtEPUM7cz1PZChffDAsanwwLHJhfDAscGF8MCl8MDtOPUM7JD0oKG58MCk8MCk8PDMxPj4zMTtWPU9kKG58MCwkfDAscmF8MCxwYXwwKXwwO2VhPUM7c2E9T2QobHwwLG1hfDAscmF8MCxwYXwwKXwwO25hPUM7bWI9KChuYnwwKTwwKTw8MzE+PjMxO3BhPU9kKG5ifDAsbWJ8MCxyYXwwLHBhfDApfDA7cmE9QztCYT1PZChwfDAscnwwLHB8MCxyfDApfDA7QWE9QztkYj0oKGNifDApPDApPDwzMT4+MzE7Rz1PZChjYnwwLGRifDAseHwwLFJ8MCl8MDtJPUM7eT1PZChmfDAsa2F8MCxjYnwwLGRifDApfDA7QT1DO289T2Qoa2J8MCxsYnwwLGNifDAsZGJ8MCl8MDtKPUM7dz1PZChffDAsanwwLGNifDAsZGJ8MCl8MDtiYT1DO1o9T2Qod2F8MCx4YXwwLGNifDAsZGJ8MCl8MDtpYT1DO209KChIfDApPDApPDwzMT4+MzE7ZGI9T2QoSHwwLG18MCxjYnwwLGRifDApfDA7Y2I9QztyPU9kKG5ifDAsbWJ8MCxwfDAscnwwKXwwO3A9QztSPU9kKGd8MCxqYXwwLHh8MCxSfDApfDA7eD1DO3E9T2QoZ3wwLGphfDAsZnwwLGthfDApfDA7TD1DO1U9T2QoZXwwLGxhfDAsZ3wwLGphfDApfDA7ZGE9QztYPU9kKF98MCxqfDAsZ3wwLGphfDApfDA7Z2E9QztPPSgoUXwwKTwwKTw8MzE+PjMxO2ZiPU9kKFF8MCxPfDAsZ3wwLGphfDApfDA7ZWI9QztYYT1PZChIfDAsbXwwLGd8MCxqYXwwKXwwO1dhPUM7amE9T2QobmJ8MCxtYnwwLGd8MCxqYXwwKXwwO2c9QztUPU9kKGZ8MCxrYXwwLGZ8MCxrYXwwKXwwO2NhPUM7TmE9KChNYXwwKTwwKTw8MzE+PjMxO1k9T2QoTWF8MCxOYXwwLGtifDAsbGJ8MCl8MDtoYT1DO1JhPSgoUWF8MCk8MCk8PDMxPj4zMTtoYj1PZChRYXwwLFJhfDAsTWF8MCxOYXwwKXwwO2diPUM7WmE9T2QoUXwwLE98MCxmfDAsa2F8MCl8MDtZYT1DO05hPU9kKEh8MCxtfDAsTWF8MCxOYXwwKXwwO01hPUM7a2E9T2QobmJ8MCxtYnwwLGZ8MCxrYXwwKXwwO2Y9QztsYj1PZChiYnwwLCgoYmJ8MCk8MCk8PDMxPj4zMXwwLGtifDAsbGJ8MCl8MDtrYj1DO2JiPU9kKFFhfDAsUmF8MCxlfDAsbGF8MCl8MDthYj1DO1BhPU9kKFF8MCxPfDAsZXwwLGxhfDApfDA7T2E9QztGYT1PZChIfDAsbXwwLGV8MCxsYXwwKXwwO0VhPUM7bGE9T2QobmJ8MCxtYnwwLGV8MCxsYXwwKXwwO2U9QztSYT1PZChRYXwwLFJhfDAsX3wwLGp8MCl8MDtRYT1DO0hhPU9kKFF8MCxPfDAsX3wwLGp8MCl8MDtHYT1DO3ZhPU9kKEh8MCxtfDAsdmF8MCwoKHZhfDApPDApPDwzMT4+MzF8MCl8MDt6PUM7aj1PZChuYnwwLG1ifDAsX3wwLGp8MCl8MDtfPUM7eGE9T2QoUXwwLE98MCx3YXwwLHhhfDApfDA7d2E9QztPPU9kKEh8MCxtfDAsbnwwLCR8MCl8MDtRPUM7JD1PZChuYnwwLG1ifDAsbnwwLCR8MCl8MDtuPUM7bT1PZChIfDAsbXwwLGx8MCxtYXwwKXwwO0g9QzttYT1PZChuYnwwLG1ifDAsbHwwLG1hfDApfDA7bD1DO29hPU9kKG5ifDAsbWJ8MCx1YXwwLG9hfDApfDA7dWE9QztpYj1EZChsYnwwLGtifDAsamJ8MCxpYnwwKXwwO2diPURkKGlifDAsQ3wwLGhifDAsZ2J8MCl8MDtlYj1EZChnYnwwLEN8MCxmYnwwLGVifDApfDA7Y2I9RGQoZWJ8MCxDfDAsZGJ8MCxjYnwwKXwwO3JhPURkKGNifDAsQ3wwLHBhfDAscmF8MCl8MDtwYT1DO19hPURkKGJifDAsYWJ8MCwkYXwwLF9hfDApfDA7WWE9RGQoX2F8MCxDfDAsWmF8MCxZYXwwKXwwO1dhPURkKFlhfDAsQ3wwLFhhfDAsV2F8MCl8MDtwPURkKFdhfDAsQ3wwLHJ8MCxwfDApfDA7cj1DO1NhPURkKFZhfDAsVWF8MCxUYXwwLFNhfDApfDA7UWE9RGQoU2F8MCxDfDAsUmF8MCxRYXwwKXwwO09hPURkKFFhfDAsQ3wwLFBhfDAsT2F8MCl8MDtNYT1EZChPYXwwLEN8MCxOYXwwLE1hfDApfDA7Zz1EZChNYXwwLEN8MCxqYXwwLGd8MCl8MDtqYT1DO0lhPURkKExhfDAsS2F8MCxKYXwwLElhfDApfDA7R2E9RGQoSWF8MCxDfDAsSGF8MCxHYXwwKXwwO0VhPURkKEdhfDAsQ3wwLEZhfDAsRWF8MCl8MDtmPURkKEVhfDAsQ3wwLGthfDAsZnwwKXwwO2thPUM7QWE9RGQoRGF8MCxDYXwwLEJhfDAsQWF8MCl8MDt5YT1EZChBYXwwLEN8MCx6YXwwLHlhfDApfDA7d2E9RGQoeWF8MCxDfDAseGF8MCx3YXwwKXwwO3o9RGQod2F8MCxDfDAsdmF8MCx6fDApfDA7ZT1EZCh6fDAsQ3wwLGxhfDAsZXwwKXwwO2xhPUM7ST1EZChCfDAsRXwwLEd8MCxJfDApfDA7TT1EZChJfDAsQ3wwLEt8MCxNfDApfDA7UT1EZChNfDAsQ3wwLE98MCxRfDApfDA7Xz1EZChRfDAsQ3wwLGp8MCxffDApfDA7aj1DO0E9RGQoUnwwLHh8MCx5fDAsQXwwKXwwO0Q9RGQoQXwwLEN8MCxofDAsRHwwKXwwO0Y9RGQoRHwwLEN8MCxrfDAsRnwwKXwwO0g9RGQoRnwwLEN8MCxtfDAsSHwwKXwwO249RGQoSHwwLEN8MCwkfDAsbnwwKXwwOyQ9QztMPURkKG98MCxKfDAscXwwLEx8MCl8MDtOPURkKEx8MCxDfDAsc3wwLE58MCl8MDtQPURkKE58MCxDfDAsdXwwLFB8MCl8MDtsPURkKFB8MCxDfDAsbWF8MCxsfDApfDA7bWE9QztjYT1EZCh3fDAsYmF8MCxUfDAsY2F8MCl8MDtkYT1EZChjYXwwLEN8MCxVfDAsZGF8MCl8MDtlYT1EZChkYXwwLEN8MCxWfDAsZWF8MCl8MDtmYT1EZChlYXwwLEN8MCxXfDAsZmF8MCl8MDt1YT1EZChmYXwwLEN8MCxvYXwwLHVhfDApfDA7b2E9QztoYT1EZChYfDAsZ2F8MCxZfDAsaGF8MCl8MDtpYT1EZChoYXwwLEN8MCxafDAsaWF8MCl8MDtuYT1EZChpYXwwLEN8MCxzYXwwLG5hfDApfDA7dD1EZChuYXwwLEN8MCxxYXwwLHR8MCl8MDtxYT1DO3BhPUhkKHJhfDAscGF8MCwxKXwwO3JhPUM7cj1IZChwfDAscnwwLDEpfDA7cD1DO2phPUhkKGd8MCxqYXwwLDEpfDA7Zz1DO2thPUhkKGZ8MCxrYXwwLDEpfDA7Zj1DO2xhPUhkKGV8MCxsYXwwLDEpfDA7ZT1DO2o9SGQoX3wwLGp8MCwxKXwwO189QzskPUhkKG58MCwkfDAsMSl8MDtuPUM7bWE9SGQobHwwLG1hfDAsMSl8MDtsPUM7b2E9SGQodWF8MCxvYXwwLDEpfDA7dWE9QztxYT1IZCh0fDAscWF8MCwxKXwwO3Q9QztuYT1EZChwYXwwLHJhfDAsMzM1NTQ0MzIsMCl8MDtuYT1FZChuYXwwLEN8MCwyNil8MDtzYT1DO3A9RGQobmF8MCxzYXwwLHJ8MCxwfDApfDA7cj1DO3NhPUhkKG5hfDAsc2F8MCwyNil8MDtzYT1DZChwYXwwLHJhfDAsc2F8MCxDfDApfDA7cmE9QztwYT1EZChsYXwwLGV8MCwzMzU1NDQzMiwwKXwwO3BhPUVkKHBhfDAsQ3wwLDI2KXwwO25hPUM7Xz1EZChwYXwwLG5hfDAsanwwLF98MCl8MDtqPUM7bmE9SGQocGF8MCxuYXwwLDI2KXwwO25hPUNkKGxhfDAsZXwwLG5hfDAsQ3wwKXwwO2U9QztsYT1EZChwfDAscnwwLDE2Nzc3MjE2LDApfDA7bGE9RWQobGF8MCxDfDAsMjUpfDA7cGE9QztnPURkKGxhfDAscGF8MCxqYXwwLGd8MCl8MDtqYT1DO3BhPUhkKGxhfDAscGF8MCwyNSl8MDtwYT1DZChwfDAscnwwLHBhfDAsQ3wwKXwwO3I9QztwPURkKF98MCxqfDAsMTY3NzcyMTYsMCl8MDtwPUVkKHB8MCxDfDAsMjUpfDA7bGE9QztuPURkKHB8MCxsYXwwLCR8MCxufDApfDA7JD1DO2xhPUhkKHB8MCxsYXwwLDI1KXwwO2xhPUNkKF98MCxqfDAsbGF8MCxDfDApfDA7aj1DO189RGQoZ3wwLGphfDAsMzM1NTQ0MzIsMCl8MDtfPUVkKF98MCxDfDAsMjYpfDA7cD1DO2Y9RGQoX3wwLHB8MCxrYXwwLGZ8MCl8MDtrYT1DO3A9SGQoX3wwLHB8MCwyNil8MDtwPUNkKGd8MCxqYXwwLHB8MCxDfDApfDA7amE9RGQobnwwLCR8MCwzMzU1NDQzMiwwKXwwO2phPUVkKGphfDAsQ3wwLDI2KXwwO2c9QztsPURkKGphfDAsZ3wwLG1hfDAsbHwwKXwwO21hPUM7Zz1IZChqYXwwLGd8MCwyNil8MDtnPUNkKG58MCwkfDAsZ3wwLEN8MCl8MDskPURkKGZ8MCxrYXwwLDE2Nzc3MjE2LDApfDA7JD1FZCgkfDAsQ3wwLDI1KXwwO249QztlPURkKCR8MCxufDAsbmF8MCxlfDApfDA7bmE9QztuPUhkKCR8MCxufDAsMjUpfDA7bj1DZChmfDAsa2F8MCxufDAsQ3wwKXwwO2thPURkKGx8MCxtYXwwLDE2Nzc3MjE2LDApfDA7a2E9RWQoa2F8MCxDfDAsMjUpfDA7Zj1DO3VhPURkKGthfDAsZnwwLG9hfDAsdWF8MCl8MDtvYT1DO2Y9SGQoa2F8MCxmfDAsMjUpfDA7Zj1DZChsfDAsbWF8MCxmfDAsQ3wwKXwwO21hPURkKGV8MCxuYXwwLDMzNTU0NDMyLDApfDA7bWE9RWQobWF8MCxDfDAsMjYpfDA7bD1DO2o9RGQobGF8MCxqfDAsbWF8MCxsfDApfDA7bD1IZChtYXwwLGx8MCwyNil8MDtsPUNkKGV8MCxuYXwwLGx8MCxDfDApfDA7bmE9RGQodWF8MCxvYXwwLDMzNTU0NDMyLDApfDA7bmE9RWQobmF8MCxDfDAsMjYpfDA7ZT1DO3Q9RGQobmF8MCxlfDAscWF8MCx0fDApfDA7cWE9QztlPUhkKG5hfDAsZXwwLDI2KXwwO2U9Q2QodWF8MCxvYXwwLGV8MCxDfDApfDA7b2E9RGQodHwwLHFhfDAsMTY3NzcyMTYsMCl8MDtvYT1FZChvYXwwLEN8MCwyNSl8MDt1YT1DO25hPU9kKG9hfDAsdWF8MCwxOSwwKXwwO3JhPURkKG5hfDAsQ3wwLHNhfDAscmF8MCl8MDtzYT1DO3VhPUhkKG9hfDAsdWF8MCwyNSl8MDt1YT1DZCh0fDAscWF8MCx1YXwwLEN8MCl8MDtxYT1EZChyYXwwLHNhfDAsMzM1NTQ0MzIsMCl8MDtxYT1FZChxYXwwLEN8MCwyNil8MDt0PUM7cj1EZChwYXwwLHJ8MCxxYXwwLHR8MCl8MDt0PUhkKHFhfDAsdHwwLDI2KXwwO3Q9Q2QocmF8MCxzYXwwLHR8MCxDfDApfDA7Y1t2Pj4yXT10O3Q9YSsxMjR8MDtjW3Q+PjJdPXI7cj1hKzEyOHwwO2Nbcj4+Ml09cDtwPWErMTMyfDA7Y1twPj4yXT1uO249YSsxMzZ8MDtjW24+PjJdPWw7bD1hKzE0MHwwO2NbbD4+Ml09ajtqPWErMTQ0fDA7Y1tqPj4yXT1nO2c9YSsxNDh8MDtjW2c+PjJdPWY7Zj1hKzE1MnwwO2NbZj4+Ml09ZTtlPWErMTU2fDA7Y1tlPj4yXT11YTt1YT1hKzQwfDA7c2E9KGNbYis0ND4+Ml18MCkrKGNbYis0Pj4yXXwwKXwwO3JhPShjW2IrNDg+PjJdfDApKyhjW2IrOD4+Ml18MCl8MDtxYT0oY1tiKzUyPj4yXXwwKSsoY1tiKzEyPj4yXXwwKXwwO3BhPShjW2IrNTY+PjJdfDApKyhjW2IrMTY+PjJdfDApfDA7b2E9KGNbYis2MD4+Ml18MCkrKGNbYisyMD4+Ml18MCl8MDtuYT0oY1tiKzY0Pj4yXXwwKSsoY1tiKzI0Pj4yXXwwKXwwO21hPShjW2IrNjg+PjJdfDApKyhjW2IrMjg+PjJdfDApfDA7bGE9KGNbYis3Mj4+Ml18MCkrKGNbYiszMj4+Ml18MCl8MDtrYT0oY1tiKzc2Pj4yXXwwKSsoY1tiKzM2Pj4yXXwwKXwwO2NbdWE+PjJdPShjW3RhPj4yXXwwKSsoY1tiPj4yXXwwKTt0YT1hKzQ0fDA7Y1t0YT4+Ml09c2E7c2E9YSs0OHwwO2Nbc2E+PjJdPXJhO3JhPWErNTJ8MDtjW3JhPj4yXT1xYTtxYT1hKzU2fDA7Y1txYT4+Ml09cGE7cGE9YSs2MHwwO2NbcGE+PjJdPW9hO29hPWErNjR8MDtjW29hPj4yXT1uYTtuYT1hKzY4fDA7Y1tuYT4+Ml09bWE7bWE9YSs3MnwwO2NbbWE+PjJdPWxhO2xhPWErNzZ8MDtjW2xhPj4yXT1rYTtLYyhTLHVhKTtrYT1jW2FhPj4yXXwwOyQ9YSs4NHwwO2phPWNbJD4+Ml18MDtfPWErODh8MDtpYT1jW18+PjJdfDA7Wj1hKzkyfDA7aGE9Y1taPj4yXXwwO1k9YSs5NnwwO2dhPWNbWT4+Ml18MDtYPWErMTAwfDA7ZmE9Y1tYPj4yXXwwO1c9YSsxMDR8MDtlYT1jW1c+PjJdfDA7Vj1hKzEwOHwwO2RhPWNbVj4+Ml18MDtVPWErMTEyfDA7Y2E9Y1tVPj4yXXwwO1Q9YSsxMTZ8MDtiYT1jW1Q+PjJdfDA7dz1jW2E+PjJdfDA7UD1hKzR8MDt1PWNbUD4+Ml18MDtOPWErOHwwO3M9Y1tOPj4yXXwwO0w9YSsxMnwwO3E9Y1tMPj4yXXwwO0o9YSsxNnwwO289Y1tKPj4yXXwwO0g9YSsyMHwwO209Y1tIPj4yXXwwO0Y9YSsyNHwwO2s9Y1tGPj4yXXwwO0Q9YSsyOHwwO2g9Y1tEPj4yXXwwO0E9YSszMnwwO2I9Y1tBPj4yXXwwO3k9YSszNnwwO3g9Y1t5Pj4yXXwwO1I9dytrYXwwO1E9dStqYXwwO089cytpYXwwO009cStoYXwwO0s9bytnYXwwO0k9bStmYXwwO0c9aytlYXwwO0U9aCtkYXwwO0I9YitjYXwwO3o9eCtiYXwwO2NbdWE+PjJdPVI7Y1t0YT4+Ml09UTtjW3NhPj4yXT1PO2NbcmE+PjJdPU07Y1txYT4+Ml09SztjW3BhPj4yXT1JO2Nbb2E+PjJdPUc7Y1tuYT4+Ml09RTtjW21hPj4yXT1CO2NbbGE+PjJdPXo7dz1rYS13fDA7dT1qYS11fDA7cz1pYS1zfDA7cT1oYS1xfDA7bz1nYS1vfDA7bT1mYS1tfDA7az1lYS1rfDA7aD1kYS1ofDA7Yj1jYS1ifDA7eD1iYS14fDA7Y1thYT4+Ml09dztjWyQ+PjJdPXU7Y1tfPj4yXT1zO2NbWj4+Ml09cTtjW1k+PjJdPW87Y1tYPj4yXT1tO2NbVz4+Ml09aztjW1Y+PjJdPWg7Y1tVPj4yXT1iO2NbVD4+Ml09eDtRPShjW1MrND4+Ml18MCktUXwwO089KGNbUys4Pj4yXXwwKS1PfDA7TT0oY1tTKzEyPj4yXXwwKS1NfDA7Sz0oY1tTKzE2Pj4yXXwwKS1LfDA7ST0oY1tTKzIwPj4yXXwwKS1JfDA7Rz0oY1tTKzI0Pj4yXXwwKS1HfDA7RT0oY1tTKzI4Pj4yXXwwKS1FfDA7Qj0oY1tTKzMyPj4yXXwwKS1CfDA7ej0oY1tTKzM2Pj4yXXwwKS16fDA7Y1thPj4yXT0oY1tTPj4yXXwwKS1SO2NbUD4+Ml09UTtjW04+PjJdPU87Y1tMPj4yXT1NO2NbSj4+Ml09SztjW0g+PjJdPUk7Y1tGPj4yXT1HO2NbRD4+Ml09RTtjW0E+PjJdPUI7Y1t5Pj4yXT16O3U9KGNbdD4+Ml18MCktdXwwO3M9KGNbcj4+Ml18MCktc3wwO3E9KGNbcD4+Ml18MCktcXwwO289KGNbbj4+Ml18MCktb3wwO209KGNbbD4+Ml18MCktbXwwO2s9KGNbaj4+Ml18MCkta3wwO2g9KGNbZz4+Ml18MCktaHwwO2I9KGNbZj4+Ml18MCktYnwwO2E9KGNbZT4+Ml18MCkteHwwO2Nbdj4+Ml09KGNbdj4+Ml18MCktdztjW3Q+PjJdPXU7Y1tyPj4yXT1zO2NbcD4+Ml09cTtjW24+PjJdPW87Y1tsPj4yXT1tO2Nbaj4+Ml09aztjW2c+PjJdPWg7Y1tmPj4yXT1iO2NbZT4+Ml09YTtpPWQ7cmV0dXJufWZ1bmN0aW9uIFFjKGEsYil7YT1hfDA7Yj1ifDA7dmFyIGQ9MCxlPTAsZj0wLGc9MCxoPTAsaT0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wLHM9MCx0PTAsdT0wLHY9MCx3PTAseD0wLHk9MCx6PTAsQT0wLEI9MCxDPTAsRD0wLEU9MDttPWIrNDB8MDt2PWIrNDR8MDt1PWIrNDh8MDt0PWIrNTJ8MDtzPWIrNTZ8MDtyPWIrNjB8MDtxPWIrNjR8MDtwPWIrNjh8MDtvPWIrNzJ8MDtuPWIrNzZ8MDtkPWIrNHwwO2U9Yis4fDA7Zj1iKzEyfDA7Zz1iKzE2fDA7aD1iKzIwfDA7aT1iKzI0fDA7aj1iKzI4fDA7az1iKzMyfDA7bD1iKzM2fDA7RT0oY1tkPj4yXXwwKSsoY1t2Pj4yXXwwKXwwO0Q9KGNbZT4+Ml18MCkrKGNbdT4+Ml18MCl8MDtDPShjW2Y+PjJdfDApKyhjW3Q+PjJdfDApfDA7Qj0oY1tnPj4yXXwwKSsoY1tzPj4yXXwwKXwwO0E9KGNbaD4+Ml18MCkrKGNbcj4+Ml18MCl8MDt6PShjW2k+PjJdfDApKyhjW3E+PjJdfDApfDA7eT0oY1tqPj4yXXwwKSsoY1twPj4yXXwwKXwwO3g9KGNbaz4+Ml18MCkrKGNbbz4+Ml18MCl8MDt3PShjW2w+PjJdfDApKyhjW24+PjJdfDApfDA7Y1thPj4yXT0oY1tiPj4yXXwwKSsoY1ttPj4yXXwwKTtjW2ErND4+Ml09RTtjW2ErOD4+Ml09RDtjW2ErMTI+PjJdPUM7Y1thKzE2Pj4yXT1CO2NbYSsyMD4+Ml09QTtjW2ErMjQ+PjJdPXo7Y1thKzI4Pj4yXT15O2NbYSszMj4+Ml09eDtjW2ErMzY+PjJdPXc7ZD0oY1t2Pj4yXXwwKS0oY1tkPj4yXXwwKXwwO2U9KGNbdT4+Ml18MCktKGNbZT4+Ml18MCl8MDtmPShjW3Q+PjJdfDApLShjW2Y+PjJdfDApfDA7Zz0oY1tzPj4yXXwwKS0oY1tnPj4yXXwwKXwwO2g9KGNbcj4+Ml18MCktKGNbaD4+Ml18MCl8MDtpPShjW3E+PjJdfDApLShjW2k+PjJdfDApfDA7aj0oY1twPj4yXXwwKS0oY1tqPj4yXXwwKXwwO2s9KGNbbz4+Ml18MCktKGNbaz4+Ml18MCl8MDtsPShjW24+PjJdfDApLShjW2w+PjJdfDApfDA7Y1thKzQwPj4yXT0oY1ttPj4yXXwwKS0oY1tiPj4yXXwwKTtjW2ErNDQ+PjJdPWQ7Y1thKzQ4Pj4yXT1lO2NbYSs1Mj4+Ml09ZjtjW2ErNTY+PjJdPWc7Y1thKzYwPj4yXT1oO2NbYSs2ND4+Ml09aTtjW2ErNjg+PjJdPWo7Y1thKzcyPj4yXT1rO2NbYSs3Nj4+Ml09bDtsPWNbYis4ND4+Ml18MDtrPWNbYis4OD4+Ml18MDtqPWNbYis5Mj4+Ml18MDtpPWNbYis5Nj4+Ml18MDtoPWNbYisxMDA+PjJdfDA7Zz1jW2IrMTA0Pj4yXXwwO2Y9Y1tiKzEwOD4+Ml18MDtlPWNbYisxMTI+PjJdfDA7ZD1jW2IrMTE2Pj4yXXwwO2NbYSs4MD4+Ml09Y1tiKzgwPj4yXTtjW2ErODQ+PjJdPWw7Y1thKzg4Pj4yXT1rO2NbYSs5Mj4+Ml09ajtjW2ErOTY+PjJdPWk7Y1thKzEwMD4+Ml09aDtjW2ErMTA0Pj4yXT1nO2NbYSsxMDg+PjJdPWY7Y1thKzExMj4+Ml09ZTtjW2ErMTE2Pj4yXT1kO0pjKGErMTIwfDAsYisxMjB8MCwxMTQ0KTtyZXR1cm59ZnVuY3Rpb24gUmMoYixlKXtiPWJ8MDtlPWV8MDt2YXIgZj0wLGc9MCxoPTAsaj0wLGs9MCxsPTAsbT0wLG49MCxvPTAscD0wLHE9MCxyPTAscz0wLHQ9MCx1PTAsdj0wLHc9MCx4PTAseT0wLHo9MCxBPTAsQj0wO3U9aTt0PWk9aSs2MyYtNjQ7aT1pKzU5MnwwO3A9dCs0MDB8MDtyPXQrNTIwfDA7cz10KzI0MHwwO3E9dCsxMjB8MDtmPTA7ZG97bj1hW2UrZj4+MF18MDtvPWY8PDE7YVtyK28+PjBdPW4mMTU7YVtyKyhvfDEpPj4wXT0obiYyNTUpPj4+NDtmPWYrMXwwfXdoaWxlKChmfDApIT0zMik7ZT0wO2Y9MDtkb3tvPXIrZnwwO249KGRbbz4+MF18MCkrZXwwO2U9KG48PDI0KSsxMzQyMTc3Mjg+PjI4O2Fbbz4+MF09bi0oZTw8NCk7Zj1mKzF8MH13aGlsZSgoZnwwKSE9NjMpO2Y9cis2M3wwO2FbZj4+MF09KGRbZj4+MF18MCkrZTtlPWI7Zj1lKzQwfDA7ZG97Y1tlPj4yXT0wO2U9ZSs0fDB9d2hpbGUoKGV8MCk8KGZ8MCkpO2o9Yis0MHwwO2Nbaj4+Ml09MTtnPWIrNDR8MDtlPWc7Zj1lKzM2fDA7ZG97Y1tlPj4yXT0wO2U9ZSs0fDB9d2hpbGUoKGV8MCk8KGZ8MCkpO2s9Yis4MHwwO2Nbaz4+Ml09MTtoPWIrODR8MDtsPWIrMTIwfDA7bT1zKzEyMHwwO249cys0MHwwO289cys4MHwwO2U9aDtmPWUrNzZ8MDtkb3tjW2U+PjJdPTA7ZT1lKzR8MH13aGlsZSgoZXwwKTwoZnwwKSk7ZT0xO2Rve1NjKHQsKGV8MCkvMnwwLGFbcitlPj4wXXwwKTtPYyhzLGIsdCk7SmMoYixzLG0pO0pjKGosbixvKTtKYyhrLG8sbSk7SmMobCxzLG4pO2U9ZSsyfDB9d2hpbGUoKGV8MCk8NjQpO0I9Y1tiKzQ+PjJdfDA7ej1jW2IrOD4+Ml18MDt5PWNbYisxMj4+Ml18MDt4PWNbYisxNj4+Ml18MDt3PWNbYisyMD4+Ml18MDt2PWNbYisyND4+Ml18MDtmPWNbYisyOD4+Ml18MDtlPWNbYiszMj4+Ml18MDtBPWNbYiszNj4+Ml18MDtjW3A+PjJdPWNbYj4+Ml07Y1twKzQ+PjJdPUI7Y1twKzg+PjJdPXo7Y1twKzEyPj4yXT15O2NbcCsxNj4+Ml09eDtjW3ArMjA+PjJdPXc7Y1twKzI0Pj4yXT12O2NbcCsyOD4+Ml09ZjtjW3ArMzI+PjJdPWU7Y1twKzM2Pj4yXT1BO0E9Y1tnPj4yXXwwO2U9Y1tiKzQ4Pj4yXXwwO2c9Y1tiKzUyPj4yXXwwO2Y9Y1tiKzU2Pj4yXXwwO3Y9Y1tiKzYwPj4yXXwwO3c9Y1tiKzY0Pj4yXXwwO3g9Y1tiKzY4Pj4yXXwwO3k9Y1tiKzcyPj4yXXwwO3o9Y1tiKzc2Pj4yXXwwO2NbcCs0MD4+Ml09Y1tqPj4yXTtjW3ArNDQ+PjJdPUE7Y1twKzQ4Pj4yXT1lO2NbcCs1Mj4+Ml09ZztjW3ArNTY+PjJdPWY7Y1twKzYwPj4yXT12O2NbcCs2ND4+Ml09dztjW3ArNjg+PjJdPXg7Y1twKzcyPj4yXT15O2NbcCs3Nj4+Ml09ejt6PWNbaD4+Ml18MDt5PWNbYis4OD4+Ml18MDt4PWNbYis5Mj4+Ml18MDt3PWNbYis5Nj4+Ml18MDt2PWNbYisxMDA+PjJdfDA7Zj1jW2IrMTA0Pj4yXXwwO2c9Y1tiKzEwOD4+Ml18MDtoPWNbYisxMTI+PjJdfDA7ZT1jW2IrMTE2Pj4yXXwwO2NbcCs4MD4+Ml09Y1trPj4yXTtjW3ArODQ+PjJdPXo7Y1twKzg4Pj4yXT15O2NbcCs5Mj4+Ml09eDtjW3ArOTY+PjJdPXc7Y1twKzEwMD4+Ml09djtjW3ArMTA0Pj4yXT1mO2NbcCsxMDg+PjJdPWc7Y1twKzExMj4+Ml09aDtjW3ArMTE2Pj4yXT1lO1BjKHMscCk7SmMocSxzLG0pO3A9cSs0MHwwO0pjKHAsbixvKTtlPXErODB8MDtKYyhlLG8sbSk7UGMocyxxKTtKYyhxLHMsbSk7SmMocCxuLG8pO0pjKGUsbyxtKTtQYyhzLHEpO0pjKHEscyxtKTtKYyhwLG4sbyk7SmMoZSxvLG0pO1BjKHMscSk7SmMoYixzLG0pO0pjKGosbixvKTtKYyhrLG8sbSk7SmMobCxzLG4pO2U9MDtkb3tTYyh0LChlfDApLzJ8MCxhW3IrZT4+MF18MCk7T2MocyxiLHQpO0pjKGIscyxtKTtKYyhqLG4sbyk7SmMoayxvLG0pO0pjKGwscyxuKTtlPWUrMnwwfXdoaWxlKChlfDApPDY0KTtpPXU7cmV0dXJufWZ1bmN0aW9uIFNjKGEsYixkKXthPWF8MDtiPWJ8MDtkPWR8MDt2YXIgZT0wLGY9MCxnPTAsaD0wLGk9MCxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTAsdD0wLHU9MCx2PTAsdz0wLHg9MCx5PTAsej0wLEE9MCxCPTAsQz0wLEQ9MCxFPTAsRj0wLEc9MCxIPTAsST0wLEo9MCxLPTAsTD0wLE09MCxOPTAsTz0wLFA9MCxRPTAsUj0wLFM9MCxUPTAsVT0wLFY9MCxXPTAsWD0wLFk9MCxaPTAsXz0wLCQ9MCxhYT0wLGJhPTAsY2E9MCxkYT0wLGVhPTAsZmE9MCxnYT0wLGhhPTAsaWE9MDtzPWQ8PDI0Pj4yNDtzPUdkKHN8MCwoKHN8MCk8MCk8PDMxPj4zMXwwLDYzKXwwO2g9ZDw8MjQ+PjI0O3M9MC1zfDA7ZD1hKzR8MDtjW2Q+PjJdPTA7Y1tkKzQ+PjJdPTA7Y1tkKzg+PjJdPTA7Y1tkKzEyPj4yXT0wO2NbZCsxNj4+Ml09MDtjW2QrMjA+PjJdPTA7Y1tkKzI0Pj4yXT0wO2NbZCsyOD4+Ml09MDtlPWErNDB8MDtjW2U+PjJdPTE7Zj1hKzQ0fDA7Zz1hKzgwfDA7aD1oLSgoaCZzKTw8MSkmMjU1O2k9KGheMSkrLTF8MDtqPTExODQrKGIqOTYwfDApfDA7az1hKzh8MDtsPWErMTJ8MDttPWErMTZ8MDtuPWErMjB8MDtvPWErMjR8MDtwPWErMjh8MDtxPWErMzJ8MDtyPWErMzZ8MDt0PWY7dT10Kzc2fDA7ZG97Y1t0Pj4yXT0wO3Q9dCs0fDB9d2hpbGUoKHR8MCk8KHV8MCkpO0g9aT4+MzE7QT1jWzExODQrKGIqOTYwfDApKzQ+PjJdJkg7ST1jWzExODQrKGIqOTYwfDApKzg+PjJdJkg7Sz1jWzExODQrKGIqOTYwfDApKzEyPj4yXSZIO009Y1sxMTg0KyhiKjk2MHwwKSsxNj4+Ml0mSDtPPWNbMTE4NCsoYio5NjB8MCkrMjA+PjJdJkg7UT1jWzExODQrKGIqOTYwfDApKzI0Pj4yXSZIO1M9Y1sxMTg0KyhiKjk2MHwwKSsyOD4+Ml0mSDtVPWNbMTE4NCsoYio5NjB8MCkrMzI+PjJdJkg7Vz1jWzExODQrKGIqOTYwfDApKzM2Pj4yXSZIO2NbYT4+Ml09KGNbaj4+Ml1eMSkmSF4xO2NbZD4+Ml09QTtjW2s+PjJdPUk7Y1tsPj4yXT1LO2NbbT4+Ml09TTtjW24+PjJdPU87Y1tvPj4yXT1RO2NbcD4+Ml09UztjW3E+PjJdPVU7Y1tyPj4yXT1XO1c9YSs0OHwwO1U9YSs1MnwwO1M9YSs1NnwwO1E9YSs2MHwwO089YSs2NHwwO009YSs2OHwwO0s9YSs3MnwwO0k9YSs3NnwwO0E9Y1sxMTg0KyhiKjk2MHwwKSs0ND4+Ml0mSDt6PWNbMTE4NCsoYio5NjB8MCkrNDg+PjJdJkg7dz1jWzExODQrKGIqOTYwfDApKzUyPj4yXSZIO0I9Y1sxMTg0KyhiKjk2MHwwKSs1Nj4+Ml0mSDtpYT1jWzExODQrKGIqOTYwfDApKzYwPj4yXSZIO0Q9Y1sxMTg0KyhiKjk2MHwwKSs2ND4+Ml0mSDtlYT1jWzExODQrKGIqOTYwfDApKzY4Pj4yXSZIO0Y9Y1sxMTg0KyhiKjk2MHwwKSs3Mj4+Ml0mSDtnYT1jWzExODQrKGIqOTYwfDApKzc2Pj4yXSZIO2NbZT4+Ml09KGNbMTE4NCsoYio5NjB8MCkrNDA+PjJdXjEpJkheMTtjW2Y+PjJdPUE7Y1tXPj4yXT16O2NbVT4+Ml09dztjW1M+PjJdPUI7Y1tRPj4yXT1pYTtjW08+PjJdPUQ7Y1tNPj4yXT1lYTtjW0s+PjJdPUY7Y1tJPj4yXT1nYTtnYT1jW2c+PjJdfDA7Rj1hKzg0fDA7ZWE9Y1tGPj4yXXwwO0Q9YSs4OHwwO2lhPWNbRD4+Ml18MDtCPWErOTJ8MDt3PWNbQj4+Ml18MDt6PWErOTZ8MDtBPWNbej4+Ml18MDt4PWErMTAwfDA7ZmE9Y1t4Pj4yXXwwO3Y9YSsxMDR8MDtiYT1jW3Y+PjJdfDA7aT1hKzEwOHwwO0c9Y1tpPj4yXXwwO3Q9YSsxMTJ8MDtfPWNbdD4+Ml18MDt1PWErMTE2fDA7ZGE9Y1t1Pj4yXXwwOyQ9KGNbMTE4NCsoYio5NjB8MCkrODQ+PjJdXmVhKSZIO2FhPShjWzExODQrKGIqOTYwfDApKzg4Pj4yXV5pYSkmSDt5PShjWzExODQrKGIqOTYwfDApKzkyPj4yXV53KSZIO2o9KGNbMTE4NCsoYio5NjB8MCkrOTY+PjJdXkEpJkg7aGE9KGNbMTE4NCsoYio5NjB8MCkrMTAwPj4yXV5mYSkmSDtaPShjWzExODQrKGIqOTYwfDApKzEwND4+Ml1eYmEpJkg7Y2E9KGNbMTE4NCsoYio5NjB8MCkrMTA4Pj4yXV5HKSZIO0M9KGNbMTE4NCsoYio5NjB8MCkrMTEyPj4yXV5fKSZIO0U9KGNbMTE4NCsoYio5NjB8MCkrMTE2Pj4yXV5kYSkmSDtjW2c+PjJdPShjWzExODQrKGIqOTYwfDApKzgwPj4yXV5nYSkmSF5nYTtjW0Y+PjJdPSReZWE7Y1tEPj4yXT1hYV5pYTtjW0I+PjJdPXledztjW3o+PjJdPWpeQTtjW3g+PjJdPWhhXmZhO2Nbdj4+Ml09Wl5iYTtjW2k+PjJdPWNhXkc7Y1t0Pj4yXT1DXl87Y1t1Pj4yXT1FXmRhO2RhPWNbYT4+Ml18MDtFPWNbZD4+Ml18MDtfPWNbaz4+Ml18MDtDPWNbbD4+Ml18MDtHPWNbbT4+Ml18MDtjYT1jW24+PjJdfDA7YmE9Y1tvPj4yXXwwO1o9Y1twPj4yXXwwO2ZhPWNbcT4+Ml18MDtoYT1jW3I+PjJdfDA7QT0oaF4yKSstMT4+MzE7aj0oY1sxMTg0KyhiKjk2MHwwKSsxMjQ+PjJdXkUpJkE7dz0oY1sxMTg0KyhiKjk2MHwwKSsxMjg+PjJdXl8pJkE7eT0oY1sxMTg0KyhiKjk2MHwwKSsxMzI+PjJdXkMpJkE7aWE9KGNbMTE4NCsoYio5NjB8MCkrMTM2Pj4yXV5HKSZBO2FhPShjWzExODQrKGIqOTYwfDApKzE0MD4+Ml1eY2EpJkE7ZWE9KGNbMTE4NCsoYio5NjB8MCkrMTQ0Pj4yXV5iYSkmQTskPShjWzExODQrKGIqOTYwfDApKzE0OD4+Ml1eWikmQTtnYT0oY1sxMTg0KyhiKjk2MHwwKSsxNTI+PjJdXmZhKSZBO0g9KGNbMTE4NCsoYio5NjB8MCkrMTU2Pj4yXV5oYSkmQTtjW2E+PjJdPShjWzExODQrKGIqOTYwfDApKzEyMD4+Ml1eZGEpJkFeZGE7Y1tkPj4yXT1qXkU7Y1trPj4yXT13Xl87Y1tsPj4yXT15XkM7Y1ttPj4yXT1pYV5HO2Nbbj4+Ml09YWFeY2E7Y1tvPj4yXT1lYV5iYTtjW3A+PjJdPSReWjtjW3E+PjJdPWdhXmZhO2Nbcj4+Ml09SF5oYTtoYT1jW2U+PjJdfDA7SD1jW2Y+PjJdfDA7ZmE9Y1tXPj4yXXwwO2dhPWNbVT4+Ml18MDtaPWNbUz4+Ml18MDskPWNbUT4+Ml18MDtiYT1jW08+PjJdfDA7ZWE9Y1tNPj4yXXwwO2NhPWNbSz4+Ml18MDthYT1jW0k+PjJdfDA7Rz0oY1sxMTg0KyhiKjk2MHwwKSsxNjQ+PjJdXkgpJkE7aWE9KGNbMTE4NCsoYio5NjB8MCkrMTY4Pj4yXV5mYSkmQTtDPShjWzExODQrKGIqOTYwfDApKzE3Mj4+Ml1eZ2EpJkE7eT0oY1sxMTg0KyhiKjk2MHwwKSsxNzY+PjJdXlopJkE7Xz0oY1sxMTg0KyhiKjk2MHwwKSsxODA+PjJdXiQpJkE7dz0oY1sxMTg0KyhiKjk2MHwwKSsxODQ+PjJdXmJhKSZBO0U9KGNbMTE4NCsoYio5NjB8MCkrMTg4Pj4yXV5lYSkmQTtqPShjWzExODQrKGIqOTYwfDApKzE5Mj4+Ml1eY2EpJkE7ZGE9KGNbMTE4NCsoYio5NjB8MCkrMTk2Pj4yXV5hYSkmQTtjW2U+PjJdPShjWzExODQrKGIqOTYwfDApKzE2MD4+Ml1eaGEpJkFeaGE7Y1tmPj4yXT1HXkg7Y1tXPj4yXT1pYV5mYTtjW1U+PjJdPUNeZ2E7Y1tTPj4yXT15Xlo7Y1tRPj4yXT1fXiQ7Y1tPPj4yXT13XmJhO2NbTT4+Ml09RV5lYTtjW0s+PjJdPWpeY2E7Y1tJPj4yXT1kYV5hYTthYT1jW2c+PjJdfDA7ZGE9Y1tGPj4yXXwwO2NhPWNbRD4+Ml18MDtqPWNbQj4+Ml18MDtlYT1jW3o+PjJdfDA7RT1jW3g+PjJdfDA7YmE9Y1t2Pj4yXXwwO3c9Y1tpPj4yXXwwOyQ9Y1t0Pj4yXXwwO189Y1t1Pj4yXXwwO1o9KGNbMTE4NCsoYio5NjB8MCkrMjA0Pj4yXV5kYSkmQTt5PShjWzExODQrKGIqOTYwfDApKzIwOD4+Ml1eY2EpJkE7Z2E9KGNbMTE4NCsoYio5NjB8MCkrMjEyPj4yXV5qKSZBO0M9KGNbMTE4NCsoYio5NjB8MCkrMjE2Pj4yXV5lYSkmQTtmYT0oY1sxMTg0KyhiKjk2MHwwKSsyMjA+PjJdXkUpJkE7aWE9KGNbMTE4NCsoYio5NjB8MCkrMjI0Pj4yXV5iYSkmQTtIPShjWzExODQrKGIqOTYwfDApKzIyOD4+Ml1edykmQTtHPShjWzExODQrKGIqOTYwfDApKzIzMj4+Ml1eJCkmQTtoYT0oY1sxMTg0KyhiKjk2MHwwKSsyMzY+PjJdXl8pJkE7Y1tnPj4yXT0oY1sxMTg0KyhiKjk2MHwwKSsyMDA+PjJdXmFhKSZBXmFhO2NbRj4+Ml09Wl5kYTtjW0Q+PjJdPXleY2E7Y1tCPj4yXT1nYV5qO2Nbej4+Ml09Q15lYTtjW3g+PjJdPWZhXkU7Y1t2Pj4yXT1pYV5iYTtjW2k+PjJdPUhedztjW3Q+PjJdPUdeJDtjW3U+PjJdPWhhXl87Xz1jW2E+PjJdfDA7aGE9Y1tkPj4yXXwwOyQ9Y1trPj4yXXwwO0c9Y1tsPj4yXXwwO3c9Y1ttPj4yXXwwO0g9Y1tuPj4yXXwwO2JhPWNbbz4+Ml18MDtpYT1jW3A+PjJdfDA7RT1jW3E+PjJdfDA7ZmE9Y1tyPj4yXXwwO2VhPShoXjMpKy0xPj4zMTtDPShjWzExODQrKGIqOTYwfDApKzI0ND4+Ml1eaGEpJmVhO2o9KGNbMTE4NCsoYio5NjB8MCkrMjQ4Pj4yXV4kKSZlYTtnYT0oY1sxMTg0KyhiKjk2MHwwKSsyNTI+PjJdXkcpJmVhO2NhPShjWzExODQrKGIqOTYwfDApKzI1Nj4+Ml1edykmZWE7eT0oY1sxMTg0KyhiKjk2MHwwKSsyNjA+PjJdXkgpJmVhO2RhPShjWzExODQrKGIqOTYwfDApKzI2ND4+Ml1eYmEpJmVhO1o9KGNbMTE4NCsoYio5NjB8MCkrMjY4Pj4yXV5pYSkmZWE7YWE9KGNbMTE4NCsoYio5NjB8MCkrMjcyPj4yXV5FKSZlYTtBPShjWzExODQrKGIqOTYwfDApKzI3Nj4+Ml1eZmEpJmVhO2NbYT4+Ml09KGNbMTE4NCsoYio5NjB8MCkrMjQwPj4yXV5fKSZlYV5fO2NbZD4+Ml09Q15oYTtjW2s+PjJdPWpeJDtjW2w+PjJdPWdhXkc7Y1ttPj4yXT1jYV53O2Nbbj4+Ml09eV5IO2Nbbz4+Ml09ZGFeYmE7Y1twPj4yXT1aXmlhO2NbcT4+Ml09YWFeRTtjW3I+PjJdPUFeZmE7ZmE9Y1tlPj4yXXwwO0E9Y1tmPj4yXXwwO0U9Y1tXPj4yXXwwO2FhPWNbVT4+Ml18MDtpYT1jW1M+PjJdfDA7Wj1jW1E+PjJdfDA7YmE9Y1tPPj4yXXwwO2RhPWNbTT4+Ml18MDtIPWNbSz4+Ml18MDt5PWNbST4+Ml18MDt3PShjWzExODQrKGIqOTYwfDApKzI4ND4+Ml1eQSkmZWE7Y2E9KGNbMTE4NCsoYio5NjB8MCkrMjg4Pj4yXV5FKSZlYTtHPShjWzExODQrKGIqOTYwfDApKzI5Mj4+Ml1eYWEpJmVhO2dhPShjWzExODQrKGIqOTYwfDApKzI5Nj4+Ml1eaWEpJmVhOyQ9KGNbMTE4NCsoYio5NjB8MCkrMzAwPj4yXV5aKSZlYTtqPShjWzExODQrKGIqOTYwfDApKzMwND4+Ml1eYmEpJmVhO2hhPShjWzExODQrKGIqOTYwfDApKzMwOD4+Ml1eZGEpJmVhO0M9KGNbMTE4NCsoYio5NjB8MCkrMzEyPj4yXV5IKSZlYTtfPShjWzExODQrKGIqOTYwfDApKzMxNj4+Ml1eeSkmZWE7Y1tlPj4yXT0oY1sxMTg0KyhiKjk2MHwwKSsyODA+PjJdXmZhKSZlYV5mYTtjW2Y+PjJdPXdeQTtjW1c+PjJdPWNhXkU7Y1tVPj4yXT1HXmFhO2NbUz4+Ml09Z2FeaWE7Y1tRPj4yXT0kXlo7Y1tPPj4yXT1qXmJhO2NbTT4+Ml09aGFeZGE7Y1tLPj4yXT1DXkg7Y1tJPj4yXT1fXnk7eT1jW2c+PjJdfDA7Xz1jW0Y+PjJdfDA7SD1jW0Q+PjJdfDA7Qz1jW0I+PjJdfDA7ZGE9Y1t6Pj4yXXwwO2hhPWNbeD4+Ml18MDtiYT1jW3Y+PjJdfDA7aj1jW2k+PjJdfDA7Wj1jW3Q+PjJdfDA7JD1jW3U+PjJdfDA7aWE9KGNbMTE4NCsoYio5NjB8MCkrMzI0Pj4yXV5fKSZlYTtnYT0oY1sxMTg0KyhiKjk2MHwwKSszMjg+PjJdXkgpJmVhO2FhPShjWzExODQrKGIqOTYwfDApKzMzMj4+Ml1eQykmZWE7Rz0oY1sxMTg0KyhiKjk2MHwwKSszMzY+PjJdXmRhKSZlYTtFPShjWzExODQrKGIqOTYwfDApKzM0MD4+Ml1eaGEpJmVhO2NhPShjWzExODQrKGIqOTYwfDApKzM0ND4+Ml1eYmEpJmVhO0E9KGNbMTE4NCsoYio5NjB8MCkrMzQ4Pj4yXV5qKSZlYTt3PShjWzExODQrKGIqOTYwfDApKzM1Mj4+Ml1eWikmZWE7ZmE9KGNbMTE4NCsoYio5NjB8MCkrMzU2Pj4yXV4kKSZlYTtjW2c+PjJdPShjWzExODQrKGIqOTYwfDApKzMyMD4+Ml1eeSkmZWFeeTtjW0Y+PjJdPWlhXl87Y1tEPj4yXT1nYV5IO2NbQj4+Ml09YWFeQztjW3o+PjJdPUdeZGE7Y1t4Pj4yXT1FXmhhO2Nbdj4+Ml09Y2FeYmE7Y1tpPj4yXT1BXmo7Y1t0Pj4yXT13Xlo7Y1t1Pj4yXT1mYV4kOyQ9Y1thPj4yXXwwO2ZhPWNbZD4+Ml18MDtaPWNbaz4+Ml18MDt3PWNbbD4+Ml18MDtqPWNbbT4+Ml18MDtBPWNbbj4+Ml18MDtiYT1jW28+PjJdfDA7Y2E9Y1twPj4yXXwwO2hhPWNbcT4+Ml18MDtFPWNbcj4+Ml18MDtkYT0oaF40KSstMT4+MzE7Rz0oY1sxMTg0KyhiKjk2MHwwKSszNjQ+PjJdXmZhKSZkYTtDPShjWzExODQrKGIqOTYwfDApKzM2OD4+Ml1eWikmZGE7YWE9KGNbMTE4NCsoYio5NjB8MCkrMzcyPj4yXV53KSZkYTtIPShjWzExODQrKGIqOTYwfDApKzM3Nj4+Ml1eaikmZGE7Z2E9KGNbMTE4NCsoYio5NjB8MCkrMzgwPj4yXV5BKSZkYTtfPShjWzExODQrKGIqOTYwfDApKzM4ND4+Ml1eYmEpJmRhO2lhPShjWzExODQrKGIqOTYwfDApKzM4OD4+Ml1eY2EpJmRhO3k9KGNbMTE4NCsoYio5NjB8MCkrMzkyPj4yXV5oYSkmZGE7ZWE9KGNbMTE4NCsoYio5NjB8MCkrMzk2Pj4yXV5FKSZkYTtjW2E+PjJdPShjWzExODQrKGIqOTYwfDApKzM2MD4+Ml1eJCkmZGFeJDtjW2Q+PjJdPUdeZmE7Y1trPj4yXT1DXlo7Y1tsPj4yXT1hYV53O2NbbT4+Ml09SF5qO2Nbbj4+Ml09Z2FeQTtjW28+PjJdPV9eYmE7Y1twPj4yXT1pYV5jYTtjW3E+PjJdPXleaGE7Y1tyPj4yXT1lYV5FO0U9Y1tlPj4yXXwwO2VhPWNbZj4+Ml18MDtoYT1jW1c+PjJdfDA7eT1jW1U+PjJdfDA7Y2E9Y1tTPj4yXXwwO2lhPWNbUT4+Ml18MDtiYT1jW08+PjJdfDA7Xz1jW00+PjJdfDA7QT1jW0s+PjJdfDA7Z2E9Y1tJPj4yXXwwO2o9KGNbMTE4NCsoYio5NjB8MCkrNDA0Pj4yXV5lYSkmZGE7SD0oY1sxMTg0KyhiKjk2MHwwKSs0MDg+PjJdXmhhKSZkYTt3PShjWzExODQrKGIqOTYwfDApKzQxMj4+Ml1eeSkmZGE7YWE9KGNbMTE4NCsoYio5NjB8MCkrNDE2Pj4yXV5jYSkmZGE7Wj0oY1sxMTg0KyhiKjk2MHwwKSs0MjA+PjJdXmlhKSZkYTtDPShjWzExODQrKGIqOTYwfDApKzQyND4+Ml1eYmEpJmRhO2ZhPShjWzExODQrKGIqOTYwfDApKzQyOD4+Ml1eXykmZGE7Rz0oY1sxMTg0KyhiKjk2MHwwKSs0MzI+PjJdXkEpJmRhOyQ9KGNbMTE4NCsoYio5NjB8MCkrNDM2Pj4yXV5nYSkmZGE7Y1tlPj4yXT0oY1sxMTg0KyhiKjk2MHwwKSs0MDA+PjJdXkUpJmRhXkU7Y1tmPj4yXT1qXmVhO2NbVz4+Ml09SF5oYTtjW1U+PjJdPXdeeTtjW1M+PjJdPWFhXmNhO2NbUT4+Ml09Wl5pYTtjW08+PjJdPUNeYmE7Y1tNPj4yXT1mYV5fO2NbSz4+Ml09R15BO2NbST4+Ml09JF5nYTtnYT1jW2c+PjJdfDA7JD1jW0Y+PjJdfDA7QT1jW0Q+PjJdfDA7Rz1jW0I+PjJdfDA7Xz1jW3o+PjJdfDA7ZmE9Y1t4Pj4yXXwwO2JhPWNbdj4+Ml18MDtDPWNbaT4+Ml18MDtpYT1jW3Q+PjJdfDA7Wj1jW3U+PjJdfDA7Y2E9KGNbMTE4NCsoYio5NjB8MCkrNDQ0Pj4yXV4kKSZkYTthYT0oY1sxMTg0KyhiKjk2MHwwKSs0NDg+PjJdXkEpJmRhO3k9KGNbMTE4NCsoYio5NjB8MCkrNDUyPj4yXV5HKSZkYTt3PShjWzExODQrKGIqOTYwfDApKzQ1Nj4+Ml1eXykmZGE7aGE9KGNbMTE4NCsoYio5NjB8MCkrNDYwPj4yXV5mYSkmZGE7SD0oY1sxMTg0KyhiKjk2MHwwKSs0NjQ+PjJdXmJhKSZkYTtlYT0oY1sxMTg0KyhiKjk2MHwwKSs0Njg+PjJdXkMpJmRhO2o9KGNbMTE4NCsoYio5NjB8MCkrNDcyPj4yXV5pYSkmZGE7RT0oY1sxMTg0KyhiKjk2MHwwKSs0NzY+PjJdXlopJmRhO2NbZz4+Ml09KGNbMTE4NCsoYio5NjB8MCkrNDQwPj4yXV5nYSkmZGFeZ2E7Y1tGPj4yXT1jYV4kO2NbRD4+Ml09YWFeQTtjW0I+PjJdPXleRztjW3o+PjJdPXdeXztjW3g+PjJdPWhhXmZhO2Nbdj4+Ml09SF5iYTtjW2k+PjJdPWVhXkM7Y1t0Pj4yXT1qXmlhO2NbdT4+Ml09RV5aO1o9Y1thPj4yXXwwO0U9Y1tkPj4yXXwwO2lhPWNbaz4+Ml18MDtqPWNbbD4+Ml18MDtDPWNbbT4+Ml18MDtlYT1jW24+PjJdfDA7YmE9Y1tvPj4yXXwwO0g9Y1twPj4yXXwwO2ZhPWNbcT4+Ml18MDtoYT1jW3I+PjJdfDA7Xz0oaF41KSstMT4+MzE7dz0oY1sxMTg0KyhiKjk2MHwwKSs0ODQ+PjJdXkUpJl87Rz0oY1sxMTg0KyhiKjk2MHwwKSs0ODg+PjJdXmlhKSZfO3k9KGNbMTE4NCsoYio5NjB8MCkrNDkyPj4yXV5qKSZfO0E9KGNbMTE4NCsoYio5NjB8MCkrNDk2Pj4yXV5DKSZfO2FhPShjWzExODQrKGIqOTYwfDApKzUwMD4+Ml1eZWEpJl87JD0oY1sxMTg0KyhiKjk2MHwwKSs1MDQ+PjJdXmJhKSZfO2NhPShjWzExODQrKGIqOTYwfDApKzUwOD4+Ml1eSCkmXztnYT0oY1sxMTg0KyhiKjk2MHwwKSs1MTI+PjJdXmZhKSZfO2RhPShjWzExODQrKGIqOTYwfDApKzUxNj4+Ml1eaGEpJl87Y1thPj4yXT0oY1sxMTg0KyhiKjk2MHwwKSs0ODA+PjJdXlopJl9eWjtjW2Q+PjJdPXdeRTtjW2s+PjJdPUdeaWE7Y1tsPj4yXT15Xmo7Y1ttPj4yXT1BXkM7Y1tuPj4yXT1hYV5lYTtjW28+PjJdPSReYmE7Y1twPj4yXT1jYV5IO2NbcT4+Ml09Z2FeZmE7Y1tyPj4yXT1kYV5oYTtoYT1jW2U+PjJdfDA7ZGE9Y1tmPj4yXXwwO2ZhPWNbVz4+Ml18MDtnYT1jW1U+PjJdfDA7SD1jW1M+PjJdfDA7Y2E9Y1tRPj4yXXwwO2JhPWNbTz4+Ml18MDskPWNbTT4+Ml18MDtlYT1jW0s+PjJdfDA7YWE9Y1tJPj4yXXwwO0M9KGNbMTE4NCsoYio5NjB8MCkrNTI0Pj4yXV5kYSkmXztBPShjWzExODQrKGIqOTYwfDApKzUyOD4+Ml1eZmEpJl87aj0oY1sxMTg0KyhiKjk2MHwwKSs1MzI+PjJdXmdhKSZfO3k9KGNbMTE4NCsoYio5NjB8MCkrNTM2Pj4yXV5IKSZfO2lhPShjWzExODQrKGIqOTYwfDApKzU0MD4+Ml1eY2EpJl87Rz0oY1sxMTg0KyhiKjk2MHwwKSs1NDQ+PjJdXmJhKSZfO0U9KGNbMTE4NCsoYio5NjB8MCkrNTQ4Pj4yXV4kKSZfO3c9KGNbMTE4NCsoYio5NjB8MCkrNTUyPj4yXV5lYSkmXztaPShjWzExODQrKGIqOTYwfDApKzU1Nj4+Ml1eYWEpJl87Y1tlPj4yXT0oY1sxMTg0KyhiKjk2MHwwKSs1MjA+PjJdXmhhKSZfXmhhO2NbZj4+Ml09Q15kYTtjW1c+PjJdPUFeZmE7Y1tVPj4yXT1qXmdhO2NbUz4+Ml09eV5IO2NbUT4+Ml09aWFeY2E7Y1tPPj4yXT1HXmJhO2NbTT4+Ml09RV4kO2NbSz4+Ml09d15lYTtjW0k+PjJdPVpeYWE7YWE9Y1tnPj4yXXwwO1o9Y1tGPj4yXXwwO2VhPWNbRD4+Ml18MDt3PWNbQj4+Ml18MDskPWNbej4+Ml18MDtFPWNbeD4+Ml18MDtiYT1jW3Y+PjJdfDA7Rz1jW2k+PjJdfDA7Y2E9Y1t0Pj4yXXwwO2lhPWNbdT4+Ml18MDtIPShjWzExODQrKGIqOTYwfDApKzU2ND4+Ml1eWikmXzt5PShjWzExODQrKGIqOTYwfDApKzU2OD4+Ml1eZWEpJl87Z2E9KGNbMTE4NCsoYio5NjB8MCkrNTcyPj4yXV53KSZfO2o9KGNbMTE4NCsoYio5NjB8MCkrNTc2Pj4yXV4kKSZfO2ZhPShjWzExODQrKGIqOTYwfDApKzU4MD4+Ml1eRSkmXztBPShjWzExODQrKGIqOTYwfDApKzU4ND4+Ml1eYmEpJl87ZGE9KGNbMTE4NCsoYio5NjB8MCkrNTg4Pj4yXV5HKSZfO0M9KGNbMTE4NCsoYio5NjB8MCkrNTkyPj4yXV5jYSkmXztoYT0oY1sxMTg0KyhiKjk2MHwwKSs1OTY+PjJdXmlhKSZfO2NbZz4+Ml09KGNbMTE4NCsoYio5NjB8MCkrNTYwPj4yXV5hYSkmX15hYTtjW0Y+PjJdPUheWjtjW0Q+PjJdPXleZWE7Y1tCPj4yXT1nYV53O2Nbej4+Ml09al4kO2NbeD4+Ml09ZmFeRTtjW3Y+PjJdPUFeYmE7Y1tpPj4yXT1kYV5HO2NbdD4+Ml09Q15jYTtjW3U+PjJdPWhhXmlhO2lhPWNbYT4+Ml18MDtoYT1jW2Q+PjJdfDA7Y2E9Y1trPj4yXXwwO0M9Y1tsPj4yXXwwO0c9Y1ttPj4yXXwwO2RhPWNbbj4+Ml18MDtiYT1jW28+PjJdfDA7QT1jW3A+PjJdfDA7RT1jW3E+PjJdfDA7ZmE9Y1tyPj4yXXwwOyQ9KGheNikrLTE+PjMxO2o9KGNbMTE4NCsoYio5NjB8MCkrNjA0Pj4yXV5oYSkmJDt3PShjWzExODQrKGIqOTYwfDApKzYwOD4+Ml1eY2EpJiQ7Z2E9KGNbMTE4NCsoYio5NjB8MCkrNjEyPj4yXV5DKSYkO2VhPShjWzExODQrKGIqOTYwfDApKzYxNj4+Ml1eRykmJDt5PShjWzExODQrKGIqOTYwfDApKzYyMD4+Ml1eZGEpJiQ7Wj0oY1sxMTg0KyhiKjk2MHwwKSs2MjQ+PjJdXmJhKSYkO0g9KGNbMTE4NCsoYio5NjB8MCkrNjI4Pj4yXV5BKSYkO2FhPShjWzExODQrKGIqOTYwfDApKzYzMj4+Ml1eRSkmJDtfPShjWzExODQrKGIqOTYwfDApKzYzNj4+Ml1eZmEpJiQ7Y1thPj4yXT0oY1sxMTg0KyhiKjk2MHwwKSs2MDA+PjJdXmlhKSYkXmlhO2NbZD4+Ml09al5oYTtjW2s+PjJdPXdeY2E7Y1tsPj4yXT1nYV5DO2NbbT4+Ml09ZWFeRztjW24+PjJdPXleZGE7Y1tvPj4yXT1aXmJhO2NbcD4+Ml09SF5BO2NbcT4+Ml09YWFeRTtjW3I+PjJdPV9eZmE7ZmE9Y1tlPj4yXXwwO189Y1tmPj4yXXwwO0U9Y1tXPj4yXXwwO2FhPWNbVT4+Ml18MDtBPWNbUz4+Ml18MDtIPWNbUT4+Ml18MDtiYT1jW08+PjJdfDA7Wj1jW00+PjJdfDA7ZGE9Y1tLPj4yXXwwO3k9Y1tJPj4yXXwwO0c9KGNbMTE4NCsoYio5NjB8MCkrNjQ0Pj4yXV5fKSYkO2VhPShjWzExODQrKGIqOTYwfDApKzY0OD4+Ml1eRSkmJDtDPShjWzExODQrKGIqOTYwfDApKzY1Mj4+Ml1eYWEpJiQ7Z2E9KGNbMTE4NCsoYio5NjB8MCkrNjU2Pj4yXV5BKSYkO2NhPShjWzExODQrKGIqOTYwfDApKzY2MD4+Ml1eSCkmJDt3PShjWzExODQrKGIqOTYwfDApKzY2ND4+Ml1eYmEpJiQ7aGE9KGNbMTE4NCsoYio5NjB8MCkrNjY4Pj4yXV5aKSYkO2o9KGNbMTE4NCsoYio5NjB8MCkrNjcyPj4yXV5kYSkmJDtpYT0oY1sxMTg0KyhiKjk2MHwwKSs2NzY+PjJdXnkpJiQ7Y1tlPj4yXT0oY1sxMTg0KyhiKjk2MHwwKSs2NDA+PjJdXmZhKSYkXmZhO2NbZj4+Ml09R15fO2NbVz4+Ml09ZWFeRTtjW1U+PjJdPUNeYWE7Y1tTPj4yXT1nYV5BO2NbUT4+Ml09Y2FeSDtjW08+PjJdPXdeYmE7Y1tNPj4yXT1oYV5aO2NbSz4+Ml09al5kYTtjW0k+PjJdPWlhXnk7eT1jW2c+PjJdfDA7aWE9Y1tGPj4yXXwwO2RhPWNbRD4+Ml18MDtqPWNbQj4+Ml18MDtaPWNbej4+Ml18MDtoYT1jW3g+PjJdfDA7YmE9Y1t2Pj4yXXwwO3c9Y1tpPj4yXXwwO0g9Y1t0Pj4yXXwwO2NhPWNbdT4+Ml18MDtBPShjWzExODQrKGIqOTYwfDApKzY4ND4+Ml1eaWEpJiQ7Z2E9KGNbMTE4NCsoYio5NjB8MCkrNjg4Pj4yXV5kYSkmJDthYT0oY1sxMTg0KyhiKjk2MHwwKSs2OTI+PjJdXmopJiQ7Qz0oY1sxMTg0KyhiKjk2MHwwKSs2OTY+PjJdXlopJiQ7RT0oY1sxMTg0KyhiKjk2MHwwKSs3MDA+PjJdXmhhKSYkO2VhPShjWzExODQrKGIqOTYwfDApKzcwND4+Ml1eYmEpJiQ7Xz0oY1sxMTg0KyhiKjk2MHwwKSs3MDg+PjJdXncpJiQ7Rz0oY1sxMTg0KyhiKjk2MHwwKSs3MTI+PjJdXkgpJiQ7ZmE9KGNbMTE4NCsoYio5NjB8MCkrNzE2Pj4yXV5jYSkmJDtjW2c+PjJdPShjWzExODQrKGIqOTYwfDApKzY4MD4+Ml1eeSkmJF55O2NbRj4+Ml09QV5pYTtjW0Q+PjJdPWdhXmRhO2NbQj4+Ml09YWFeajtjW3o+PjJdPUNeWjtjW3g+PjJdPUVeaGE7Y1t2Pj4yXT1lYV5iYTtjW2k+PjJdPV9edztjW3Q+PjJdPUdeSDtjW3U+PjJdPWZhXmNhO2NhPWNbYT4+Ml18MDtmYT1jW2Q+PjJdfDA7SD1jW2s+PjJdfDA7Rz1jW2w+PjJdfDA7dz1jW20+PjJdfDA7Xz1jW24+PjJdfDA7YmE9Y1tvPj4yXXwwO2VhPWNbcD4+Ml18MDtoYT1jW3E+PjJdfDA7RT1jW3I+PjJdfDA7Wj0oaF43KSstMT4+MzE7Qz0oY1sxMTg0KyhiKjk2MHwwKSs3MjQ+PjJdXmZhKSZaO2o9KGNbMTE4NCsoYio5NjB8MCkrNzI4Pj4yXV5IKSZaO2FhPShjWzExODQrKGIqOTYwfDApKzczMj4+Ml1eRykmWjtkYT0oY1sxMTg0KyhiKjk2MHwwKSs3MzY+PjJdXncpJlo7Z2E9KGNbMTE4NCsoYio5NjB8MCkrNzQwPj4yXV5fKSZaO2lhPShjWzExODQrKGIqOTYwfDApKzc0ND4+Ml1eYmEpJlo7QT0oY1sxMTg0KyhiKjk2MHwwKSs3NDg+PjJdXmVhKSZaO3k9KGNbMTE4NCsoYio5NjB8MCkrNzUyPj4yXV5oYSkmWjskPShjWzExODQrKGIqOTYwfDApKzc1Nj4+Ml1eRSkmWjtjW2E+PjJdPShjWzExODQrKGIqOTYwfDApKzcyMD4+Ml1eY2EpJlpeY2E7Y1tkPj4yXT1DXmZhO2Nbaz4+Ml09al5IO2NbbD4+Ml09YWFeRztjW20+PjJdPWRhXnc7Y1tuPj4yXT1nYV5fO2Nbbz4+Ml09aWFeYmE7Y1twPj4yXT1BXmVhO2NbcT4+Ml09eV5oYTtjW3I+PjJdPSReRTtFPWNbZT4+Ml18MDskPWNbZj4+Ml18MDtoYT1jW1c+PjJdfDA7eT1jW1U+PjJdfDA7ZWE9Y1tTPj4yXXwwO0E9Y1tRPj4yXXwwO2JhPWNbTz4+Ml18MDtpYT1jW00+PjJdfDA7Xz1jW0s+PjJdfDA7Z2E9Y1tJPj4yXXwwO3c9KGNbMTE4NCsoYio5NjB8MCkrNzY0Pj4yXV4kKSZaO2RhPShjWzExODQrKGIqOTYwfDApKzc2OD4+Ml1eaGEpJlo7Rz0oY1sxMTg0KyhiKjk2MHwwKSs3NzI+PjJdXnkpJlo7YWE9KGNbMTE4NCsoYio5NjB8MCkrNzc2Pj4yXV5lYSkmWjtIPShjWzExODQrKGIqOTYwfDApKzc4MD4+Ml1eQSkmWjtqPShjWzExODQrKGIqOTYwfDApKzc4ND4+Ml1eYmEpJlo7ZmE9KGNbMTE4NCsoYio5NjB8MCkrNzg4Pj4yXV5pYSkmWjtDPShjWzExODQrKGIqOTYwfDApKzc5Mj4+Ml1eXykmWjtjYT0oY1sxMTg0KyhiKjk2MHwwKSs3OTY+PjJdXmdhKSZaO2NbZT4+Ml09KGNbMTE4NCsoYio5NjB8MCkrNzYwPj4yXV5FKSZaXkU7Y1tmPj4yXT13XiQ7Y1tXPj4yXT1kYV5oYTtjW1U+PjJdPUdeeTtjW1M+PjJdPWFhXmVhO2NbUT4+Ml09SF5BO2NbTz4+Ml09al5iYTtjW00+PjJdPWZhXmlhO2NbSz4+Ml09Q15fO2NbST4+Ml09Y2FeZ2E7Z2E9Y1tnPj4yXXwwO2NhPWNbRj4+Ml18MDtfPWNbRD4+Ml18MDtDPWNbQj4+Ml18MDtpYT1jW3o+PjJdfDA7ZmE9Y1t4Pj4yXXwwO2JhPWNbdj4+Ml18MDtqPWNbaT4+Ml18MDtBPWNbdD4+Ml18MDtIPWNbdT4+Ml18MDtlYT0oY1sxMTg0KyhiKjk2MHwwKSs4MDQ+PjJdXmNhKSZaO2FhPShjWzExODQrKGIqOTYwfDApKzgwOD4+Ml1eXykmWjt5PShjWzExODQrKGIqOTYwfDApKzgxMj4+Ml1eQykmWjtHPShjWzExODQrKGIqOTYwfDApKzgxNj4+Ml1eaWEpJlo7aGE9KGNbMTE4NCsoYio5NjB8MCkrODIwPj4yXV5mYSkmWjtkYT0oY1sxMTg0KyhiKjk2MHwwKSs4MjQ+PjJdXmJhKSZaOyQ9KGNbMTE4NCsoYio5NjB8MCkrODI4Pj4yXV5qKSZaO3c9KGNbMTE4NCsoYio5NjB8MCkrODMyPj4yXV5BKSZaO0U9KGNbMTE4NCsoYio5NjB8MCkrODM2Pj4yXV5IKSZaO2NbZz4+Ml09KGNbMTE4NCsoYio5NjB8MCkrODAwPj4yXV5nYSkmWl5nYTtjW0Y+PjJdPWVhXmNhO2NbRD4+Ml09YWFeXztjW0I+PjJdPXleQztjW3o+PjJdPUdeaWE7Y1t4Pj4yXT1oYV5mYTtjW3Y+PjJdPWRhXmJhO2NbaT4+Ml09JF5qO2NbdD4+Ml09d15BO2NbdT4+Ml09RV5IO0g9Y1thPj4yXXwwO0U9Y1tkPj4yXXwwO0E9Y1trPj4yXXwwO3c9Y1tsPj4yXXwwO2o9Y1ttPj4yXXwwOyQ9Y1tuPj4yXXwwO2JhPWNbbz4+Ml18MDtkYT1jW3A+PjJdfDA7ZmE9Y1txPj4yXXwwO2hhPWNbcj4+Ml18MDtpYT0oaF44KSstMT4+MzE7Rz0oY1sxMTg0KyhiKjk2MHwwKSs4NDQ+PjJdXkUpJmlhO0M9KGNbMTE4NCsoYio5NjB8MCkrODQ4Pj4yXV5BKSZpYTt5PShjWzExODQrKGIqOTYwfDApKzg1Mj4+Ml1edykmaWE7aD0oY1sxMTg0KyhiKjk2MHwwKSs4NTY+PjJdXmopJmlhO189KGNbMTE4NCsoYio5NjB8MCkrODYwPj4yXV4kKSZpYTthYT0oY1sxMTg0KyhiKjk2MHwwKSs4NjQ+PjJdXmJhKSZpYTtjYT0oY1sxMTg0KyhiKjk2MHwwKSs4Njg+PjJdXmRhKSZpYTtlYT0oY1sxMTg0KyhiKjk2MHwwKSs4NzI+PjJdXmZhKSZpYTtnYT0oY1sxMTg0KyhiKjk2MHwwKSs4NzY+PjJdXmhhKSZpYTtjW2E+PjJdPShjWzExODQrKGIqOTYwfDApKzg0MD4+Ml1eSCkmaWFeSDtjW2Q+PjJdPUdeRTtjW2s+PjJdPUNeQTtjW2w+PjJdPXledztjW20+PjJdPWheajtjW24+PjJdPV9eJDtjW28+PjJdPWFhXmJhO2NbcD4+Ml09Y2FeZGE7Y1txPj4yXT1lYV5mYTtjW3I+PjJdPWdhXmhhO2hhPWNbZT4+Ml18MDtnYT1jW2Y+PjJdfDA7ZmE9Y1tXPj4yXXwwO2VhPWNbVT4+Ml18MDtkYT1jW1M+PjJdfDA7Y2E9Y1tRPj4yXXwwO2JhPWNbTz4+Ml18MDthYT1jW00+PjJdfDA7JD1jW0s+PjJdfDA7Xz1jW0k+PjJdfDA7aj0oY1sxMTg0KyhiKjk2MHwwKSs4ODQ+PjJdXmdhKSZpYTtoPShjWzExODQrKGIqOTYwfDApKzg4OD4+Ml1eZmEpJmlhO3c9KGNbMTE4NCsoYio5NjB8MCkrODkyPj4yXV5lYSkmaWE7eT0oY1sxMTg0KyhiKjk2MHwwKSs4OTY+PjJdXmRhKSZpYTtBPShjWzExODQrKGIqOTYwfDApKzkwMD4+Ml1eY2EpJmlhO0M9KGNbMTE4NCsoYio5NjB8MCkrOTA0Pj4yXV5iYSkmaWE7RT0oY1sxMTg0KyhiKjk2MHwwKSs5MDg+PjJdXmFhKSZpYTtHPShjWzExODQrKGIqOTYwfDApKzkxMj4+Ml1eJCkmaWE7SD0oY1sxMTg0KyhiKjk2MHwwKSs5MTY+PjJdXl8pJmlhO2hhPShjWzExODQrKGIqOTYwfDApKzg4MD4+Ml1eaGEpJmlhXmhhO2NbZT4+Ml09aGE7Z2E9al5nYTtjW2Y+PjJdPWdhO2ZhPWheZmE7Y1tXPj4yXT1mYTtlYT13XmVhO2NbVT4+Ml09ZWE7ZGE9eV5kYTtjW1M+PjJdPWRhO2NhPUFeY2E7Y1tRPj4yXT1jYTtiYT1DXmJhO2NbTz4+Ml09YmE7YWE9RV5hYTtjW00+PjJdPWFhOyQ9R14kO2NbSz4+Ml09JDtfPUheXztjW0k+PjJdPV87SD1jW2c+PjJdfDA7Rz1jW0Y+PjJdfDA7RT1jW0Q+PjJdfDA7Qz1jW0I+PjJdfDA7QT1jW3o+PjJdfDA7eT1jW3g+PjJdfDA7dz1jW3Y+PjJdfDA7aD1jW2k+PjJdfDA7aj1jW3Q+PjJdfDA7Wj1jW3U+PjJdfDA7Sj0oY1sxMTg0KyhiKjk2MHwwKSs5MjQ+PjJdXkcpJmlhO0w9KGNbMTE4NCsoYio5NjB8MCkrOTI4Pj4yXV5FKSZpYTtOPShjWzExODQrKGIqOTYwfDApKzkzMj4+Ml1eQykmaWE7UD0oY1sxMTg0KyhiKjk2MHwwKSs5MzY+PjJdXkEpJmlhO1I9KGNbMTE4NCsoYio5NjB8MCkrOTQwPj4yXV55KSZpYTtUPShjWzExODQrKGIqOTYwfDApKzk0ND4+Ml1edykmaWE7Vj0oY1sxMTg0KyhiKjk2MHwwKSs5NDg+PjJdXmgpJmlhO1g9KGNbMTE4NCsoYio5NjB8MCkrOTUyPj4yXV5qKSZpYTtZPShjWzExODQrKGIqOTYwfDApKzk1Nj4+Ml1eWikmaWE7SD0oY1sxMTg0KyhiKjk2MHwwKSs5MjA+PjJdXkgpJmlhXkg7Y1tnPj4yXT1IO0c9Sl5HO2NbRj4+Ml09RztFPUxeRTtjW0Q+PjJdPUU7Qz1OXkM7Y1tCPj4yXT1DO0E9UF5BO2Nbej4+Ml09QTt5PVJeeTtjW3g+PjJdPXk7dz1UXnc7Y1t2Pj4yXT13O2g9Vl5oO2NbaT4+Ml09aDtqPVheajtjW3Q+PjJdPWo7Yj1ZXlo7Y1t1Pj4yXT1iO1o9Y1thPj4yXXwwO1k9Y1tkPj4yXXwwO1g9Y1trPj4yXXwwO1Y9Y1tsPj4yXXwwO1Q9Y1ttPj4yXXwwO1I9Y1tuPj4yXXwwO1A9Y1tvPj4yXXwwO049Y1twPj4yXXwwO0w9Y1txPj4yXXwwO0o9Y1tyPj4yXXwwO2NbYT4+Ml09KGhhXlopJnNeWjtjW2Q+PjJdPShnYV5ZKSZzXlk7Y1trPj4yXT0oZmFeWCkmc15YO2NbbD4+Ml09KGVhXlYpJnNeVjtjW20+PjJdPShkYV5UKSZzXlQ7Y1tuPj4yXT0oY2FeUikmc15SO2Nbbz4+Ml09KGJhXlApJnNeUDtjW3A+PjJdPShhYV5OKSZzXk47Y1txPj4yXT0oJF5MKSZzXkw7Y1tyPj4yXT0oX15KKSZzXko7ZD1jW2U+PjJdfDA7YT1jW2Y+PjJdfDA7cj1jW1c+PjJdfDA7cT1jW1U+PjJdfDA7cD1jW1M+PjJdfDA7bz1jW1E+PjJdfDA7bj1jW08+PjJdfDA7bT1jW00+PjJdfDA7bD1jW0s+PjJdfDA7az1jW0k+PjJdfDA7Y1tlPj4yXT0oWl5kKSZzXmQ7Y1tmPj4yXT0oWV5hKSZzXmE7Y1tXPj4yXT0oWF5yKSZzXnI7Y1tVPj4yXT0oVl5xKSZzXnE7Y1tTPj4yXT0oVF5wKSZzXnA7Y1tRPj4yXT0oUl5vKSZzXm87Y1tPPj4yXT0oUF5uKSZzXm47Y1tNPj4yXT0oTl5tKSZzXm07Y1tLPj4yXT0oTF5sKSZzXmw7Y1tJPj4yXT0oSl5rKSZzXms7Zj1jW2c+PjJdfDA7az1jW0Y+PjJdfDA7bD1jW0Q+PjJdfDA7bT1jW0I+PjJdfDA7bj1jW3o+PjJdfDA7bz1jW3g+PjJdfDA7cD1jW3Y+PjJdfDA7cT1jW2k+PjJdfDA7cj1jW3Q+PjJdfDA7YT1jW3U+PjJdfDA7Y1tnPj4yXT0oZl4wLUgpJnNeZjtjW0Y+PjJdPShrXjAtRykmc15rO2NbRD4+Ml09KGxeMC1FKSZzXmw7Y1tCPj4yXT0obV4wLUMpJnNebTtjW3o+PjJdPShuXjAtQSkmc15uO2NbeD4+Ml09KG9eMC15KSZzXm87Y1t2Pj4yXT0ocF4wLXcpJnNecDtjW2k+PjJdPShxXjAtaCkmc15xO2NbdD4+Ml09KHJeMC1qKSZzXnI7Y1t1Pj4yXT0oYV4wLWIpJnNeYTtyZXR1cm59ZnVuY3Rpb24gVGMoYSxiKXthPWF8MDtiPWJ8MDt2YXIgZD0wLGU9MCxmPTAsZz0wLGg9MCxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTAsdD0wLHU9MCx2PTAsdz0wLHg9MCx5PTAsej0wO2c9aTtlPWk9aSs2MyYtNjQ7aT1pKzI0MHwwO2Q9ZSs4MHwwO2Y9ZSs0MHwwO2lmKE5jKGQsYil8MCl7Zj0tMTtpPWc7cmV0dXJuIGZ8MH15PWUrNHwwO2NbeT4+Ml09MDtjW3krND4+Ml09MDtjW3krOD4+Ml09MDtjW3krMTI+PjJdPTA7Y1t5KzE2Pj4yXT0wO2NbeSsyMD4+Ml09MDtjW3krMjQ+PjJdPTA7Y1t5KzI4Pj4yXT0wO3E9ZCs0MHwwO3A9ZCs0NHwwO249ZCs0OHwwO209ZCs1MnwwO2w9ZCs1NnwwO2s9ZCs2MHwwO2o9ZCs2NHwwO2g9ZCs2OHwwO3I9ZCs3MnwwO2I9ZCs3NnwwO3o9MC0oY1twPj4yXXwwKXwwO3g9MC0oY1tuPj4yXXwwKXwwO3c9MC0oY1ttPj4yXXwwKXwwO3Y9MC0oY1tsPj4yXXwwKXwwO3U9MC0oY1trPj4yXXwwKXwwO3Q9MC0oY1tqPj4yXXwwKXwwO3M9MC0oY1toPj4yXXwwKXwwO2Q9MC0oY1tyPj4yXXwwKXwwO289MC0oY1tiPj4yXXwwKXwwO2NbZT4+Ml09MS0oY1txPj4yXXwwKTtjW3k+PjJdPXo7Y1tlKzg+PjJdPXg7Y1tlKzEyPj4yXT13O2NbZSsxNj4+Ml09djtjW2UrMjA+PjJdPXU7Y1tlKzI0Pj4yXT10O2NbZSsyOD4+Ml09cztjW2UrMzI+PjJdPWQ7Y1tlKzM2Pj4yXT1vO0ljKGUsZSk7bz1mKzR8MDtjW28+PjJdPTA7Y1tvKzQ+PjJdPTA7Y1tvKzg+PjJdPTA7Y1tvKzEyPj4yXT0wO2NbbysxNj4+Ml09MDtjW28rMjA+PjJdPTA7Y1tvKzI0Pj4yXT0wO2NbbysyOD4+Ml09MDtwPWNbcD4+Ml18MDtuPWNbbj4+Ml18MDttPWNbbT4+Ml18MDtsPWNbbD4+Ml18MDtrPWNbaz4+Ml18MDtqPWNbaj4+Ml18MDtoPWNbaD4+Ml18MDtkPWNbcj4+Ml18MDtiPWNbYj4+Ml18MDtjW2Y+PjJdPShjW3E+PjJdfDApKzE7Y1tvPj4yXT1wO2NbZis4Pj4yXT1uO2NbZisxMj4+Ml09bTtjW2YrMTY+PjJdPWw7Y1tmKzIwPj4yXT1rO2NbZisyND4+Ml09ajtjW2YrMjg+PjJdPWg7Y1tmKzMyPj4yXT1kO2NbZiszNj4+Ml09YjtKYyhmLGYsZSk7TGMoYSxmKTtmPTA7aT1nO3JldHVybiBmfDB9ZnVuY3Rpb24gVWMoYixlKXtiPWJ8MDtlPWV8MDt2YXIgZj0wLGc9MCxoPTAsaj0wLGs9MCxsPTAsbT0wO2s9aTtnPWk9aSs2MyYtNjQ7aT1pKzI3MnwwO2g9ZztnPWcrMjA4fDA7Zj1oKzY0fDA7aj1oO2w9ODttPWorNjR8MDtkb3tjW2o+PjJdPWNbbD4+Ml07aj1qKzR8MDtsPWwrNHwwfXdoaWxlKChqfDApPChtfDApKTtqPWgrNzJ8MDtjW2o+PjJdPTI1NjtjW2orND4+Ml09MDtqPWY7Y1tqPj4yXT0wO2Nbais0Pj4yXT0wO2o9aCs4MHwwO2w9ZTttPWorMzJ8MDtkb3thW2o+PjBdPWFbbD4+MF18MDtqPWorMXwwO2w9bCsxfDB9d2hpbGUoKGp8MCk8KG18MCkpO0diKGgsZyk7YVtnPj4wXT0oZFtnPj4wXXwwKSYyNDg7aj1nKzMxfDA7YVtqPj4wXT0oZFtqPj4wXXwwKSY2M3w2NDtqPWI7bD1nO209aiszMnwwO2Rve2Fbaj4+MF09YVtsPj4wXXwwO2o9aisxfDA7bD1sKzF8MH13aGlsZSgoanwwKTwobXwwKSk7aT1rO3JldHVybiAwfWZ1bmN0aW9uIFZjKGIsZSxmLGcsaCl7Yj1ifDA7ZT1lfDA7Zj1mfDA7Zz1nfDA7aD1ofDA7dmFyIGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wLHM9MCx0PTAsdT0wLHY9MCx3PTAseD0wLHk9MCx6PTAsQT0wLEI9MCxDPTAsRD0wLEU9MCxGPTAsRz0wLEg9MCxJPTAsSj0wLEs9MCxMPTAsTT0wLE49MCxPPTAsUD0wLFE9MCxSPTAsUz0wLFQ9MCxVPTAsVj0wLFc9MCxYPTAsWT0wLFo9MCxfPTAsJD0wLGFhPTAsYmE9MCxjYT0wLGRhPTAsZWE9MCxmYT0wLGdhPTAsaGE9MCxpYT0wLGphPTAsa2E9MCxsYT0wLG1hPTAsbmE9MCxvYT0wLHBhPTAscWE9MCxyYT0wLHNhPTAsdGE9MCx1YT0wLHZhPTAsd2E9MCx4YT0wLHlhPTAsemE9MCxBYT0wLEJhPTAsQ2E9MCxEYT0wLEVhPTAsRmE9MCxHYT0wLEhhPTAsSWE9MCxKYT0wLEthPTAsTGE9MCxNYT0wLE5hPTAsT2E9MCxQYT0wLFFhPTAsUmE9MCxTYT0wLFRhPTAsVWE9MCxWYT0wLFdhPTAsWGE9MCxZYT0wLFphPTAsX2E9MCwkYT0wLGFiPTAsYmI9MCxjYj0wLGRiPTAsZWI9MCxmYj0wLGdiPTAsaGI9MCxpYj0wLGpiPTAsa2I9MCxsYj0wLG1iPTAsbmI9MCxvYj0wLHBiPTAscWI9MCxyYj0wO1FhPWk7aj1pPWkrNjMmLTY0O2k9aSszMDI0fDA7TWE9aisyODAwfDA7TmE9aisyNTQ0fDA7T2E9aisyMjg4fDA7az1qKzIyNDh8MDtKYT1qKzk2OHwwO0thPWorODA4fDA7TGE9ais2NDh8MDt0PWorNDg4fDA7bj1qO3A9aisyOTUyfDA7UGE9aisyOTIwfDA7cz1qKzMyOHwwO2o9aisyMDh8MDtpZigoZFtiKzYzPj4wXXwwKT4zMSl7Yj0tMTtpPVFhO3JldHVybiBifDB9aWYoTmMocyxoKXwwKXtiPS0xO2k9UWE7cmV0dXJuIGJ8MH1pZighKChhW2grMzE+PjBdfChhW2grMzA+PjBdfChhW2grMjk+PjBdfChhW2grMjg+PjBdfChhW2grMjc+PjBdfChhW2grMjY+PjBdfChhW2grMjU+PjBdfChhW2grMjQ+PjBdfChhW2grMjM+PjBdfChhW2grMjI+PjBdfChhW2grMjE+PjBdfChhW2grMjA+PjBdfChhW2grMTk+PjBdfChhW2grMTg+PjBdfChhW2grMTc+PjBdfChhW2grMTY+PjBdfChhW2grMTU+PjBdfChhW2grMTQ+PjBdfChhW2grMTM+PjBdfChhW2grMTI+PjBdfChhW2grMTE+PjBdfChhW2grMTA+PjBdfChhW2grOT4+MF18KGFbaCs4Pj4wXXwoYVtoKzc+PjBdfChhW2grNj4+MF18KGFbaCs1Pj4wXXwoYVtoKzQ+PjBdfChhW2grMz4+MF18KGFbaCsyPj4wXXwoYVtoKzE+PjBdfGFbaD4+MF0pKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpPDwyND4+MjQpKXtiPS0xO2k9UWE7cmV0dXJuIGJ8MH1sPW4rNjR8MDtxPWw7Y1txPj4yXT0wO2NbcSs0Pj4yXT0wO3E9bjtvPTg7cj1xKzY0fDA7ZG97Y1txPj4yXT1jW28+PjJdO3E9cSs0fDA7bz1vKzR8MH13aGlsZSgocXwwKTwocnwwKSk7bT1uKzcyfDA7cT1tO2NbcT4+Ml09MjU2O2NbcSs0Pj4yXT0wO3E9bDtjW3E+PjJdPTA7Y1txKzQ+PjJdPTA7cT1uKzgwfDA7bz1iO3I9cSszMnwwO2Rve2FbcT4+MF09YVtvPj4wXXwwO3E9cSsxfDA7bz1vKzF8MH13aGlsZSgocXwwKTwocnwwKSk7cT1tO2NbcT4+Ml09NTEyO2NbcSs0Pj4yXT0wO3E9bDtjW3E+PjJdPTA7Y1txKzQ+PjJdPTA7cT1uKzExMnwwO289aDtyPXErMzJ8MDtkb3thW3E+PjBdPWFbbz4+MF18MDtxPXErMXwwO289bysxfDB9d2hpbGUoKHF8MCk8KHJ8MCkpO0ZiKG4sZSxmLGcpO0diKG4scCk7V2MocCk7Zj0wO2Rve2FbTmErZj4+MF09KGRbcCsoZj4+Myk+PjBdfDApPj4+KGYmNykmMTtmPWYrMXwwfXdoaWxlKChmfDApIT0yNTYpO3A9YiszMnwwO289MDt3aGlsZSgxKXtlPU5hK298MDthOmRvIGlmKGFbZT4+MF18MCl7aD0xO2Rve2c9aCtvfDA7aWYoKGd8MCk+PTI1NilicmVhayBhO209TmErZ3wwO2Y9YVttPj4wXXwwO2I6ZG8gaWYoZjw8MjQ+PjI0KXtuPWFbZT4+MF18MDtmPWY8PDI0Pj4yNDw8aDtsPW4rZnwwO2lmKChsfDApPDE2KXthW2U+PjBdPWw7YVttPj4wXT0wO2JyZWFrfWY9bi1mfDA7aWYoKGZ8MCk8PS0xNilicmVhayBhO2FbZT4+MF09Zjt3aGlsZSgxKXtmPU5hK2d8MDtpZighKGFbZj4+MF18MCkpYnJlYWs7YVtmPj4wXT0wO2c9ZysxfDA7aWYoKGd8MCk+PTI1NilicmVhayBifWFbZj4+MF09MX13aGlsZSgwKTtoPWgrMXwwfXdoaWxlKChofDApPDcpfXdoaWxlKDApO289bysxfDA7aWYoKG98MCk9PTI1Nil7Zj0wO2JyZWFrfX1kb3thW09hK2Y+PjBdPShkW3ArKGY+PjMpPj4wXXwwKT4+PihmJjcpJjE7Zj1mKzF8MH13aGlsZSgoZnwwKSE9MjU2KTtvPTA7ZG97ZT1PYStvfDA7YzpkbyBpZihhW2U+PjBdfDApe2g9MTtkb3tnPWgrb3wwO2lmKChnfDApPj0yNTYpYnJlYWsgYzttPU9hK2d8MDtmPWFbbT4+MF18MDtkOmRvIGlmKGY8PDI0Pj4yNCl7bj1hW2U+PjBdfDA7Zj1mPDwyND4+MjQ8PGg7bD1uK2Z8MDtpZigobHwwKTwxNil7YVtlPj4wXT1sO2FbbT4+MF09MDticmVha31mPW4tZnwwO2lmKChmfDApPD0tMTYpYnJlYWsgYzthW2U+PjBdPWY7d2hpbGUoMSl7Zj1PYStnfDA7aWYoIShhW2Y+PjBdfDApKWJyZWFrO2FbZj4+MF09MDtnPWcrMXwwO2lmKChnfDApPj0yNTYpYnJlYWsgZH1hW2Y+PjBdPTF9d2hpbGUoMCk7aD1oKzF8MH13aGlsZSgoaHwwKTw3KX13aGlsZSgwKTtvPW8rMXwwfXdoaWxlKChvfDApIT0yNTYpO1FjKEphLHMpO0lhPWNbcys0Pj4yXXwwO3I9Y1tzKzg+PjJdfDA7cT1jW3MrMTI+PjJdfDA7R2E9Y1tzKzE2Pj4yXXwwO0ZhPWNbcysyMD4+Ml18MDtFYT1jW3MrMjQ+PjJdfDA7RGE9Y1tzKzI4Pj4yXXwwO0NhPWNbcyszMj4+Ml18MDtCYT1jW3MrMzY+PjJdfDA7Y1tNYT4+Ml09Y1tzPj4yXTtjW01hKzQ+PjJdPUlhO2NbTWErOD4+Ml09cjtjW01hKzEyPj4yXT1xO2NbTWErMTY+PjJdPUdhO2NbTWErMjA+PjJdPUZhO2NbTWErMjQ+PjJdPUVhO2NbTWErMjg+PjJdPURhO2NbTWErMzI+PjJdPUNhO2NbTWErMzY+PjJdPUJhO0JhPWNbcys0ND4+Ml18MDtDYT1jW3MrNDg+PjJdfDA7RGE9Y1tzKzUyPj4yXXwwO0VhPWNbcys1Nj4+Ml18MDtGYT1jW3MrNjA+PjJdfDA7R2E9Y1tzKzY0Pj4yXXwwO3E9Y1tzKzY4Pj4yXXwwO3I9Y1tzKzcyPj4yXXwwO0lhPWNbcys3Nj4+Ml18MDtjW01hKzQwPj4yXT1jW3MrNDA+PjJdO2NbTWErNDQ+PjJdPUJhO2NbTWErNDg+PjJdPUNhO2NbTWErNTI+PjJdPURhO2NbTWErNTY+PjJdPUVhO2NbTWErNjA+PjJdPUZhO2NbTWErNjQ+PjJdPUdhO2NbTWErNjg+PjJdPXE7Y1tNYSs3Mj4+Ml09cjtjW01hKzc2Pj4yXT1JYTtJYT1jW3MrODQ+PjJdfDA7cj1jW3MrODg+PjJdfDA7cT1jW3MrOTI+PjJdfDA7R2E9Y1tzKzk2Pj4yXXwwO0ZhPWNbcysxMDA+PjJdfDA7RWE9Y1tzKzEwND4+Ml18MDtEYT1jW3MrMTA4Pj4yXXwwO0NhPWNbcysxMTI+PjJdfDA7QmE9Y1tzKzExNj4+Ml18MDtjW01hKzgwPj4yXT1jW3MrODA+PjJdO2NbTWErODQ+PjJdPUlhO2NbTWErODg+PjJdPXI7Y1tNYSs5Mj4+Ml09cTtjW01hKzk2Pj4yXT1HYTtjW01hKzEwMD4+Ml09RmE7Y1tNYSsxMDQ+PjJdPUVhO2NbTWErMTA4Pj4yXT1EYTtjW01hKzExMj4+Ml09Q2E7Y1tNYSsxMTY+PjJdPUJhO1BjKEthLE1hKTtCYT1LYSsxMjB8MDtKYyh0LEthLEJhKTtDYT1LYSs0MHwwO0RhPUthKzgwfDA7SmModCs0MHwwLENhLERhKTtKYyh0KzgwfDAsRGEsQmEpO0pjKHQrMTIwfDAsS2EsQ2EpO01jKEthLHQsSmEpO0pjKExhLEthLEJhKTtFYT1MYSs0MHwwO0pjKEVhLENhLERhKTtGYT1MYSs4MHwwO0pjKEZhLERhLEJhKTtHYT1MYSsxMjB8MDtKYyhHYSxLYSxDYSk7cT1KYSsxNjB8MDtRYyhxLExhKTtNYyhLYSx0LHEpO0pjKExhLEthLEJhKTtKYyhFYSxDYSxEYSk7SmMoRmEsRGEsQmEpO0pjKEdhLEthLENhKTtxPUphKzMyMHwwO1FjKHEsTGEpO01jKEthLHQscSk7SmMoTGEsS2EsQmEpO0pjKEVhLENhLERhKTtKYyhGYSxEYSxCYSk7SmMoR2EsS2EsQ2EpO3E9SmErNDgwfDA7UWMocSxMYSk7TWMoS2EsdCxxKTtKYyhMYSxLYSxCYSk7SmMoRWEsQ2EsRGEpO0pjKEZhLERhLEJhKTtKYyhHYSxLYSxDYSk7cT1KYSs2NDB8MDtRYyhxLExhKTtNYyhLYSx0LHEpO0pjKExhLEthLEJhKTtKYyhFYSxDYSxEYSk7SmMoRmEsRGEsQmEpO0pjKEdhLEthLENhKTtxPUphKzgwMHwwO1FjKHEsTGEpO01jKEthLHQscSk7SmMoTGEsS2EsQmEpO0pjKEVhLENhLERhKTtKYyhGYSxEYSxCYSk7SmMoR2EsS2EsQ2EpO3E9SmErOTYwfDA7UWMocSxMYSk7TWMoS2EsdCxxKTtKYyhMYSxLYSxCYSk7SmMoRWEsQ2EsRGEpO0pjKEZhLERhLEJhKTtKYyhHYSxLYSxDYSk7UWMoSmErMTEyMHwwLExhKTtxPWo7cj1xKzQwfDA7ZG97Y1txPj4yXT0wO3E9cSs0fDB9d2hpbGUoKHF8MCk8KHJ8MCkpO0hhPWorNDB8MDtjW0hhPj4yXT0xO3E9ais0NHwwO3I9cSszNnwwO2Rve2NbcT4+Ml09MDtxPXErNHwwfXdoaWxlKChxfDApPChyfDApKTtJYT1qKzgwfDA7Y1tJYT4+Ml09MTtxPWorODR8MDtyPXErMzZ8MDtkb3tjW3E+PjJdPTA7cT1xKzR8MH13aGlsZSgocXwwKTwocnwwKSk7Zz0yNTU7d2hpbGUoMSl7aWYoYVtOYStnPj4wXXwwKXtmPWc7YnJlYWt9aWYoYVtPYStnPj4wXXwwKXtmPWc7YnJlYWt9Zj1nKy0xfDA7aWYoKGd8MCk+MClnPWY7ZWxzZSBicmVha31pZigoZnwwKT4tMSl7bD1MYSs0NHwwO209TGErNDh8MDtuPUxhKzUyfDA7ZT1MYSs1NnwwO2g9TGErNjB8MDtvPUxhKzY0fDA7cD1MYSs2OHwwO3E9TGErNzJ8MDtyPUxhKzc2fDA7cz1MYSs0fDA7dD1MYSs4fDA7dT1MYSsxMnwwO3Y9TGErMTZ8MDt3PUxhKzIwfDA7eD1MYSsyNHwwO3k9TGErMjh8MDt6PUxhKzMyfDA7QT1MYSszNnwwO0I9S2ErNHwwO0M9S2ErOHwwO0Q9S2ErMTJ8MDtFPUthKzE2fDA7Rj1LYSsyMHwwO0c9S2ErMjR8MDtIPUthKzI4fDA7ST1LYSszMnwwO0o9S2ErMzZ8MDtLPUthKzQ0fDA7TD1LYSs0OHwwO009S2ErNTJ8MDtOPUthKzU2fDA7Tz1LYSs2MHwwO1A9S2ErNjR8MDtRPUthKzY4fDA7Uj1LYSs3MnwwO1M9S2ErNzZ8MDtUPUxhKzg0fDA7VT1MYSs4OHwwO1Y9TGErOTJ8MDtXPUxhKzk2fDA7WD1MYSsxMDB8MDtZPUxhKzEwNHwwO1o9TGErMTA4fDA7Xz1MYSsxMTJ8MDskPUxhKzExNnwwO2FhPWsrNHwwO2JhPWsrOHwwO2NhPWsrMTJ8MDtkYT1rKzE2fDA7ZWE9aysyMHwwO2ZhPWsrMjR8MDtnYT1rKzI4fDA7aGE9ayszMnwwO2lhPWsrMzZ8MDtqYT1LYSs4NHwwO2thPUthKzg4fDA7bGE9S2ErOTJ8MDttYT1LYSs5NnwwO25hPUthKzEwMHwwO29hPUthKzEwNHwwO3BhPUthKzEwOHwwO3FhPUthKzExMnwwO3JhPUthKzExNnwwO3NhPUthKzEyNHwwO3RhPUthKzEyOHwwO3VhPUthKzEzMnwwO3ZhPUthKzEzNnwwO3dhPUthKzE0MHwwO3hhPUthKzE0NHwwO3lhPUthKzE0OHwwO3phPUthKzE1MnwwO0FhPUthKzE1NnwwO3doaWxlKDEpe1BjKEthLGopO2c9YVtOYStmPj4wXXwwO2lmKGc8PDI0Pj4yNDw9MCl7aWYoZzw8MjQ+PjI0PDApe0pjKExhLEthLEJhKTtKYyhFYSxDYSxEYSk7SmMoRmEsRGEsQmEpO0pjKEdhLEthLENhKTtoYj0oZzw8MjQ+PjI0fDApLy0yfDA7cmI9Y1tFYT4+Ml18MDtYYT1jW2w+PjJdfDA7VGE9Y1ttPj4yXXwwO2liPWNbbj4+Ml18MDttYj1jW2U+PjJdfDA7cWI9Y1toPj4yXXwwOyRhPWNbbz4+Ml18MDtiYj1jW3A+PjJdfDA7ZGI9Y1txPj4yXXwwO2ZiPWNbcj4+Ml18MDtaYT1jW0xhPj4yXXwwO1ZhPWNbcz4+Ml18MDtSYT1jW3Q+PjJdfDA7a2I9Y1t1Pj4yXXwwO29iPWNbdj4+Ml18MDtfYT1jW3c+PjJdfDA7YWI9Y1t4Pj4yXXwwO2NiPWNbeT4+Ml18MDtlYj1jW3o+PjJdfDA7Z2I9Y1tBPj4yXXwwO2NbS2E+PjJdPVphK3JiO2NbQj4+Ml09VmErWGE7Y1tDPj4yXT1SYStUYTtjW0Q+PjJdPWtiK2liO2NbRT4+Ml09b2IrbWI7Y1tGPj4yXT1fYStxYjtjW0c+PjJdPWFiKyRhO2NbSD4+Ml09Y2IrYmI7Y1tJPj4yXT1lYitkYjtjW0o+PjJdPWdiK2ZiO2NbQ2E+PjJdPXJiLVphO2NbSz4+Ml09WGEtVmE7Y1tMPj4yXT1UYS1SYTtjW00+PjJdPWliLWtiO2NbTj4+Ml09bWItb2I7Y1tPPj4yXT1xYi1fYTtjW1A+PjJdPSRhLWFiO2NbUT4+Ml09YmItY2I7Y1tSPj4yXT1kYi1lYjtjW1M+PjJdPWZiLWdiO0pjKERhLEthLEphKyhoYioxNjB8MCkrNDB8MCk7SmMoQ2EsQ2EsSmErKGhiKjE2MHwwKXwwKTtKYyhCYSxKYSsoaGIqMTYwfDApKzEyMHwwLEdhKTtKYyhLYSxGYSxKYSsoaGIqMTYwfDApKzgwfDApO2hiPWNbS2E+PjJdPDwxO2diPWNbQj4+Ml08PDE7ZmI9Y1tDPj4yXTw8MTtlYj1jW0Q+PjJdPDwxO2RiPWNbRT4+Ml08PDE7Y2I9Y1tGPj4yXTw8MTtiYj1jW0c+PjJdPDwxO2FiPWNbSD4+Ml08PDE7JGE9Y1tJPj4yXTw8MTtfYT1jW0o+PjJdPDwxO2Nbaz4+Ml09aGI7Y1thYT4+Ml09Z2I7Y1tiYT4+Ml09ZmI7Y1tjYT4+Ml09ZWI7Y1tkYT4+Ml09ZGI7Y1tlYT4+Ml09Y2I7Y1tmYT4+Ml09YmI7Y1tnYT4+Ml09YWI7Y1toYT4+Ml09JGE7Y1tpYT4+Ml09X2E7cWI9Y1tEYT4+Ml18MDtvYj1jW2phPj4yXXwwO21iPWNba2E+PjJdfDA7a2I9Y1tsYT4+Ml18MDtpYj1jW21hPj4yXXwwO1JhPWNbbmE+PjJdfDA7VGE9Y1tvYT4+Ml18MDtWYT1jW3BhPj4yXXwwO1hhPWNbcWE+PjJdfDA7WmE9Y1tyYT4+Ml18MDtyYj1jW0NhPj4yXXwwO3BiPWNbSz4+Ml18MDtuYj1jW0w+PjJdfDA7bGI9Y1tNPj4yXXwwO2piPWNbTj4+Ml18MDtnPWNbTz4+Ml18MDtTYT1jW1A+PjJdfDA7VWE9Y1tRPj4yXXwwO1dhPWNbUj4+Ml18MDtZYT1jW1M+PjJdfDA7Y1tLYT4+Ml09cWItcmI7Y1tCPj4yXT1vYi1wYjtjW0M+PjJdPW1iLW5iO2NbRD4+Ml09a2ItbGI7Y1tFPj4yXT1pYi1qYjtjW0Y+PjJdPVJhLWc7Y1tHPj4yXT1UYS1TYTtjW0g+PjJdPVZhLVVhO2NbST4+Ml09WGEtV2E7Y1tKPj4yXT1aYS1ZYTtjW0NhPj4yXT1yYitxYjtjW0s+PjJdPXBiK29iO2NbTD4+Ml09bmIrbWI7Y1tNPj4yXT1sYitrYjtjW04+PjJdPWpiK2liO2NbTz4+Ml09ZytSYTtjW1A+PjJdPVNhK1RhO2NbUT4+Ml09VWErVmE7Y1tSPj4yXT1XYStYYTtjW1M+PjJdPVlhK1phO1phPWNbQmE+PjJdfDA7WWE9Y1tzYT4+Ml18MDtYYT1jW3RhPj4yXXwwO1dhPWNbdWE+PjJdfDA7VmE9Y1t2YT4+Ml18MDtVYT1jW3dhPj4yXXwwO1RhPWNbeGE+PjJdfDA7U2E9Y1t5YT4+Ml18MDtSYT1jW3phPj4yXXwwO2c9Y1tBYT4+Ml18MDtjW0RhPj4yXT1oYi1aYTtjW2phPj4yXT1nYi1ZYTtjW2thPj4yXT1mYi1YYTtjW2xhPj4yXT1lYi1XYTtjW21hPj4yXT1kYi1WYTtjW25hPj4yXT1jYi1VYTtjW29hPj4yXT1iYi1UYTtjW3BhPj4yXT1hYi1TYTtjW3FhPj4yXT0kYS1SYTtjW3JhPj4yXT1fYS1nO1lhPVlhKyhjW2FhPj4yXXwwKXwwO1hhPVhhKyhjW2JhPj4yXXwwKXwwO1dhPVdhKyhjW2NhPj4yXXwwKXwwO1ZhPVZhKyhjW2RhPj4yXXwwKXwwO1VhPVVhKyhjW2VhPj4yXXwwKXwwO1RhPVRhKyhjW2ZhPj4yXXwwKXwwO1NhPVNhKyhjW2dhPj4yXXwwKXwwO1JhPVJhKyhjW2hhPj4yXXwwKXwwO2c9ZysoY1tpYT4+Ml18MCl8MDtjW0JhPj4yXT1aYSsoY1trPj4yXXwwKTtjW3NhPj4yXT1ZYTtjW3RhPj4yXT1YYTtjW3VhPj4yXT1XYTtjW3ZhPj4yXT1WYTtjW3dhPj4yXT1VYTtjW3hhPj4yXT1UYTtjW3lhPj4yXT1TYTtjW3phPj4yXT1SYTtjW0FhPj4yXT1nfX1lbHNle0pjKExhLEthLEJhKTtKYyhFYSxDYSxEYSk7SmMoRmEsRGEsQmEpO0pjKEdhLEthLENhKTtNYyhLYSxMYSxKYSsoKChnPDwyND4+MjR8MCkvMnwwKSoxNjB8MCl8MCl9Zz1hW09hK2Y+PjBdfDA7aWYoZzw8MjQ+PjI0PD0wKXtpZihnPDwyND4+MjQ8MCl7SmMoTGEsS2EsQmEpO0pjKEVhLENhLERhKTtKYyhGYSxEYSxCYSk7SmMoR2EsS2EsQ2EpO19hPShnPDwyND4+MjR8MCkvLTJ8MDtnPWNbRWE+PjJdfDA7a2I9Y1tsPj4yXXwwO29iPWNbbT4+Ml18MDtaYT1jW24+PjJdfDA7VmE9Y1tlPj4yXXwwO1JhPWNbaD4+Ml18MDtnYj1jW28+PjJdfDA7ZWI9Y1twPj4yXXwwO2NiPWNbcT4+Ml18MDthYj1jW3I+PjJdfDA7aWI9Y1tMYT4+Ml18MDttYj1jW3M+PjJdfDA7cWI9Y1t0Pj4yXXwwO1hhPWNbdT4+Ml18MDtUYT1jW3Y+PjJdfDA7aGI9Y1t3Pj4yXXwwO2ZiPWNbeD4+Ml18MDtkYj1jW3k+PjJdfDA7YmI9Y1t6Pj4yXXwwOyRhPWNbQT4+Ml18MDtjW0thPj4yXT1pYitnO2NbQj4+Ml09bWIra2I7Y1tDPj4yXT1xYitvYjtjW0Q+PjJdPVhhK1phO2NbRT4+Ml09VGErVmE7Y1tGPj4yXT1oYitSYTtjW0c+PjJdPWZiK2diO2NbSD4+Ml09ZGIrZWI7Y1tJPj4yXT1iYitjYjtjW0o+PjJdPSRhK2FiO2NbQ2E+PjJdPWctaWI7Y1tLPj4yXT1rYi1tYjtjW0w+PjJdPW9iLXFiO2NbTT4+Ml09WmEtWGE7Y1tOPj4yXT1WYS1UYTtjW08+PjJdPVJhLWhiO2NbUD4+Ml09Z2ItZmI7Y1tRPj4yXT1lYi1kYjtjW1I+PjJdPWNiLWJiO2NbUz4+Ml09YWItJGE7SmMoRGEsS2EsMTA0KyhfYSoxMjB8MCkrNDB8MCk7SmMoQ2EsQ2EsMTA0KyhfYSoxMjB8MCl8MCk7SmMoQmEsMTA0KyhfYSoxMjB8MCkrODB8MCxHYSk7X2E9Y1tGYT4+Ml08PDE7JGE9Y1tUPj4yXTw8MTthYj1jW1U+PjJdPDwxO2JiPWNbVj4+Ml08PDE7Y2I9Y1tXPj4yXTw8MTtkYj1jW1g+PjJdPDwxO2ViPWNbWT4+Ml08PDE7ZmI9Y1taPj4yXTw8MTtnYj1jW18+PjJdPDwxO2hiPWNbJD4+Ml08PDE7Y1trPj4yXT1fYTtjW2FhPj4yXT0kYTtjW2JhPj4yXT1hYjtjW2NhPj4yXT1iYjtjW2RhPj4yXT1jYjtjW2VhPj4yXT1kYjtjW2ZhPj4yXT1lYjtjW2dhPj4yXT1mYjtjW2hhPj4yXT1nYjtjW2lhPj4yXT1oYjtSYT1jW0RhPj4yXXwwO1RhPWNbamE+PjJdfDA7VmE9Y1trYT4+Ml18MDtYYT1jW2xhPj4yXXwwO1phPWNbbWE+PjJdfDA7cWI9Y1tuYT4+Ml18MDtvYj1jW29hPj4yXXwwO21iPWNbcGE+PjJdfDA7a2I9Y1txYT4+Ml18MDtpYj1jW3JhPj4yXXwwO2c9Y1tDYT4+Ml18MDtTYT1jW0s+PjJdfDA7VWE9Y1tMPj4yXXwwO1dhPWNbTT4+Ml18MDtZYT1jW04+PjJdfDA7cmI9Y1tPPj4yXXwwO3BiPWNbUD4+Ml18MDtuYj1jW1E+PjJdfDA7bGI9Y1tSPj4yXXwwO2piPWNbUz4+Ml18MDtjW0thPj4yXT1SYS1nO2NbQj4+Ml09VGEtU2E7Y1tDPj4yXT1WYS1VYTtjW0Q+PjJdPVhhLVdhO2NbRT4+Ml09WmEtWWE7Y1tGPj4yXT1xYi1yYjtjW0c+PjJdPW9iLXBiO2NbSD4+Ml09bWItbmI7Y1tJPj4yXT1rYi1sYjtjW0o+PjJdPWliLWpiO2NbQ2E+PjJdPWcrUmE7Y1tLPj4yXT1TYStUYTtjW0w+PjJdPVVhK1ZhO2NbTT4+Ml09V2ErWGE7Y1tOPj4yXT1ZYStaYTtjW08+PjJdPXJiK3FiO2NbUD4+Ml09cGIrb2I7Y1tRPj4yXT1uYittYjtjW1I+PjJdPWxiK2tiO2NbUz4+Ml09amIraWI7aWI9Y1tCYT4+Ml18MDtqYj1jW3NhPj4yXXwwO2tiPWNbdGE+PjJdfDA7bGI9Y1t1YT4+Ml18MDttYj1jW3ZhPj4yXXwwO25iPWNbd2E+PjJdfDA7b2I9Y1t4YT4+Ml18MDtwYj1jW3lhPj4yXXwwO3FiPWNbemE+PjJdfDA7cmI9Y1tBYT4+Ml18MDtjW0RhPj4yXT1fYS1pYjtjW2phPj4yXT0kYS1qYjtjW2thPj4yXT1hYi1rYjtjW2xhPj4yXT1iYi1sYjtjW21hPj4yXT1jYi1tYjtjW25hPj4yXT1kYi1uYjtjW29hPj4yXT1lYi1vYjtjW3BhPj4yXT1mYi1wYjtjW3FhPj4yXT1nYi1xYjtjW3JhPj4yXT1oYi1yYjtqYj1qYisoY1thYT4+Ml18MCl8MDtrYj1rYisoY1tiYT4+Ml18MCl8MDtsYj1sYisoY1tjYT4+Ml18MCl8MDttYj1tYisoY1tkYT4+Ml18MCl8MDtuYj1uYisoY1tlYT4+Ml18MCl8MDtvYj1vYisoY1tmYT4+Ml18MCl8MDtwYj1wYisoY1tnYT4+Ml18MCl8MDtxYj1xYisoY1toYT4+Ml18MCl8MDtyYj1yYisoY1tpYT4+Ml18MCl8MDtjW0JhPj4yXT1pYisoY1trPj4yXXwwKTtjW3NhPj4yXT1qYjtjW3RhPj4yXT1rYjtjW3VhPj4yXT1sYjtjW3ZhPj4yXT1tYjtjW3dhPj4yXT1uYjtjW3hhPj4yXT1vYjtjW3lhPj4yXT1wYjtjW3phPj4yXT1xYjtjW0FhPj4yXT1yYn19ZWxzZXtKYyhMYSxLYSxCYSk7SmMoRWEsQ2EsRGEpO0pjKEZhLERhLEJhKTtKYyhHYSxLYSxDYSk7T2MoS2EsTGEsMTA0KygoKGc8PDI0Pj4yNHwwKS8yfDApKjEyMHwwKXwwKX1KYyhqLEthLEJhKTtKYyhIYSxDYSxEYSk7SmMoSWEsRGEsQmEpO2lmKChmfDApPjApZj1mKy0xfDA7ZWxzZSBicmVha319SWMoayxJYSk7SmMoTmEsaixrKTtKYyhPYSxIYSxrKTtMYyhQYSxPYSk7TGMoTWEsTmEpO2o9UGErMzF8MDthW2o+PjBdPWRbaj4+MF1eZFtNYT4+MF08PDc7aj1ZYyhQYSxiKXwwO2s9KFBhfDApPT0oYnwwKTtmPTA7Zz0wO2Rve2Y9YVtQYStnPj4wXV5hW2IrZz4+MF18ZjtnPWcrMXwwfXdoaWxlKChnfDApIT0zMik7cmI9KGs/LTE6ail8KCgoZiYyNTUpKzUxMXwwKT4+PjgmMSkrLTE7aT1RYTtyZXR1cm4gcmJ8MH1mdW5jdGlvbiBXYyhiKXtiPWJ8MDt2YXIgYz0wLGU9MCxmPTAsZz0wLGg9MCxpPTAsaj0wLGs9MCxsPTAsbT0wLG49MCxvPTAscD0wLHE9MCxyPTAscz0wLHQ9MCx1PTAsdj0wLHc9MCx4PTAseT0wLHo9MCxBPTAsQj0wLEQ9MCxFPTAsRj0wLEc9MCxIPTAsST0wLEo9MCxLPTAsTD0wLE09MCxOPTAsTz0wLFA9MCxRPTAsUj0wLFM9MCxUPTAsVT0wLFY9MCxXPTAsWD0wLFk9MCxaPTAsXz0wLCQ9MCxhYT0wLGJhPTAsY2E9MCxkYT0wLGVhPTAsZmE9MCxnYT0wLGhhPTAsaWE9MCxqYT0wLGthPTAsbGE9MCxtYT0wLG5hPTAsb2E9MCxwYT0wLHFhPTAscmE9MCxzYT0wLHRhPTAsdWE9MCx2YT0wLHdhPTAseGE9MCx5YT0wLHphPTAsQWE9MCxCYT0wLENhPTAsRGE9MCxFYT0wLEZhPTAsR2E9MCxIYT0wLElhPTAsSmE9MCxLYT0wLExhPTAsTWE9MCxOYT0wLE9hPTAsUGE9MCxRYT0wLFJhPTAsU2E9MCxUYT0wLFVhPTAsVmE9MCxXYT0wLFhhPTAsWWE9MCxaYT0wLF9hPTAsJGE9MCxhYj0wLGJiPTAsY2I9MCxkYj0wLGViPTAsZmI9MCxnYj0wO2VhPWIrMXwwO2JhPWIrMnwwO0Q9YVtiYT4+MF18MDtmPWRbYj4+MF18MDtuPUhkKGRbZWE+PjBdfDB8MCwwLDgpfDA7dmE9QztEPUQmMjU1O1Y9SGQoRHwwLDAsMTYpfDA7YWE9YiszfDA7eT1IZChkW2FhPj4wXXwwfDAsMCw4KXwwO2dhPUM7JD1iKzR8MDtVPUhkKGRbJD4+MF18MHwwLDAsMTYpfDA7Z2E9Z2F8QztZPWIrNXwwO049ZFtZPj4wXXwwO1g9SGQoTnwwLDAsMjQpfDA7Z2E9R2QoeXxEfFV8WHwwLGdhfEN8MCw1KXwwO1g9Yis2fDA7VT1iKzd8MDtEPWFbVT4+MF18MDt5PUhkKGRbWD4+MF18MHwwLDAsOCl8MDtCYT1DO0Q9RCYyNTU7VD1IZChEfDAsMCwxNil8MDtCYT1HZCh5fE58VHwwLEJhfEN8MCwyKXwwO1Q9Yis4fDA7Tj1IZChkW1Q+PjBdfDB8MCwwLDgpfDA7eT1DO1M9Yis5fDA7Q2E9SGQoZFtTPj4wXXwwfDAsMCwxNil8MDt5PXl8QztQPWIrMTB8MDtTYT1kW1A+PjBdfDA7Tz1IZChTYXwwLDAsMjQpfDA7eT1HZChOfER8Q2F8T3wwLHl8Q3wwLDcpfDA7Tz1iKzExfDA7Q2E9SGQoZFtPPj4wXXwwfDAsMCw4KXwwO0Q9QztOPWIrMTJ8MDtHPUhkKGRbTj4+MF18MHwwLDAsMTYpfDA7RD1EfEM7Sz1iKzEzfDA7dT1kW0s+PjBdfDA7Sj1IZCh1fDAsMCwyNCl8MDtEPUdkKENhfFNhfEd8SnwwLER8Q3wwLDQpfDA7Sj1iKzE0fDA7Rz1iKzE1fDA7U2E9YVtHPj4wXXwwO0NhPUhkKGRbSj4+MF18MHwwLDAsOCl8MDtEYT1DO1NhPVNhJjI1NTtGPUhkKFNhfDAsMCwxNil8MDtEYT1HZChDYXx1fEZ8MCxEYXxDfDAsMSl8MDtGPWIrMTZ8MDt1PUhkKGRbRj4+MF18MHwwLDAsOCl8MDtDYT1DO0U9YisxN3wwO3c9SGQoZFtFPj4wXXwwfDAsMCwxNil8MDtDYT1DYXxDO0E9YisxOHwwO3Y9ZFtBPj4wXXwwO3o9SGQodnwwLDAsMjQpfDA7Q2E9R2QodXxTYXx3fHp8MCxDYXxDfDAsNil8MDt6PWIrMTl8MDt3PWIrMjB8MDtTYT1hW3c+PjBdfDA7dT1IZChkW3o+PjBdfDB8MCwwLDgpfDA7VGE9QztTYT1IZChTYSYyNTV8MCwwLDE2KXwwO1RhPUdkKHV8dnxTYXwwLFRhfEN8MCwzKXwwO1NhPUM7dj1iKzIxfDA7dT1iKzIyfDA7cj1iKzIzfDA7bmE9YVtyPj4wXXwwO2FiPWRbdj4+MF18MDtiYj1IZChkW3U+PjBdfDB8MCwwLDgpfDA7X2E9QztuYT1uYSYyNTU7JGE9SGQobmF8MCwwLDE2KXwwO3E9YisyNHwwO0thPUhkKGRbcT4+MF18MHwwLDAsOCl8MDtQYT1DO3A9YisyNXwwO2k9SGQoZFtwPj4wXXwwfDAsMCwxNil8MDtQYT1QYXxDO209YisyNnwwO3hhPWRbbT4+MF18MDtsPUhkKHhhfDAsMCwyNCl8MDtQYT1HZChLYXxuYXxpfGx8MCxQYXxDfDAsNSl8MDtsPWIrMjd8MDtpPWIrMjh8MDtuYT1hW2k+PjBdfDA7S2E9SGQoZFtsPj4wXXwwfDAsMCw4KXwwO1phPUM7bmE9bmEmMjU1O2g9SGQobmF8MCwwLDE2KXwwO1phPUdkKEthfHhhfGh8MCxaYXxDfDAsMil8MDtoPWIrMjl8MDt4YT1IZChkW2g+PjBdfDB8MCwwLDgpfDA7S2E9QztnPWIrMzB8MDtmYj1IZChkW2c+PjBdfDB8MCwwLDE2KXwwO0thPUthfEM7Yz1iKzMxfDA7cWE9ZFtjPj4wXXwwO29hPUhkKHFhfDAsMCwyNCl8MDtLYT1HZCh4YXxuYXxmYnxvYXwwLEthfEN8MCw3KXwwO29hPUhkKGRbYiszMj4+MF18MHwwLDAsOCl8MDtmYj1DO25hPUhkKGRbYiszMz4+MF18MHwwLDAsMTYpfDA7ZmI9ZmJ8Qzt4YT1kW2IrMzQ+PjBdfDA7bGE9SGQoeGF8MCwwLDI0KXwwO2ZiPUdkKG9hfHFhfG5hfGxhfDAsZmJ8Q3wwLDQpfDA7bGE9YVtiKzM2Pj4wXXwwO25hPUhkKGRbYiszNT4+MF18MHwwLDAsOCl8MDtxYT1DO2xhPWxhJjI1NTtvYT1IZChsYXwwLDAsMTYpfDA7cWE9R2QobmF8eGF8b2F8MCxxYXxDfDAsMSl8MDtvYT1IZChkW2IrMzc+PjBdfDB8MCwwLDgpfDA7eGE9QztuYT1IZChkW2IrMzg+PjBdfDB8MCwwLDE2KXwwO3hhPXhhfEM7TWE9ZFtiKzM5Pj4wXXwwO2ZhPUhkKE1hfDAsMCwyNCl8MDt4YT1HZChvYXxsYXxuYXxmYXwwLHhhfEN8MCw2KXwwO2ZhPWFbYis0MT4+MF18MDtuYT1IZChkW2IrNDA+PjBdfDB8MCwwLDgpfDA7bGE9QztmYT1IZChmYSYyNTV8MCwwLDE2KXwwO2xhPUdkKG5hfE1hfGZhfDAsbGF8Q3wwLDMpfDA7ZmE9QztNYT1hW2IrNDQ+PjBdfDA7bmE9ZFtiKzQyPj4wXXwwO29hPUhkKGRbYis0Mz4+MF18MHwwLDAsOCl8MDtqPUM7TWE9TWEmMjU1O3phPUhkKE1hfDAsMCwxNil8MDtqYT1IZChkW2IrNDU+PjBdfDB8MCwwLDgpfDA7TD1DO1c9SGQoZFtiKzQ2Pj4wXXwwfDAsMCwxNil8MDtMPUx8QztnYj1kW2IrNDc+PjBdfDA7bz1IZChnYnwwLDAsMjQpfDA7TD1HZChqYXxNYXxXfG98MCxMfEN8MCw1KXwwO289YVtiKzQ5Pj4wXXwwO1c9SGQoZFtiKzQ4Pj4wXXwwfDAsMCw4KXwwO01hPUM7bz1vJjI1NTtqYT1IZChvfDAsMCwxNil8MDtNYT1HZChXfGdifGphfDAsTWF8Q3wwLDIpfDA7TWE9TWEmMjA5NzE1MTtqYT1IZChkW2IrNTA+PjBdfDB8MCwwLDgpfDA7Z2I9QztXPUhkKGRbYis1MT4+MF18MHwwLDAsMTYpfDA7Z2I9Z2J8QztBYT1kW2IrNTI+PjBdfDA7TT1IZChBYXwwLDAsMjQpfDA7Z2I9R2QoamF8b3xXfE18MCxnYnxDfDAsNyl8MDtnYj1nYiYyMDk3MTUxO009SGQoZFtiKzUzPj4wXXwwfDAsMCw4KXwwO1c9QztvPUhkKGRbYis1ND4+MF18MHwwLDAsMTYpfDA7Vz1XfEM7amE9ZFtiKzU1Pj4wXXwwO1I9SGQoamF8MCwwLDI0KXwwO1c9R2QoTXxBYXxvfFJ8MCxXfEN8MCw0KXwwO1c9VyYyMDk3MTUxO1I9YVtiKzU3Pj4wXXwwO289SGQoZFtiKzU2Pj4wXXwwfDAsMCw4KXwwO0FhPUM7Uj1SJjI1NTtNPUhkKFJ8MCwwLDE2KXwwO0FhPUdkKG98amF8TXwwLEFhfEN8MCwxKXwwO0FhPUFhJjIwOTcxNTE7TT1IZChkW2IrNTg+PjBdfDB8MCwwLDgpfDA7amE9QztvPUhkKGRbYis1OT4+MF18MHwwLDAsMTYpfDA7amE9amF8QztoYT1kW2IrNjA+PjBdfDA7UT1IZChoYXwwLDAsMjQpfDA7amE9R2QoTXxSfG98UXwwLGphfEN8MCw2KXwwO2phPWphJjIwOTcxNTE7UT1IZChkW2IrNjE+PjBdfDB8MCwwLDgpfDA7bz1DO1I9SGQoZFtiKzYyPj4wXXwwfDAsMCwxNil8MDtvPW98QztNPUhkKGRbYis2Mz4+MF18MHwwLDAsMjQpfDA7bz1HZChRfGhhfFJ8TXwwLG98Q3wwLDMpfDA7TT1DO1I9T2Qob3wwLE18MCw2NjY2NDMsMCl8MDtoYT1DO1E9T2Qob3wwLE18MCw0NzAyOTYsMCl8MDtJPUM7Y2E9T2Qob3wwLE18MCw2NTQxODMsMCl8MDt0YT1DO0VhPU9kKG98MCxNfDAsLTk5NzgwNSwtMSl8MDt0PUM7az1PZChvfDAsTXwwLDEzNjY1NywwKXwwO0I9QztNPU9kKG98MCxNfDAsLTY4MzkwMSwtMSl8MDtqPURkKE18MCxDfDAsb2F8bmF8emEmMjAzMTYxNnwwLGp8MCl8MDt6YT1DO25hPU9kKGphfDAsMCw2NjY2NDMsMCl8MDtvYT1DO009T2QoamF8MCwwLDQ3MDI5NiwwKXwwO289QztWYT1PZChqYXwwLDAsNjU0MTgzLDApfDA7cz1DO21hPU9kKGphfDAsMCwtOTk3ODA1LC0xKXwwO189Qzt5YT1PZChqYXwwLDAsMTM2NjU3LDApfDA7c2E9QztqYT1PZChqYXwwLDAsLTY4MzkwMSwtMSl8MDtIPUM7ZT1PZChBYXwwLDAsNjY2NjQzLDApfDA7cmE9Qzt3YT1PZChBYXwwLDAsNDcwMjk2LDApfDA7TGE9QztGYT1PZChBYXwwLDAsNjU0MTgzLDApfDA7ZGE9QztjYj1PZChBYXwwLDAsLTk5NzgwNSwtMSl8MDtVYT1DO2thPU9kKEFhfDAsMCwxMzY2NTcsMCl8MDt4PUM7QWE9T2QoQWF8MCwwLC02ODM5MDEsLTEpfDA7eGE9RGQoQWF8MCxDfDAseGEmMjA5NzE1MXwwLDApfDA7c2E9RGQoeGF8MCxDfDAseWF8MCxzYXwwKXwwO3Q9RGQoc2F8MCxDfDAsRWF8MCx0fDApfDA7RWE9QztzYT1PZChXfDAsMCw2NjY2NDMsMCl8MDt5YT1DO3hhPU9kKFd8MCwwLDQ3MDI5NiwwKXwwO0FhPUM7V2E9T2QoV3wwLDAsNjU0MTgzLDApfDA7Wj1DO0hhPU9kKFd8MCwwLC05OTc4MDUsLTEpfDA7R2E9QztlYj1PZChXfDAsMCwxMzY2NTcsMCl8MDtkYj1DO1c9T2QoV3wwLDAsLTY4MzkwMSwtMSl8MDtwYT1DO2lhPU9kKGdifDAsMCw2NjY2NDMsMCl8MDt1YT1DO1FhPU9kKGdifDAsMCw0NzAyOTYsMCl8MDtSYT1DO09hPU9kKGdifDAsMCw2NTQxODMsMCl8MDtOYT1DO1lhPU9kKGdifDAsMCwtOTk3ODA1LC0xKXwwO1hhPUM7SmE9T2QoZ2J8MCwwLDEzNjY1NywwKXwwO0lhPUM7Z2I9T2QoZ2J8MCwwLC02ODM5MDEsLTEpfDA7ZmI9RGQoZ2J8MCxDfDAsZmImMjA5NzE1MXwwLDApfDA7ZGI9RGQoZmJ8MCxDfDAsZWJ8MCxkYnwwKXwwO1VhPURkKGRifDAsQ3wwLGNifDAsVWF8MCl8MDtzPURkKFVhfDAsQ3wwLFZhfDAsc3wwKXwwO0k9RGQoc3wwLEN8MCxRfDAsSXwwKXwwO1E9QztzPU9kKE1hfDAsMCw2NjY2NDMsMCl8MDtDYT1EZChzfDAsQ3wwLENhJjIwOTcxNTF8MCwwKXwwO3M9QztWYT1PZChNYXwwLDAsNDcwMjk2LDApfDA7VWE9QztjYj1PZChNYXwwLDAsNjU0MTgzLDApfDA7X2E9RGQoY2J8MCxDfDAsYmJ8YWJ8JGEmMjAzMTYxNnwwLF9hfDApfDA7UmE9RGQoX2F8MCxDfDAsUWF8MCxSYXwwKXwwO3lhPURkKFJhfDAsQ3wwLHNhfDAseWF8MCl8MDtzYT1DO1JhPU9kKE1hfDAsMCwtOTk3ODA1LC0xKXwwO1FhPUM7X2E9T2QoTWF8MCwwLDEzNjY1NywwKXwwO1phPURkKF9hfDAsQ3wwLFphJjIwOTcxNTF8MCwwKXwwO1hhPURkKFphfDAsQ3wwLFlhfDAsWGF8MCl8MDtaPURkKFhhfDAsQ3wwLFdhfDAsWnwwKXwwO0xhPURkKFp8MCxDfDAsd2F8MCxMYXwwKXwwO29hPURkKExhfDAsQ3wwLG5hfDAsb2F8MCl8MDtuYT1DO01hPU9kKE1hfDAsMCwtNjgzOTAxLC0xKXwwO0xhPUM7d2E9RGQoQ2F8MCxzfDAsMTA0ODU3NiwwKXwwO3dhPUdkKHdhfDAsQ3wwLDIxKXwwO1o9QztTYT1EZChWYXwwLFVhfDAsVGF8MCxTYXwwKXwwO1NhPURkKFNhfDAsQ3wwLHdhfDAsWnwwKXwwO3VhPURkKFNhfDAsQ3wwLGlhfDAsdWF8MCl8MDtpYT1DO1o9SGQod2F8MCxafDAsMjEpfDA7Wj1DZChDYXwwLHN8MCxafDAsQ3wwKXwwO3M9QztDYT1EZCh5YXwwLHNhfDAsMTA0ODU3NiwwKXwwO0NhPUdkKENhfDAsQ3wwLDIxKXwwO3dhPUM7UGE9RGQoUmF8MCxRYXwwLFBhJjIwOTcxNTF8MCwwKXwwO05hPURkKFBhfDAsQ3wwLE9hfDAsTmF8MCl8MDtBYT1EZChOYXwwLEN8MCx4YXwwLEFhfDApfDA7cmE9RGQoQWF8MCxDfDAsZXwwLHJhfDApfDA7cmE9RGQocmF8MCxDfDAsQ2F8MCx3YXwwKXwwO2U9Qzt3YT1IZChDYXwwLHdhfDAsMjEpfDA7Q2E9QztBYT1EZChvYXwwLG5hfDAsMTA0ODU3NiwwKXwwO0FhPUVkKEFhfDAsQ3wwLDIxKXwwO3hhPUM7S2E9RGQoTWF8MCxMYXwwLEthJjIwOTcxNTF8MCwwKXwwO0lhPURkKEthfDAsQ3wwLEphfDAsSWF8MCl8MDtHYT1EZChJYXwwLEN8MCxIYXwwLEdhfDApfDA7ZGE9RGQoR2F8MCxDfDAsRmF8MCxkYXwwKXwwO289RGQoZGF8MCxDfDAsTXwwLG98MCl8MDtoYT1EZChvfDAsQ3wwLFJ8MCxoYXwwKXwwO2hhPURkKGhhfDAsQ3wwLEFhfDAseGF8MCl8MDtSPUM7eGE9SGQoQWF8MCx4YXwwLDIxKXwwO0FhPUM7bz1EZChJfDAsUXwwLDEwNDg1NzYsMCl8MDtvPUVkKG98MCxDfDAsMjEpfDA7TT1DO3FhPURkKFd8MCxwYXwwLHFhJjIwOTcxNTF8MCwwKXwwO3g9RGQocWF8MCxDfDAsa2F8MCx4fDApfDA7Xz1EZCh4fDAsQ3wwLG1hfDAsX3wwKXwwO3RhPURkKF98MCxDfDAsY2F8MCx0YXwwKXwwO3RhPURkKHRhfDAsQ3wwLG98MCxNfDApfDA7Y2E9QztNPUhkKG98MCxNfDAsMjEpfDA7TT1DZChJfDAsUXwwLE18MCxDfDApfDA7UT1DO0k9RGQodHwwLEVhfDAsMTA0ODU3NiwwKXwwO0k9RWQoSXwwLEN8MCwyMSl8MDtvPUM7ZmE9RGQoamF8MCxIfDAsbGF8MCxmYXwwKXwwO0I9RGQoZmF8MCxDfDAsa3wwLEJ8MCl8MDtCPURkKEJ8MCxDfDAsSXwwLG98MCl8MDtrPUM7bz1IZChJfDAsb3wwLDIxKXwwO289Q2QodHwwLEVhfDAsb3wwLEN8MCl8MDtFYT1DO3Q9RGQoanwwLHphfDAsMTA0ODU3NiwwKXwwO3Q9RWQodHwwLEN8MCwyMSl8MDtJPUM7TD1EZCh0fDAsSXwwLEwmMjA5NzE1MXwwLDApfDA7ZmE9QztJPUhkKHR8MCxJfDAsMjEpfDA7ST1DZChqfDAsemF8MCxJfDAsQ3wwKXwwO3phPUM7aj1EZCh1YXwwLGlhfDAsMTA0ODU3NiwwKXwwO2o9R2QoanwwLEN8MCwyMSl8MDt0PUM7bGE9SGQoanwwLHR8MCwyMSl8MDtsYT1DZCh1YXwwLGlhfDAsbGF8MCxDfDApfDA7aWE9Qzt1YT1EZChyYXwwLGV8MCwxMDQ4NTc2LDApfDA7dWE9RWQodWF8MCxDfDAsMjEpfDA7SD1DO2phPUhkKHVhfDAsSHwwLDIxKXwwO2phPUNkKHJhfDAsZXwwLGphfDAsQ3wwKXwwO2U9QztyYT1EZChoYXwwLFJ8MCwxMDQ4NTc2LDApfDA7cmE9RWQocmF8MCxDfDAsMjEpfDA7Xz1DO1E9RGQoTXwwLFF8MCxyYXwwLF98MCl8MDtNPUM7Xz1IZChyYXwwLF98MCwyMSl8MDtfPUNkKGhhfDAsUnwwLF98MCxDfDApfDA7Uj1DO2hhPURkKHRhfDAsY2F8MCwxMDQ4NTc2LDApfDA7aGE9RWQoaGF8MCxDfDAsMjEpfDA7cmE9QztFYT1EZChoYXwwLHJhfDAsb3wwLEVhfDApfDA7bz1DO3JhPUhkKGhhfDAscmF8MCwyMSl8MDtyYT1DZCh0YXwwLGNhfDAscmF8MCxDfDApfDA7Y2E9Qzt0YT1EZChCfDAsa3wwLDEwNDg1NzYsMCl8MDt0YT1FZCh0YXwwLEN8MCwyMSl8MDtoYT1DO3phPURkKHRhfDAsaGF8MCxJfDAsemF8MCl8MDtJPUM7aGE9SGQodGF8MCxoYXwwLDIxKXwwO2hhPUNkKEJ8MCxrfDAsaGF8MCxDfDApfDA7az1DO0I9T2QoTHwwLGZhfDAsNjY2NjQzLDApfDA7RGE9RGQoQnwwLEN8MCxEYSYyMDk3MTUxfDAsMCl8MDtCPUM7dGE9T2QoTHwwLGZhfDAsNDcwMjk2LDApfDA7dGE9RGQoWnwwLHN8MCx0YXwwLEN8MCl8MDtzPUM7Wj1PZChMfDAsZmF8MCw2NTQxODMsMCl8MDtaPURkKGxhfDAsaWF8MCxafDAsQ3wwKXwwO2lhPUM7bGE9T2QoTHwwLGZhfDAsLTk5NzgwNSwtMSl8MDttYT1DO3g9T2QoTHwwLGZhfDAsMTM2NjU3LDApfDA7eD1EZChqYXwwLGV8MCx4fDAsQ3wwKXwwO2U9QztmYT1PZChMfDAsZmF8MCwtNjgzOTAxLC0xKXwwO0w9QztIPURkKG9hfDAsbmF8MCx1YXwwLEh8MCl8MDtBYT1DZChIfDAsQ3wwLHhhfDAsQWF8MCl8MDtMPURkKEFhfDAsQ3wwLGZhfDAsTHwwKXwwO2ZhPUM7QWE9T2QoemF8MCxJfDAsNjY2NjQzLDApfDA7RD1EZChBYXwwLEN8MCxEJjIwOTcxNTF8MCwwKXwwO0FhPUM7eGE9T2QoemF8MCxJfDAsNDcwMjk2LDApfDA7eGE9RGQoRGF8MCxCfDAseGF8MCxDfDApfDA7Qj1DO0RhPU9kKHphfDAsSXwwLDY1NDE4MywwKXwwO0RhPURkKHRhfDAsc3wwLERhfDAsQ3wwKXwwO3M9Qzt0YT1PZCh6YXwwLEl8MCwtOTk3ODA1LC0xKXwwO3RhPURkKFp8MCxpYXwwLHRhfDAsQ3wwKXwwO2lhPUM7Wj1PZCh6YXwwLEl8MCwxMzY2NTcsMCl8MDtIPUM7ST1PZCh6YXwwLEl8MCwtNjgzOTAxLC0xKXwwO0k9RGQoeHwwLGV8MCxJfDAsQ3wwKXwwO2U9Qzt4PU9kKGhhfDAsa3wwLDY2NjY0MywwKXwwO3k9RGQoeHwwLEN8MCx5JjIwOTcxNTF8MCwwKXwwO3g9Qzt6YT1PZChoYXwwLGt8MCw0NzAyOTYsMCl8MDt6YT1EZChEfDAsQWF8MCx6YXwwLEN8MCl8MDtBYT1DO0Q9T2QoaGF8MCxrfDAsNjU0MTgzLDApfDA7RD1EZCh4YXwwLEJ8MCxEfDAsQ3wwKXwwO0I9Qzt4YT1PZChoYXwwLGt8MCwtOTk3ODA1LC0xKXwwO3hhPURkKERhfDAsc3wwLHhhfDAsQ3wwKXwwO3M9QztEYT1PZChoYXwwLGt8MCwxMzY2NTcsMCl8MDtEYT1EZCh0YXwwLGlhfDAsRGF8MCxDfDApfDA7aWE9QztrPU9kKGhhfDAsa3wwLC02ODM5MDEsLTEpfDA7aGE9Qzt0PURkKHlhfDAsc2F8MCxqfDAsdHwwKXwwO0NhPUNkKHR8MCxDfDAsd2F8MCxDYXwwKXwwO21hPURkKENhfDAsQ3wwLGxhfDAsbWF8MCl8MDtIPURkKG1hfDAsQ3wwLFp8MCxIfDApfDA7aGE9RGQoSHwwLEN8MCxrfDAsaGF8MCl8MDtrPUM7SD1PZChFYXwwLG98MCw2NjY2NDMsMCl8MDtaPUM7bWE9T2QoRWF8MCxvfDAsNDcwMjk2LDApfDA7bGE9QztDYT1PZChFYXwwLG98MCw2NTQxODMsMCl8MDt3YT1DO3Q9T2QoRWF8MCxvfDAsLTk5NzgwNSwtMSl8MDtqPUM7c2E9T2QoRWF8MCxvfDAsMTM2NjU3LDApfDA7c2E9RGQoeGF8MCxzfDAsc2F8MCxDfDApfDA7cz1DO289T2QoRWF8MCxvfDAsLTY4MzkwMSwtMSl8MDtvPURkKERhfDAsaWF8MCxvfDAsQ3wwKXwwO2lhPUM7RGE9T2QocmF8MCxjYXwwLDY2NjY0MywwKXwwO0VhPUM7eGE9T2QocmF8MCxjYXwwLDQ3MDI5NiwwKXwwO3lhPUM7dGE9T2QocmF8MCxjYXwwLDY1NDE4MywwKXwwO3VhPUM7bmE9T2QocmF8MCxjYXwwLC05OTc4MDUsLTEpfDA7b2E9QztqYT1PZChyYXwwLGNhfDAsMTM2NjU3LDApfDA7a2E9QztjYT1PZChyYXwwLGNhfDAsLTY4MzkwMSwtMSl8MDtjYT1EZChzYXwwLHN8MCxjYXwwLEN8MCl8MDtzPUM7c2E9T2QoUXwwLE18MCw2NjY2NDMsMCl8MDt2YT1EZChzYXwwLEN8MCxufGZ8ViYyMDMxNjE2fDAsdmF8MCl8MDtWPUM7Zj1PZChRfDAsTXwwLDQ3MDI5NiwwKXwwO249QztzYT1PZChRfDAsTXwwLDY1NDE4MywwKXwwO0JhPURkKHNhfDAsQ3wwLEJhJjIwOTcxNTF8MCwwKXwwO1o9RGQoQmF8MCxDfDAsSHwwLFp8MCl8MDt5YT1EZChafDAsQ3wwLHhhfDAseWF8MCl8MDt4YT1DO1o9T2QoUXwwLE18MCwtOTk3ODA1LC0xKXwwO0g9QztCYT1PZChRfDAsTXwwLDEzNjY1NywwKXwwO0JhPURkKHphfDAsQWF8MCxCYXwwLEN8MCl8MDt3YT1EZChCYXwwLEN8MCxDYXwwLHdhfDApfDA7b2E9RGQod2F8MCxDfDAsbmF8MCxvYXwwKXwwO25hPUM7TT1PZChRfDAsTXwwLC02ODM5MDEsLTEpfDA7UT1DO3dhPURkKHZhfDAsVnwwLDEwNDg1NzYsMCl8MDt3YT1FZCh3YXwwLEN8MCwyMSl8MDtDYT1DO2dhPURkKGZ8MCxufDAsZ2EmMjA5NzE1MXwwLDApfDA7RWE9RGQoZ2F8MCxDfDAsRGF8MCxFYXwwKXwwO0VhPURkKEVhfDAsQ3wwLHdhfDAsQ2F8MCl8MDtEYT1DO0NhPUhkKHdhfDAsQ2F8MCwyMSl8MDtDYT1DZCh2YXwwLFZ8MCxDYXwwLEN8MCl8MDtWPUM7dmE9RGQoeWF8MCx4YXwwLDEwNDg1NzYsMCl8MDt2YT1FZCh2YXwwLEN8MCwyMSl8MDt3YT1DO0g9RGQoeXwwLHh8MCxafDAsSHwwKXwwO2xhPURkKEh8MCxDfDAsbWF8MCxsYXwwKXwwO3VhPURkKGxhfDAsQ3wwLHRhfDAsdWF8MCl8MDt1YT1EZCh1YXwwLEN8MCx2YXwwLHdhfDApfDA7dGE9Qzt3YT1IZCh2YXwwLHdhfDAsMjEpfDA7dmE9QztsYT1EZChvYXwwLG5hfDAsMTA0ODU3NiwwKXwwO2xhPUVkKGxhfDAsQ3wwLDIxKXwwO21hPUM7UT1EZChEfDAsQnwwLE18MCxRfDApfDA7aj1EZChRfDAsQ3wwLHR8MCxqfDApfDA7a2E9RGQoanwwLEN8MCxqYXwwLGthfDApfDA7a2E9RGQoa2F8MCxDfDAsbGF8MCxtYXwwKXwwO2phPUM7bWE9SGQobGF8MCxtYXwwLDIxKXwwO2xhPUM7aj1EZChjYXwwLHN8MCwxMDQ4NTc2LDApfDA7aj1FZChqfDAsQ3wwLDIxKXwwO3Q9QztpYT1EZChvfDAsaWF8MCxqfDAsdHwwKXwwO289Qzt0PUhkKGp8MCx0fDAsMjEpfDA7dD1DZChjYXwwLHN8MCx0fDAsQ3wwKXwwO3M9QztjYT1EZChoYXwwLGt8MCwxMDQ4NTc2LDApfDA7Y2E9RWQoY2F8MCxDfDAsMjEpfDA7aj1DO2U9RGQoSXwwLGV8MCxjYXwwLGp8MCl8MDtJPUM7aj1IZChjYXwwLGp8MCwyMSl8MDtqPUNkKGhhfDAsa3wwLGp8MCxDfDApfDA7az1DO2hhPURkKEx8MCxmYXwwLDEwNDg1NzYsMCl8MDtoYT1FZChoYXwwLEN8MCwyMSl8MDtjYT1DO1I9RGQoX3wwLFJ8MCxoYXwwLGNhfDApfDA7Xz1DO2NhPUhkKGhhfDAsY2F8MCwyMSl8MDtjYT1DZChMfDAsZmF8MCxjYXwwLEN8MCl8MDtmYT1DO0w9RGQoRWF8MCxEYXwwLDEwNDg1NzYsMCl8MDtMPUVkKEx8MCxDfDAsMjEpfDA7aGE9QztRPUhkKEx8MCxoYXwwLDIxKXwwO009QztCPURkKHVhfDAsdGF8MCwxMDQ4NTc2LDApfDA7Qj1FZChCfDAsQ3wwLDIxKXwwO0Q9QztIPUhkKEJ8MCxEfDAsMjEpfDA7Wj1DO3g9RGQoa2F8MCxqYXwwLDEwNDg1NzYsMCl8MDt4PUVkKHh8MCxDfDAsMjEpfDA7eT1DO3M9RGQodHwwLHN8MCx4fDAseXwwKXwwO3Q9Qzt5PUhkKHh8MCx5fDAsMjEpfDA7eD1DO2dhPURkKGlhfDAsb3wwLDEwNDg1NzYsMCl8MDtnYT1FZChnYXwwLEN8MCwyMSl8MDtuPUM7az1EZChqfDAsa3wwLGdhfDAsbnwwKXwwO2o9QztuPUhkKGdhfDAsbnwwLDIxKXwwO249Q2QoaWF8MCxvfDAsbnwwLEN8MCl8MDtvPUM7aWE9RGQoZXwwLEl8MCwxMDQ4NTc2LDApfDA7aWE9RWQoaWF8MCxDfDAsMjEpfDA7Z2E9QztmYT1EZChjYXwwLGZhfDAsaWF8MCxnYXwwKXwwO2NhPUM7Z2E9SGQoaWF8MCxnYXwwLDIxKXwwO2dhPUNkKGV8MCxJfDAsZ2F8MCxDfDApfDA7ST1DO2U9RGQoUnwwLF98MCwxMDQ4NTc2LDApfDA7ZT1FZChlfDAsQ3wwLDIxKXwwO2lhPUM7Zj1IZChlfDAsaWF8MCwyMSl8MDtmPUNkKFJ8MCxffDAsZnwwLEN8MCl8MDtfPUM7Uj1PZChlfDAsaWF8MCw2NjY2NDMsMCl8MDtSPURkKENhfDAsVnwwLFJ8MCxDfDApfDA7Vj1DO0NhPU9kKGV8MCxpYXwwLDQ3MDI5NiwwKXwwO0JhPUM7QWE9T2QoZXwwLGlhfDAsNjU0MTgzLDApfDA7emE9QztzYT1PZChlfDAsaWF8MCwtOTk3ODA1LC0xKXwwO3JhPUM7cWE9T2QoZXwwLGlhfDAsMTM2NjU3LDApfDA7cGE9QztpYT1PZChlfDAsaWF8MCwtNjgzOTAxLC0xKXwwO2U9QztXPUVkKFJ8MCxWfDAsMjEpfDA7ZGE9QztCYT1EZChFYXwwLERhfDAsQ2F8MCxCYXwwKXwwO0JhPURkKEJhfDAsQ3wwLFd8MCxkYXwwKXwwO009Q2QoQmF8MCxDfDAsUXwwLE18MCl8MDtRPUM7ZGE9SGQoV3wwLGRhfDAsMjEpfDA7ZGE9Q2QoUnwwLFZ8MCxkYXwwLEN8MCl8MDtWPUM7Uj1FZChNfDAsUXwwLDIxKXwwO1c9Qzt4YT1EZChBYXwwLHphfDAseWF8MCx4YXwwKXwwO3ZhPUNkKHhhfDAsQ3wwLHdhfDAsdmF8MCl8MDtoYT1EZCh2YXwwLEN8MCxMfDAsaGF8MCl8MDtoYT1EZChoYXwwLEN8MCxSfDAsV3wwKXwwO0w9QztXPUhkKFJ8MCxXfDAsMjEpfDA7Vz1DZChNfDAsUXwwLFd8MCxDfDApfDA7UT1DO009RWQoaGF8MCxMfDAsMjEpfDA7Uj1DO3JhPURkKHVhfDAsdGF8MCxzYXwwLHJhfDApfDA7Wj1DZChyYXwwLEN8MCxIfDAsWnwwKXwwO1o9RGQoWnwwLEN8MCxNfDAsUnwwKXwwO0g9QztSPUhkKE18MCxSfDAsMjEpfDA7Uj1DZChoYXwwLEx8MCxSfDAsQ3wwKXwwO0w9QztoYT1FZChafDAsSHwwLDIxKXwwO009QztuYT1EZChxYXwwLHBhfDAsb2F8MCxuYXwwKXwwO2xhPUNkKG5hfDAsQ3wwLG1hfDAsbGF8MCl8MDtEPURkKGxhfDAsQ3wwLEJ8MCxEfDApfDA7RD1EZChEfDAsQ3wwLGhhfDAsTXwwKXwwO0I9QztNPUhkKGhhfDAsTXwwLDIxKXwwO009Q2QoWnwwLEh8MCxNfDAsQ3wwKXwwO0g9QztaPUVkKER8MCxCfDAsMjEpfDA7aGE9QztlPURkKGthfDAsamF8MCxpYXwwLGV8MCl8MDt4PUNkKGV8MCxDfDAseXwwLHh8MCl8MDt4PURkKHh8MCxDfDAsWnwwLGhhfDApfDA7eT1DO2hhPUhkKFp8MCxoYXwwLDIxKXwwO2hhPUNkKER8MCxCfDAsaGF8MCxDfDApfDA7Qj1DO0Q9RWQoeHwwLHl8MCwyMSl8MDtaPUM7dD1EZChzfDAsdHwwLER8MCxafDApfDA7cz1DO1o9SGQoRHwwLFp8MCwyMSl8MDtaPUNkKHh8MCx5fDAsWnwwLEN8MCl8MDt5PUM7eD1FZCh0fDAsc3wwLDIxKXwwO0Q9QztvPURkKHh8MCxEfDAsbnwwLG98MCl8MDtuPUM7RD1IZCh4fDAsRHwwLDIxKXwwO0Q9Q2QodHwwLHN8MCxEfDAsQ3wwKXwwO3M9Qzt0PUVkKG98MCxufDAsMjEpfDA7eD1DO2o9RGQoa3wwLGp8MCx0fDAseHwwKXwwO2s9Qzt4PUhkKHR8MCx4fDAsMjEpfDA7eD1DZChvfDAsbnwwLHh8MCxDfDApfDA7bj1DO289RWQoanwwLGt8MCwyMSl8MDt0PUM7ST1EZChvfDAsdHwwLGdhfDAsSXwwKXwwO2dhPUM7dD1IZChvfDAsdHwwLDIxKXwwO3Q9Q2QoanwwLGt8MCx0fDAsQ3wwKXwwO2s9QztqPUVkKEl8MCxnYXwwLDIxKXwwO289QztjYT1EZChmYXwwLGNhfDAsanwwLG98MCl8MDtmYT1DO289SGQoanwwLG98MCwyMSl8MDtvPUNkKEl8MCxnYXwwLG98MCxDfDApfDA7Z2E9QztJPUVkKGNhfDAsZmF8MCwyMSl8MDtqPUM7Xz1EZChJfDAsanwwLGZ8MCxffDApfDA7Zj1DO2o9SGQoSXwwLGp8MCwyMSl8MDtqPUNkKGNhfDAsZmF8MCxqfDAsQ3wwKXwwO2ZhPUM7Y2E9RWQoX3wwLGZ8MCwyMSl8MDtJPUM7ZT1IZChjYXwwLEl8MCwyMSl8MDtlPUNkKF98MCxmfDAsZXwwLEN8MCl8MDtmPUM7Xz1PZChjYXwwLEl8MCw2NjY2NDMsMCl8MDtWPURkKF98MCxDfDAsZGF8MCxWfDApfDA7ZGE9QztfPU9kKGNhfDAsSXwwLDQ3MDI5NiwwKXwwO189RGQoV3wwLFF8MCxffDAsQ3wwKXwwO1E9QztXPU9kKGNhfDAsSXwwLDY1NDE4MywwKXwwO1c9RGQoUnwwLEx8MCxXfDAsQ3wwKXwwO0w9QztSPU9kKGNhfDAsSXwwLC05OTc4MDUsLTEpfDA7Uj1EZChNfDAsSHwwLFJ8MCxDfDApfDA7SD1DO009T2QoY2F8MCxJfDAsMTM2NjU3LDApfDA7TT1EZChoYXwwLEJ8MCxNfDAsQ3wwKXwwO0I9QztJPU9kKGNhfDAsSXwwLC02ODM5MDEsLTEpfDA7ST1EZChafDAseXwwLEl8MCxDfDApfDA7eT1DO1o9RWQoVnwwLGRhfDAsMjEpfDA7Y2E9QztRPURkKF98MCxRfDAsWnwwLGNhfDApfDA7Xz1DO2NhPUhkKFp8MCxjYXwwLDIxKXwwO2NhPUNkKFZ8MCxkYXwwLGNhfDAsQ3wwKXwwO2RhPUM7Vj1FZChRfDAsX3wwLDIxKXwwO1o9QztMPURkKFd8MCxMfDAsVnwwLFp8MCl8MDtXPUM7Wj1IZChWfDAsWnwwLDIxKXwwO1o9Q2QoUXwwLF98MCxafDAsQ3wwKXwwO189QztRPUVkKEx8MCxXfDAsMjEpfDA7Vj1DO0g9RGQoUnwwLEh8MCxRfDAsVnwwKXwwO1I9QztWPUhkKFF8MCxWfDAsMjEpfDA7Vj1DZChMfDAsV3wwLFZ8MCxDfDApfDA7Vz1DO0w9RWQoSHwwLFJ8MCwyMSl8MDtRPUM7Qj1EZChNfDAsQnwwLEx8MCxRfDApfDA7TT1DO1E9SGQoTHwwLFF8MCwyMSl8MDtRPUNkKEh8MCxSfDAsUXwwLEN8MCl8MDtSPUM7SD1FZChCfDAsTXwwLDIxKXwwO0w9Qzt5PURkKEl8MCx5fDAsSHwwLEx8MCl8MDtJPUM7TD1IZChIfDAsTHwwLDIxKXwwO0w9Q2QoQnwwLE18MCxMfDAsQ3wwKXwwO009QztCPUVkKHl8MCxJfDAsMjEpfDA7SD1DO3M9RGQoQnwwLEh8MCxEfDAsc3wwKXwwO0Q9QztIPUhkKEJ8MCxIfDAsMjEpfDA7SD1DZCh5fDAsSXwwLEh8MCxDfDApfDA7ST1DO3k9RWQoc3wwLER8MCwyMSl8MDtCPUM7bj1EZCh5fDAsQnwwLHh8MCxufDApfDA7eD1DO0I9SGQoeXwwLEJ8MCwyMSl8MDtCPUNkKHN8MCxEfDAsQnwwLEN8MCl8MDtEPUM7cz1FZChufDAseHwwLDIxKXwwO3k9QztrPURkKHN8MCx5fDAsdHwwLGt8MCl8MDt0PUM7eT1IZChzfDAseXwwLDIxKXwwO3k9Q2QobnwwLHh8MCx5fDAsQ3wwKXwwO3g9QztuPUVkKGt8MCx0fDAsMjEpfDA7cz1DO2dhPURkKG58MCxzfDAsb3wwLGdhfDApfDA7bz1DO3M9SGQobnwwLHN8MCwyMSl8MDtzPUNkKGt8MCx0fDAsc3wwLEN8MCl8MDt0PUM7az1FZChnYXwwLG98MCwyMSl8MDtuPUM7ZmE9RGQoa3wwLG58MCxqfDAsZmF8MCl8MDtqPUM7bj1IZChrfDAsbnwwLDIxKXwwO249Q2QoZ2F8MCxvfDAsbnwwLEN8MCl8MDtvPUM7Z2E9RWQoZmF8MCxqfDAsMjEpfDA7az1DO2Y9RGQoZ2F8MCxrfDAsZXwwLGZ8MCl8MDtlPUM7az1IZChnYXwwLGt8MCwyMSl8MDtrPUNkKGZhfDAsanwwLGt8MCxDfDApfDA7aj1DO2FbYj4+MF09Y2E7Yj1HZChjYXwwLGRhfDAsOCl8MDthW2VhPj4wXT1iO2I9R2QoY2F8MCxkYXwwLDE2KXwwO2RhPUM7Y2E9SGQoWnwwLF98MCw1KXwwO2FbYmE+PjBdPWNhfGI7Yj1HZChafDAsX3wwLDMpfDA7YVthYT4+MF09YjtiPUdkKFp8MCxffDAsMTEpfDA7YVskPj4wXT1iO2I9R2QoWnwwLF98MCwxOSl8MDtfPUM7Wj1IZChWfDAsV3wwLDIpfDA7YVtZPj4wXT1afGI7Yj1HZChWfDAsV3wwLDYpfDA7YVtYPj4wXT1iO2I9R2QoVnwwLFd8MCwxNCl8MDtXPUM7Vj1IZChRfDAsUnwwLDcpfDA7YVtVPj4wXT1WfGI7Yj1HZChRfDAsUnwwLDEpfDA7YVtUPj4wXT1iO2I9R2QoUXwwLFJ8MCw5KXwwO2FbUz4+MF09YjtiPUdkKFF8MCxSfDAsMTcpfDA7Uj1DO1E9SGQoTHwwLE18MCw0KXwwO2FbUD4+MF09UXxiO2I9R2QoTHwwLE18MCw0KXwwO2FbTz4+MF09YjtiPUdkKEx8MCxNfDAsMTIpfDA7YVtOPj4wXT1iO2I9R2QoTHwwLE18MCwyMCl8MDtNPUM7TD1IZChIfDAsSXwwLDEpfDA7YVtLPj4wXT1MfGI7Yj1HZChIfDAsSXwwLDcpfDA7YVtKPj4wXT1iO2I9R2QoSHwwLEl8MCwxNSl8MDtJPUM7SD1IZChCfDAsRHwwLDYpfDA7YVtHPj4wXT1IfGI7Yj1HZChCfDAsRHwwLDIpfDA7YVtGPj4wXT1iO2I9R2QoQnwwLER8MCwxMCl8MDthW0U+PjBdPWI7Yj1HZChCfDAsRHwwLDE4KXwwO0Q9QztCPUhkKHl8MCx4fDAsMyl8MDthW0E+PjBdPUJ8YjtiPUdkKHl8MCx4fDAsNSl8MDthW3o+PjBdPWI7Yj1HZCh5fDAseHwwLDEzKXwwO2Fbdz4+MF09YjthW3Y+PjBdPXM7Yj1HZChzfDAsdHwwLDgpfDA7YVt1Pj4wXT1iO2I9R2Qoc3wwLHR8MCwxNil8MDt0PUM7cz1IZChufDAsb3wwLDUpfDA7YVtyPj4wXT1zfGI7Yj1HZChufDAsb3wwLDMpfDA7YVtxPj4wXT1iO2I9R2QobnwwLG98MCwxMSl8MDthW3A+PjBdPWI7Yj1HZChufDAsb3wwLDE5KXwwO289QztuPUhkKGt8MCxqfDAsMil8MDthW20+PjBdPW58YjtiPUdkKGt8MCxqfDAsNil8MDthW2w+PjBdPWI7aj1HZChrfDAsanwwLDE0KXwwO2s9QztiPUhkKGZ8MCxlfDAsNyl8MDthW2k+PjBdPWp8YjtiPUdkKGZ8MCxlfDAsMSl8MDthW2g+PjBdPWI7Yj1HZChmfDAsZXwwLDkpfDA7YVtnPj4wXT1iO2I9R2QoZnwwLGV8MCwxNyl8MDthW2M+PjBdPWI7cmV0dXJufWZ1bmN0aW9uIFhjKGIsZSxmLGcsaCxqKXtiPWJ8MDtlPWV8MDtmPWZ8MDtnPWd8MDtoPWh8MDtqPWp8MDt2YXIgaz0wLGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTAsdD0wLHU9MCx2PTAsdz0wLHg9MCx5PTAsej0wLEE9MCxCPTAsRD0wLEU9MCxGPTAsRz0wLEg9MCxJPTAsSj0wLEs9MCxMPTAsTT0wLE49MCxPPTAsUD0wLFE9MCxSPTAsUz0wLFQ9MCxVPTAsVj0wLFc9MCxYPTAsWT0wLFo9MCxfPTAsJD0wLGFhPTAsYmE9MCxjYT0wLGRhPTAsZWE9MCxmYT0wLGdhPTAsaGE9MCxpYT0wLGphPTAsa2E9MCxsYT0wLG1hPTAsbmE9MCxvYT0wLHBhPTAscWE9MCxyYT0wLHNhPTAsdGE9MCx1YT0wLHZhPTAsd2E9MCx4YT0wLHlhPTAsemE9MCxBYT0wLEJhPTAsQ2E9MCxEYT0wLEVhPTAsRmE9MCxHYT0wLEhhPTAsSWE9MCxKYT0wLEthPTAsTGE9MCxNYT0wLE5hPTAsT2E9MCxQYT0wLFFhPTAsUmE9MCxTYT0wLFRhPTAsVWE9MCxWYT0wLFdhPTAsWGE9MCxZYT0wLFphPTAsX2E9MCwkYT0wLGFiPTAsYmI9MCxjYj0wLGRiPTAsZWI9MCxmYj0wLGdiPTAsaGI9MCxpYj0wLGpiPTAsa2I9MCxsYj0wLG1iPTAsbmI9MCxvYj0wLHBiPTAscWI9MCxyYj0wLHNiPTAsdGI9MCx1Yj0wLHZiPTAsd2I9MCx4Yj0wLHliPTAsemI9MCxBYj0wLEJiPTAsQ2I9MCxEYj0wLEViPTAsSGI9MCxJYj0wLEpiPTAsS2I9MCxMYj0wLE1iPTAsTmI9MCxPYj0wLFBiPTAsUWI9MCxSYj0wLFNiPTAsVGI9MCxVYj0wLFZiPTAsV2I9MCxYYj0wLFliPTAsWmI9MCxfYj0wLCRiPTAsYWM9MCxiYz0wLGNjPTAsZGM9MCxlYz0wLGZjPTAsZ2M9MCxoYz0wLGljPTAsamM9MCxrYz0wLGxjPTAsbWM9MCxuYz0wLG9jPTAscGM9MCxxYz0wLHJjPTAsc2M9MCx0Yz0wLHVjPTAsdmM9MCx3Yz0wLHhjPTAseWM9MCx6Yz0wLEFjPTAsQmM9MCxDYz0wLERjPTAsRWM9MDt6PWk7cD1pPWkrNjMmLTY0O2k9aSs4OTZ8MDt2PXArMjA4fDA7dT1wKzY1NnwwO3c9cCs2MTZ8MDt4PXArNTc2fDA7cz1wO3E9cCs4MjR8MDt0PXArNzYwfDA7cj1wKzY5NnwwO3A9cCs0MTZ8MDtrPXYrNjR8MDt5PXY7QT04O0I9eSs2NHwwO2Rve2NbeT4+Ml09Y1tBPj4yXTt5PXkrNHwwO0E9QSs0fDB9d2hpbGUoKHl8MCk8KEJ8MCkpO3k9dis3MnwwO2NbeT4+Ml09MjU2O2NbeSs0Pj4yXT0wO3k9aztjW3k+PjJdPTA7Y1t5KzQ+PjJdPTA7eT12KzgwfDA7QT1qO0I9eSszMnwwO2Rve2FbeT4+MF09YVtBPj4wXXwwO3k9eSsxfDA7QT1BKzF8MH13aGlsZSgoeXwwKTwoQnwwKSk7R2IodixxKTthW3E+PjBdPShkW3E+PjBdfDApJjI0ODtrPXErMzF8MDthW2s+PjBdPShkW2s+PjBdfDApJjYzfDY0O2w9cys2NHwwO3k9bDtjW3k+PjJdPTA7Y1t5KzQ+PjJdPTA7eT1zO0E9ODtCPXkrNjR8MDtkb3tjW3k+PjJdPWNbQT4+Ml07eT15KzR8MDtBPUErNHwwfXdoaWxlKCh5fDApPChCfDApKTttPXMrNzJ8MDtuPW07Y1tuPj4yXT0yNTY7Y1tuKzQ+PjJdPTA7bj1sO2Nbbj4+Ml09MDtjW24rND4+Ml09MDtuPXMrODB8MDt5PW47QT1xKzMyfDA7Qj15KzMyfDA7ZG97YVt5Pj4wXT1hW0E+PjBdfDA7eT15KzF8MDtBPUErMXwwfXdoaWxlKCh5fDApPChCfDApKTtGYihzLGYsZyxoKTtHYihzLHQpO289YiszMnwwO0pkKG98MCxqKzMyfDAsMzIpfDA7V2ModCk7UmMocCx0KTtJYyh1LHArODB8MCk7SmModyxwLHUpO0pjKHgscCs0MHwwLHUpO0xjKGIseCk7TGModix3KTt5PWIrMzF8MDthW3k+PjBdPShkW3k+PjBdfDApXihkW3Y+PjBdfDApPDw3O3k9bDtjW3k+PjJdPTA7Y1t5KzQ+PjJdPTA7eT1zO0E9ODtCPXkrNjR8MDtkb3tjW3k+PjJdPWNbQT4+Ml07eT15KzR8MDtBPUErNHwwfXdoaWxlKCh5fDApPChCfDApKTt5PW07Y1t5Pj4yXT01MTI7Y1t5KzQ+PjJdPTA7eT1sO2NbeT4+Ml09MDtjW3krND4+Ml09MDt5PW47QT1iO0I9eSs2NHwwO2Rve2FbeT4+MF09YVtBPj4wXXwwO3k9eSsxfDA7QT1BKzF8MH13aGlsZSgoeXwwKTwoQnwwKSk7RmIocyxmLGcsaCk7R2IocyxyKTtXYyhyKTtKPWFbcisyPj4wXXwwO1RhPWRbcj4+MF18MDt4Yj1IZChkW3IrMT4+MF18MHwwLDAsOCl8MDtxYj1DO0o9SiYyNTU7a2I9SGQoSnwwLDAsMTYpfDA7a2I9eGJ8VGF8a2ImMjAzMTYxNjtUYT1IZChkW3IrMz4+MF18MHwwLDAsOCl8MDt4Yj1DO0Y9SGQoZFtyKzQ+PjBdfDB8MCwwLDE2KXwwO3hiPXhifEM7dWI9ZFtyKzU+PjBdfDA7ZGI9SGQodWJ8MCwwLDI0KXwwO3hiPUdkKFRhfEp8RnxkYnwwLHhifEN8MCw1KXwwO3hiPXhiJjIwOTcxNTE7ZGI9YVtyKzc+PjBdfDA7Rj1IZChkW3IrNj4+MF18MHwwLDAsOCl8MDtKPUM7ZGI9ZGImMjU1O1RhPUhkKGRifDAsMCwxNil8MDtKPUdkKEZ8dWJ8VGF8MCxKfEN8MCwyKXwwO0o9SiYyMDk3MTUxO1RhPUhkKGRbcis4Pj4wXXwwfDAsMCw4KXwwO3ViPUM7Rj1IZChkW3IrOT4+MF18MHwwLDAsMTYpfDA7dWI9dWJ8Qzt2PWRbcisxMD4+MF18MDtTYT1IZCh2fDAsMCwyNCl8MDt1Yj1HZChUYXxkYnxGfFNhfDAsdWJ8Q3wwLDcpfDA7dWI9dWImMjA5NzE1MTtTYT1IZChkW3IrMTE+PjBdfDB8MCwwLDgpfDA7Rj1DO2RiPUhkKGRbcisxMj4+MF18MHwwLDAsMTYpfDA7Rj1GfEM7VGE9ZFtyKzEzPj4wXXwwO3k9SGQoVGF8MCwwLDI0KXwwO0Y9R2QoU2F8dnxkYnx5fDAsRnxDfDAsNCl8MDtGPUYmMjA5NzE1MTt5PWFbcisxNT4+MF18MDtkYj1IZChkW3IrMTQ+PjBdfDB8MCwwLDgpfDA7dj1DO3k9eSYyNTU7U2E9SGQoeXwwLDAsMTYpfDA7dj1HZChkYnxUYXxTYXwwLHZ8Q3wwLDEpfDA7dj12JjIwOTcxNTE7U2E9SGQoZFtyKzE2Pj4wXXwwfDAsMCw4KXwwO1RhPUM7ZGI9SGQoZFtyKzE3Pj4wXXwwfDAsMCwxNil8MDtUYT1UYXxDO0JjPWRbcisxOD4+MF18MDtqYT1IZChCY3wwLDAsMjQpfDA7VGE9R2QoU2F8eXxkYnxqYXwwLFRhfEN8MCw2KXwwO1RhPVRhJjIwOTcxNTE7amE9YVtyKzIwPj4wXXwwO2RiPUhkKGRbcisxOT4+MF18MHwwLDAsOCl8MDt5PUM7amE9SGQoamEmMjU1fDAsMCwxNil8MDt5PUdkKGRifEJjfGphfDAseXxDfDAsMyl8MDtqYT1DO0JjPWFbcisyMz4+MF18MDtkYj1kW3IrMjE+PjBdfDA7U2E9SGQoZFtyKzIyPj4wXXwwfDAsMCw4KXwwO3NiPUM7QmM9QmMmMjU1O1FhPUhkKEJjfDAsMCwxNil8MDtRYT1TYXxkYnxRYSYyMDMxNjE2O2RiPUhkKGRbcisyND4+MF18MHwwLDAsOCl8MDtTYT1DO209SGQoZFtyKzI1Pj4wXXwwfDAsMCwxNil8MDtTYT1TYXxDO3A9ZFtyKzI2Pj4wXXwwO3M9SGQocHwwLDAsMjQpfDA7U2E9R2QoZGJ8QmN8bXxzfDAsU2F8Q3wwLDUpfDA7U2E9U2EmMjA5NzE1MTtzPWFbcisyOD4+MF18MDttPUhkKGRbcisyNz4+MF18MHwwLDAsOCl8MDtCYz1DO3M9cyYyNTU7ZGI9SGQoc3wwLDAsMTYpfDA7QmM9R2QobXxwfGRifDAsQmN8Q3wwLDIpfDA7QmM9QmMmMjA5NzE1MTtkYj1IZChkW3IrMjk+PjBdfDB8MCwwLDgpfDA7cD1DO209SGQoZFtyKzMwPj4wXXwwfDAsMCwxNil8MDtwPXB8QztLYT1IZChkW3IrMzE+PjBdfDB8MCwwLDI0KXwwO3A9R2QoZGJ8c3xtfEthfDAscHxDfDAsNyl8MDtLYT1DO209YVtxKzI+PjBdfDA7cz1kW3E+PjBdfDA7ZGI9SGQoZFtxKzE+PjBdfDB8MCwwLDgpfDA7aWE9QzttPW0mMjU1O2hhPUhkKG18MCwwLDE2KXwwO2hhPWRifHN8aGEmMjAzMTYxNjtzPUhkKGRbcSszPj4wXXwwfDAsMCw4KXwwO2RiPUM7bGE9SGQoZFtxKzQ+PjBdfDB8MCwwLDE2KXwwO2RiPWRifEM7aD1kW3ErNT4+MF18MDt5Yz1IZChofDAsMCwyNCl8MDtkYj1HZChzfG18bGF8eWN8MCxkYnxDfDAsNSl8MDtkYj1kYiYyMDk3MTUxO3ljPWFbcSs3Pj4wXXwwO2xhPUhkKGRbcSs2Pj4wXXwwfDAsMCw4KXwwO209Qzt5Yz15YyYyNTU7cz1IZCh5Y3wwLDAsMTYpfDA7bT1HZChsYXxofHN8MCxtfEN8MCwyKXwwO209bSYyMDk3MTUxO3M9SGQoZFtxKzg+PjBdfDB8MCwwLDgpfDA7aD1DO2xhPUhkKGRbcSs5Pj4wXXwwfDAsMCwxNil8MDtoPWh8QztfYT1kW3ErMTA+PjBdfDA7UGE9SGQoX2F8MCwwLDI0KXwwO2g9R2Qoc3x5Y3xsYXxQYXwwLGh8Q3wwLDcpfDA7aD1oJjIwOTcxNTE7UGE9SGQoZFtxKzExPj4wXXwwfDAsMCw4KXwwO2xhPUM7eWM9SGQoZFtxKzEyPj4wXXwwfDAsMCwxNil8MDtsYT1sYXxDO3M9ZFtxKzEzPj4wXXwwO0VjPUhkKHN8MCwwLDI0KXwwO2xhPUdkKFBhfF9hfHljfEVjfDAsbGF8Q3wwLDQpfDA7bGE9bGEmMjA5NzE1MTtFYz1hW3ErMTU+PjBdfDA7eWM9SGQoZFtxKzE0Pj4wXXwwfDAsMCw4KXwwO19hPUM7RWM9RWMmMjU1O1BhPUhkKEVjfDAsMCwxNil8MDtfYT1HZCh5Y3xzfFBhfDAsX2F8Q3wwLDEpfDA7X2E9X2EmMjA5NzE1MTtQYT1IZChkW3ErMTY+PjBdfDB8MCwwLDgpfDA7cz1DO3ljPUhkKGRbcSsxNz4+MF18MHwwLDAsMTYpfDA7cz1zfEM7Uj1kW3ErMTg+PjBdfDA7QmI9SGQoUnwwLDAsMjQpfDA7cz1HZChQYXxFY3x5Y3xCYnwwLHN8Q3wwLDYpfDA7cz1zJjIwOTcxNTE7QmI9YVtxKzIwPj4wXXwwO3ljPUhkKGRbcSsxOT4+MF18MHwwLDAsOCl8MDtFYz1DO0JiPUhkKEJiJjI1NXwwLDAsMTYpfDA7RWM9R2QoeWN8UnxCYnwwLEVjfEN8MCwzKXwwO0JiPUM7Uj1hW3ErMjM+PjBdfDA7eWM9ZFtxKzIxPj4wXXwwO1BhPUhkKGRbcSsyMj4+MF18MHwwLDAsOCl8MDtEYT1DO1I9UiYyNTU7dWE9SGQoUnwwLDAsMTYpfDA7dWE9UGF8eWN8dWEmMjAzMTYxNjt5Yz1IZChkW3ErMjQ+PjBdfDB8MCwwLDgpfDA7UGE9QztNYT1IZChkW3ErMjU+PjBdfDB8MCwwLDE2KXwwO1BhPVBhfEM7RD1kW3ErMjY+PjBdfDA7emM9SGQoRHwwLDAsMjQpfDA7UGE9R2QoeWN8UnxNYXx6Y3wwLFBhfEN8MCw1KXwwO1BhPVBhJjIwOTcxNTE7emM9YVtxKzI4Pj4wXXwwO01hPUhkKGRbcSsyNz4+MF18MHwwLDAsOCl8MDtSPUM7emM9emMmMjU1O3ljPUhkKHpjfDAsMCwxNil8MDtSPUdkKE1hfER8eWN8MCxSfEN8MCwyKXwwO1I9UiYyMDk3MTUxO3ljPUhkKGRbcSsyOT4+MF18MHwwLDAsOCl8MDtEPUM7TWE9SGQoZFtxKzMwPj4wXXwwfDAsMCwxNil8MDtEPUR8QztJYT1IZChkW2s+PjBdfDB8MCwwLDI0KXwwO0Q9R2QoeWN8emN8TWF8SWF8MCxEfEN8MCw3KXwwO0lhPUM7TWE9YVt0KzI+PjBdfDA7emM9ZFt0Pj4wXXwwO3ljPUhkKGRbdCsxPj4wXXwwfDAsMCw4KXwwO2JhPUM7TWE9TWEmMjU1O0FjPUhkKE1hfDAsMCwxNil8MDtYYT1IZChkW3QrMz4+MF18MHwwLDAsOCl8MDtFYT1DO0dhPUhkKGRbdCs0Pj4wXXwwfDAsMCwxNil8MDtFYT1FYXxDO3BiPWRbdCs1Pj4wXXwwO3phPUhkKHBifDAsMCwyNCl8MDtFYT1HZChYYXxNYXxHYXx6YXwwLEVhfEN8MCw1KXwwO3phPWFbdCs3Pj4wXXwwO0dhPUhkKGRbdCs2Pj4wXXwwfDAsMCw4KXwwO01hPUM7emE9emEmMjU1O1hhPUhkKHphfDAsMCwxNil8MDtNYT1HZChHYXxwYnxYYXwwLE1hfEN8MCwyKXwwO1hhPUhkKGRbdCs4Pj4wXXwwfDAsMCw4KXwwO3BiPUM7R2E9SGQoZFt0Kzk+PjBdfDB8MCwwLDE2KXwwO3BiPXBifEM7WD1kW3QrMTA+PjBdfDA7Tz1IZChYfDAsMCwyNCl8MDtwYj1HZChYYXx6YXxHYXxPfDAscGJ8Q3wwLDcpfDA7Tz1IZChkW3QrMTE+PjBdfDB8MCwwLDgpfDA7R2E9Qzt6YT1IZChkW3QrMTI+PjBdfDB8MCwwLDE2KXwwO0dhPUdhfEM7WGE9ZFt0KzEzPj4wXXwwO0g9SGQoWGF8MCwwLDI0KXwwO0dhPUdkKE98WHx6YXxIfDAsR2F8Q3wwLDQpfDA7SD1hW3QrMTU+PjBdfDA7emE9SGQoZFt0KzE0Pj4wXXwwfDAsMCw4KXwwO1g9QztIPUgmMjU1O089SGQoSHwwLDAsMTYpfDA7WD1HZCh6YXxYYXxPfDAsWHxDfDAsMSl8MDtPPUhkKGRbdCsxNj4+MF18MHwwLDAsOCl8MDtYYT1DO3phPUhkKGRbdCsxNz4+MF18MHwwLDAsMTYpfDA7WGE9WGF8QztVPWRbdCsxOD4+MF18MDt3PUhkKFV8MCwwLDI0KXwwO1hhPUdkKE98SHx6YXx3fDAsWGF8Q3wwLDYpfDA7dz1hW3QrMjA+PjBdfDA7emE9SGQoZFt0KzE5Pj4wXXwwfDAsMCw4KXwwO0g9Qzt3PUhkKHcmMjU1fDAsMCwxNil8MDtIPUdkKHphfFV8d3wwLEh8Q3wwLDMpfDA7dz1DO1U9YVt0KzIzPj4wXXwwO3phPWRbdCsyMT4+MF18MDtPPUhkKGRbdCsyMj4+MF18MHwwLDAsOCl8MDtkYT1DO1U9VSYyNTU7ZWE9SGQoVXwwLDAsMTYpfDA7QmE9SGQoZFt0KzI0Pj4wXXwwfDAsMCw4KXwwO049QztIYT1IZChkW3QrMjU+PjBdfDB8MCwwLDE2KXwwO049TnxDO0E9ZFt0KzI2Pj4wXXwwO3RhPUhkKEF8MCwwLDI0KXwwO049R2QoQmF8VXxIYXx0YXwwLE58Q3wwLDUpfDA7dGE9YVt0KzI4Pj4wXXwwO0hhPUhkKGRbdCsyNz4+MF18MHwwLDAsOCl8MDtVPUM7dGE9dGEmMjU1O0JhPUhkKHRhfDAsMCwxNil8MDtVPUdkKEhhfEF8QmF8MCxVfEN8MCwyKXwwO0JhPUhkKGRbdCsyOT4+MF18MHwwLDAsOCl8MDtBPUM7SGE9SGQoZFt0KzMwPj4wXXwwfDAsMCwxNil8MDtBPUF8QztqPUhkKGRbdCszMT4+MF18MHwwLDAsMjQpfDA7QT1HZChCYXx0YXxIYXxqfDAsQXxDfDAsNyl8MDtqPUM7SGE9T2QoaGF8MCxpYXwwLGtifDAscWJ8MCl8MDtIYT1EZCh5Y3x6Y3xBYyYyMDMxNjE2fDAsYmF8MCxIYXwwLEN8MCl8MDtiYT1DO0FjPU9kKGRifDAsMCxrYnwwLHFifDApfDA7emM9Qzt5Yz1PZChoYXwwLGlhfDAseGJ8MCwwKXwwO3RhPUM7QmE9T2QobXwwLDAsa2J8MCxxYnwwKXwwO0xhPUM7Q2E9T2QoZGJ8MCwwLHhifDAsMCl8MDt0Yz1DO3BhPU9kKGhhfDAsaWF8MCxKfDAsMCl8MDtwYT1EZChDYXwwLHRjfDAscGF8MCxDfDApfDA7TGE9RGQocGF8MCxDfDAsQmF8MCxMYXwwKXwwO01hPURkKExhfDAsQ3wwLE1hJjIwOTcxNTF8MCwwKXwwO0xhPUM7QmE9T2QoaHwwLDAsa2J8MCxxYnwwKXwwO3BhPUM7dGM9T2QobXwwLDAseGJ8MCwwKXwwO0NhPUM7eGM9T2QoZGJ8MCwwLEp8MCwwKXwwO3djPUM7dmM9T2QoaGF8MCxpYXwwLHVifDAsMCl8MDt1Yz1DO09hPU9kKGxhfDAsMCxrYnwwLHFifDApfDA7RmE9QztrYz1PZChofDAsMCx4YnwwLDApfDA7WT1DO21jPU9kKG18MCwwLEp8MCwwKXwwO05hPUM7bmM9T2QoZGJ8MCwwLHVifDAsMCl8MDtvYz1DO2xjPU9kKGhhfDAsaWF8MCxGfDAsMCl8MDtsYz1EZChuY3wwLG9jfDAsbGN8MCxDfDApfDA7TmE9RGQobGN8MCxDfDAsbWN8MCxOYXwwKXwwO1k9RGQoTmF8MCxDfDAsa2N8MCxZfDApfDA7RmE9RGQoWXwwLEN8MCxPYXwwLEZhfDApfDA7R2E9RGQoRmF8MCxDfDAsR2EmMjA5NzE1MXwwLDApfDA7RmE9QztPYT1PZChfYXwwLDAsa2J8MCxxYnwwKXwwO1k9QztrYz1PZChsYXwwLDAseGJ8MCwwKXwwO05hPUM7bWM9T2QoaHwwLDAsSnwwLDApfDA7bGM9QztvYz1PZChtfDAsMCx1YnwwLDApfDA7bmM9QztzYz1PZChkYnwwLDAsRnwwLDApfDA7cmM9QztxYz1PZChoYXwwLGlhfDAsdnwwLDApfDA7cGM9QztjYT1PZChzfDAsMCxrYnwwLHFifDApfDA7WWE9QztaYj1PZChfYXwwLDAseGJ8MCwwKXwwO2thPUM7JGI9T2QobGF8MCwwLEp8MCwwKXwwO1liPUM7YmM9T2QoaHwwLDAsdWJ8MCwwKXwwO19iPUM7ZGM9T2QobXwwLDAsRnwwLDApfDA7YWM9QztlYz1PZChkYnwwLDAsdnwwLDApfDA7ZmM9QztjYz1PZChoYXwwLGlhfDAsVGF8MCwwKXwwO2NjPURkKGVjfDAsZmN8MCxjY3wwLEN8MCl8MDthYz1EZChjY3wwLEN8MCxkY3wwLGFjfDApfDA7X2I9RGQoYWN8MCxDfDAsYmN8MCxfYnwwKXwwO1liPURkKF9ifDAsQ3wwLCRifDAsWWJ8MCl8MDtrYT1EZChZYnwwLEN8MCxaYnwwLGthfDApfDA7WWE9RGQoa2F8MCxDfDAsY2F8MCxZYXwwKXwwO1hhPURkKFlhfDAsQ3wwLFhhJjIwOTcxNTF8MCwwKXwwO1lhPUM7Y2E9T2QoRWN8MCxCYnwwLGtifDAscWJ8MCl8MDtrYT1DO1piPU9kKHN8MCwwLHhifDAsMCl8MDtZYj1DOyRiPU9kKF9hfDAsMCxKfDAsMCl8MDtfYj1DO2JjPU9kKGxhfDAsMCx1YnwwLDApfDA7YWM9QztkYz1PZChofDAsMCxGfDAsMCl8MDtjYz1DO2ZjPU9kKG18MCwwLHZ8MCwwKXwwO2VjPUM7amM9T2QoZGJ8MCwwLFRhfDAsMCl8MDtpYz1DO2hjPU9kKGhhfDAsaWF8MCx5fDAsamF8MCl8MDtnYz1DO0FhPU9kKHVhfDAsRGF8MCxrYnwwLHFifDApfDA7SGI9QztJYj1PZChFY3wwLEJifDAseGJ8MCwwKXwwO0piPUM7S2I9T2Qoc3wwLDAsSnwwLDApfDA7TGI9QztNYj1PZChfYXwwLDAsdWJ8MCwwKXwwO05iPUM7T2I9T2QobGF8MCwwLEZ8MCwwKXwwO1BiPUM7UWI9T2QoaHwwLDAsdnwwLDApfDA7UmI9QztTYj1PZChtfDAsMCxUYXwwLDApfDA7VGI9QztWYj1PZChkYnwwLDAseXwwLGphfDApfDA7V2I9QztYYj1PZChoYXwwLGlhfDAsUWF8MCxzYnwwKXwwO1hiPURkKFZifDAsV2J8MCxYYnwwLEN8MCl8MDtUYj1EZChYYnwwLEN8MCxTYnwwLFRifDApfDA7UmI9RGQoVGJ8MCxDfDAsUWJ8MCxSYnwwKXwwO1BiPURkKFJifDAsQ3wwLE9ifDAsUGJ8MCl8MDtOYj1EZChQYnwwLEN8MCxNYnwwLE5ifDApfDA7TGI9RGQoTmJ8MCxDfDAsS2J8MCxMYnwwKXwwO0piPURkKExifDAsQ3wwLElifDAsSmJ8MCl8MDtIYj1EZChKYnwwLEN8MCxBYXwwLEhifDApfDA7ZGE9RGQoSGJ8MCxDfDAsT3x6YXxlYSYyMDMxNjE2fDAsZGF8MCl8MDtlYT1DO3phPU9kKFBhfDAsMCxrYnwwLHFifDApfDA7Tz1DO0hiPU9kKHVhfDAsRGF8MCx4YnwwLDApfDA7QWE9QztKYj1PZChFY3wwLEJifDAsSnwwLDApfDA7SWI9QztMYj1PZChzfDAsMCx1YnwwLDApfDA7S2I9QztOYj1PZChfYXwwLDAsRnwwLDApfDA7TWI9QztQYj1PZChsYXwwLDAsdnwwLDApfDA7T2I9QztSYj1PZChofDAsMCxUYXwwLDApfDA7UWI9QztUYj1PZChtfDAsMCx5fDAsamF8MCl8MDtTYj1DO1hiPU9kKGRifDAsMCxRYXwwLHNifDApfDA7V2I9QztWYj1PZChoYXwwLGlhfDAsU2F8MCwwKXwwO1ViPUM7Vj1PZChSfDAsMCxrYnwwLHFifDApfDA7VD1DO2hiPU9kKFBhfDAsMCx4YnwwLDApfDA7Vz1DO0k9T2QodWF8MCxEYXwwLEp8MCwwKXwwO2liPUM7dmI9T2QoRWN8MCxCYnwwLHVifDAsMCl8MDtFPUM7UT1PZChzfDAsMCxGfDAsMCl8MDt3Yj1DO1ZhPU9kKF9hfDAsMCx2fDAsMCl8MDtLPUM7bmI9T2QobGF8MCwwLFRhfDAsMCl8MDtXYT1DOyQ9T2QoaHwwLDAseXwwLGphfDApfDA7b2I9QztiYj1PZChtfDAsMCxRYXwwLHNifDApfDA7YWE9QztEYj1PZChkYnwwLDAsU2F8MCwwKXwwO0ViPUM7Y2I9T2QoaGF8MCxpYXwwLEJjfDAsMCl8MDtjYj1EZChEYnwwLEVifDAsY2J8MCxDfDApfDA7YWE9RGQoY2J8MCxDfDAsYmJ8MCxhYXwwKXwwO29iPURkKGFhfDAsQ3wwLCR8MCxvYnwwKXwwO1dhPURkKG9ifDAsQ3wwLG5ifDAsV2F8MCl8MDtLPURkKFdhfDAsQ3wwLFZhfDAsS3wwKXwwO3diPURkKEt8MCxDfDAsUXwwLHdifDApfDA7RT1EZCh3YnwwLEN8MCx2YnwwLEV8MCl8MDtpYj1EZChFfDAsQ3wwLEl8MCxpYnwwKXwwO1c9RGQoaWJ8MCxDfDAsaGJ8MCxXfDApfDA7VD1EZChXfDAsQ3wwLFZ8MCxUfDApfDA7VT1EZChUfDAsQ3wwLFUmMjA5NzE1MXwwLDApfDA7VD1DO3FiPU9kKER8MCxJYXwwLGtifDAscWJ8MCl8MDtrYj1DO1Y9T2QoUnwwLDAseGJ8MCwwKXwwO1c9QztoYj1PZChQYXwwLDAsSnwwLDApfDA7aWI9QztJPU9kKHVhfDAsRGF8MCx1YnwwLDApfDA7RT1DO3ZiPU9kKEVjfDAsQmJ8MCxGfDAsMCl8MDt3Yj1DO1E9T2Qoc3wwLDAsdnwwLDApfDA7Sz1DO1ZhPU9kKF9hfDAsMCxUYXwwLDApfDA7V2E9QztuYj1PZChsYXwwLDAseXwwLGphfDApfDA7b2I9QzskPU9kKGh8MCwwLFFhfDAsc2J8MCl8MDthYT1DO2JiPU9kKG18MCwwLFNhfDAsMCl8MDtjYj1DO0ViPU9kKGRifDAsMCxCY3wwLDApfDA7RGI9QztpYT1PZChoYXwwLGlhfDAscHwwLEthfDApfDA7aGE9Qzt4Yj1PZChEfDAsSWF8MCx4YnwwLDApfDA7eWI9QztsYj1PZChSfDAsMCxKfDAsMCl8MDtHPUM7bWE9T2QoUGF8MCwwLHVifDAsMCl8MDttYj1DO29hPU9kKHVhfDAsRGF8MCxGfDAsMCl8MDtnYT1DO3piPU9kKEVjfDAsQmJ8MCx2fDAsMCl8MDtyYj1DO3NhPU9kKHN8MCwwLFRhfDAsMCl8MDtBYj1DO3hhPU9kKF9hfDAsMCx5fDAsamF8MCl8MDtyYT1DO1VhPU9kKGxhfDAsMCxRYXwwLHNifDApfDA7d2E9QztlYj1PZChofDAsMCxTYXwwLDApfDA7bmE9Qzt0Yj1PZChtfDAsMCxCY3wwLDApfDA7bD1DO2RiPU9kKGRifDAsMCxwfDAsS2F8MCl8MDtkYj1EZCh0YnwwLGx8MCxkYnwwLEN8MCl8MDtuYT1EZChkYnwwLEN8MCxlYnwwLG5hfDApfDA7d2E9RGQobmF8MCxDfDAsVWF8MCx3YXwwKXwwO3JhPURkKHdhfDAsQ3wwLHhhfDAscmF8MCl8MDtBYj1EZChyYXwwLEN8MCxzYXwwLEFifDApfDA7cmI9RGQoQWJ8MCxDfDAsemJ8MCxyYnwwKXwwO2dhPURkKHJifDAsQ3wwLG9hfDAsZ2F8MCl8MDttYj1EZChnYXwwLEN8MCxtYXwwLG1ifDApfDA7Rz1EZChtYnwwLEN8MCxsYnwwLEd8MCl8MDt5Yj1EZChHfDAsQ3wwLHhifDAseWJ8MCl8MDt4Yj1DO0o9T2QoRHwwLElhfDAsSnwwLDApfDA7Rz1DO2xiPU9kKFJ8MCwwLHVifDAsMCl8MDttYj1DO21hPU9kKFBhfDAsMCxGfDAsMCl8MDtnYT1DO29hPU9kKHVhfDAsRGF8MCx2fDAsMCl8MDtyYj1DO3piPU9kKEVjfDAsQmJ8MCxUYXwwLDApfDA7QWI9QztzYT1PZChzfDAsMCx5fDAsamF8MCl8MDtyYT1DO3hhPU9kKF9hfDAsMCxRYXwwLHNifDApfDA7d2E9QztVYT1PZChsYXwwLDAsU2F8MCwwKXwwO25hPUM7ZWI9T2QoaHwwLDAsQmN8MCwwKXwwO2RiPUM7bT1PZChtfDAsMCxwfDAsS2F8MCl8MDtsPUM7dWI9T2QoRHwwLElhfDAsdWJ8MCwwKXwwO3RiPUM7ZmI9T2QoUnwwLDAsRnwwLDApfDA7Zz1DO0w9T2QoUGF8MCwwLHZ8MCwwKXwwO2diPUM7cj1PZCh1YXwwLERhfDAsVGF8MCwwKXwwO249QztmYT1PZChFY3wwLEJifDAseXwwLGphfDApfDA7eD1DO3FhPU9kKHN8MCwwLFFhfDAsc2J8MCl8MDtrPUM7dmE9T2QoX2F8MCwwLFNhfDAsMCl8MDtNPUM7Q2I9T2QobGF8MCwwLEJjfDAsMCl8MDtmPUM7aD1PZChofDAsMCxwfDAsS2F8MCl8MDtoPURkKENifDAsZnwwLGh8MCxDfDApfDA7TT1EZChofDAsQ3wwLHZhfDAsTXwwKXwwO2s9RGQoTXwwLEN8MCxxYXwwLGt8MCl8MDt4PURkKGt8MCxDfDAsZmF8MCx4fDApfDA7bj1EZCh4fDAsQ3wwLHJ8MCxufDApfDA7Z2I9RGQobnwwLEN8MCxMfDAsZ2J8MCl8MDtnPURkKGdifDAsQ3wwLGZifDAsZ3wwKXwwO3RiPURkKGd8MCxDfDAsdWJ8MCx0YnwwKXwwO3ViPUM7Rj1PZChEfDAsSWF8MCxGfDAsMCl8MDtnPUM7ZmI9T2QoUnwwLDAsdnwwLDApfDA7Z2I9QztMPU9kKFBhfDAsMCxUYXwwLDApfDA7bj1DO3I9T2QodWF8MCxEYXwwLHl8MCxqYXwwKXwwO3g9QztmYT1PZChFY3wwLEJifDAsUWF8MCxzYnwwKXwwO2s9QztxYT1PZChzfDAsMCxTYXwwLDApfDA7TT1DO3ZhPU9kKF9hfDAsMCxCY3wwLDApfDA7aD1DO2xhPU9kKGxhfDAsMCxwfDAsS2F8MCl8MDtmPUM7dj1PZChEfDAsSWF8MCx2fDAsMCl8MDtDYj1DO0I9T2QoUnwwLDAsVGF8MCwwKXwwO1M9QztfPU9kKFBhfDAsMCx5fDAsamF8MCl8MDtSYT1DO2FiPU9kKHVhfDAsRGF8MCxRYXwwLHNifDApfDA7Wj1DO1phPU9kKEVjfDAsQmJ8MCxTYXwwLDApfDA7JGE9QztQPU9kKHN8MCwwLEJjfDAsMCl8MDt1PUM7X2E9T2QoX2F8MCwwLHB8MCxLYXwwKXwwO19hPURkKFB8MCx1fDAsX2F8MCxDfDApfDA7JGE9RGQoX2F8MCxDfDAsWmF8MCwkYXwwKXwwO1o9RGQoJGF8MCxDfDAsYWJ8MCxafDApfDA7UmE9RGQoWnwwLEN8MCxffDAsUmF8MCl8MDtTPURkKFJhfDAsQ3wwLEJ8MCxTfDApfDA7Q2I9RGQoU3wwLEN8MCx2fDAsQ2J8MCl8MDt2PUM7VGE9T2QoRHwwLElhfDAsVGF8MCwwKXwwO1M9QztCPU9kKFJ8MCwwLHl8MCxqYXwwKXwwO1JhPUM7Xz1PZChQYXwwLDAsUWF8MCxzYnwwKXwwO1o9QzthYj1PZCh1YXwwLERhfDAsU2F8MCwwKXwwOyRhPUM7WmE9T2QoRWN8MCxCYnwwLEJjfDAsMCl8MDtfYT1DO3M9T2Qoc3wwLDAscHwwLEthfDApfDA7dT1DO2phPU9kKER8MCxJYXwwLHl8MCxqYXwwKXwwO3k9QztQPU9kKFJ8MCwwLFFhfDAsc2J8MCl8MDtKYT1DO3lhPU9kKFBhfDAsMCxTYXwwLDApfDA7amI9QztDYz1PZCh1YXwwLERhfDAsQmN8MCwwKXwwO0RjPUM7QmI9T2QoRWN8MCxCYnwwLHB8MCxLYXwwKXwwO0JiPURkKENjfDAsRGN8MCxCYnwwLEN8MCl8MDtqYj1EZChCYnwwLEN8MCx5YXwwLGpifDApfDA7SmE9RGQoamJ8MCxDfDAsUHwwLEphfDApfDA7eT1EZChKYXwwLEN8MCxqYXwwLHl8MCl8MDtqYT1DO3NiPU9kKER8MCxJYXwwLFFhfDAsc2J8MCl8MDtRYT1DO0phPU9kKFJ8MCwwLFNhfDAsMCl8MDtQPUM7amI9T2QoUGF8MCwwLEJjfDAsMCl8MDt5YT1DO0RhPU9kKHVhfDAsRGF8MCxwfDAsS2F8MCl8MDt1YT1DO1NhPU9kKER8MCxJYXwwLFNhfDAsMCl8MDtCYj1DO0RjPU9kKFJ8MCwwLEJjfDAsMCl8MDtDYz1DO1BhPU9kKFBhfDAsMCxwfDAsS2F8MCl8MDtQYT1EZChEY3wwLENjfDAsUGF8MCxDfDApfDA7QmI9RGQoUGF8MCxDfDAsU2F8MCxCYnwwKXwwO1NhPUM7QmM9T2QoRHwwLElhfDAsQmN8MCwwKXwwO1BhPUM7Uj1PZChSfDAsMCxwfDAsS2F8MCl8MDtSPURkKEJjfDAsUGF8MCxSfDAsQ3wwKXwwO1BhPUM7S2E9T2QoRHwwLElhfDAscHwwLEthfDApfDA7cD1DO0lhPURkKEhhfDAsYmF8MCwxMDQ4NTc2LDApfDA7SWE9R2QoSWF8MCxDfDAsMjEpfDA7RD1DO3RhPURkKEFjfDAsemN8MCx5Y3wwLHRhfDApfDA7dGE9RGQodGF8MCxDfDAsSWF8MCxEfDApfDA7RWE9RGQodGF8MCxDfDAsRWEmMjA5NzE1MXwwLDApfDA7dGE9QztEPUhkKElhfDAsRHwwLDIxKXwwO0Q9Q2QoSGF8MCxiYXwwLER8MCxDfDApfDA7YmE9QztIYT1EZChNYXwwLExhfDAsMTA0ODU3NiwwKXwwO0hhPUdkKEhhfDAsQ3wwLDIxKXwwO0lhPUM7dWM9RGQoeGN8MCx3Y3wwLHZjfDAsdWN8MCl8MDtDYT1EZCh1Y3wwLEN8MCx0Y3wwLENhfDApfDA7cGE9RGQoQ2F8MCxDfDAsQmF8MCxwYXwwKXwwO3BiPURkKHBhfDAsQ3wwLHBiJjIwOTcxNTF8MCwwKXwwO3BiPURkKHBifDAsQ3wwLEhhfDAsSWF8MCl8MDtwYT1DO0lhPUhkKEhhfDAsSWF8MCwyMSl8MDtIYT1DO0JhPURkKEdhfDAsRmF8MCwxMDQ4NTc2LDApfDA7QmE9RWQoQmF8MCxDfDAsMjEpfDA7Q2E9QztwYz1EZChzY3wwLHJjfDAscWN8MCxwY3wwKXwwO25jPURkKHBjfDAsQ3wwLG9jfDAsbmN8MCl8MDtsYz1EZChuY3wwLEN8MCxtY3wwLGxjfDApfDA7TmE9RGQobGN8MCxDfDAsa2N8MCxOYXwwKXwwO1k9RGQoTmF8MCxDfDAsT2F8MCxZfDApfDA7WD1EZChZfDAsQ3wwLFgmMjA5NzE1MXwwLDApfDA7WD1EZChYfDAsQ3wwLEJhfDAsQ2F8MCl8MDtZPUM7Q2E9SGQoQmF8MCxDYXwwLDIxKXwwO0JhPUM7T2E9RGQoWGF8MCxZYXwwLDEwNDg1NzYsMCl8MDtPYT1FZChPYXwwLEN8MCwyMSl8MDtOYT1DO2djPURkKGpjfDAsaWN8MCxoY3wwLGdjfDApfDA7ZWM9RGQoZ2N8MCxDfDAsZmN8MCxlY3wwKXwwO2NjPURkKGVjfDAsQ3wwLGRjfDAsY2N8MCl8MDthYz1EZChjY3wwLEN8MCxiY3wwLGFjfDApfDA7X2I9RGQoYWN8MCxDfDAsJGJ8MCxfYnwwKXwwO1liPURkKF9ifDAsQ3wwLFpifDAsWWJ8MCl8MDtrYT1EZChZYnwwLEN8MCxjYXwwLGthfDApfDA7dz1EZChrYXwwLEN8MCxIfDAsd3wwKXwwO3c9RGQod3wwLEN8MCxPYXwwLE5hfDApfDA7SD1DO05hPUhkKE9hfDAsTmF8MCwyMSl8MDtPYT1DO2thPURkKGRhfDAsZWF8MCwxMDQ4NTc2LDApfDA7a2E9RWQoa2F8MCxDfDAsMjEpfDA7Y2E9QztVYj1EZChYYnwwLFdifDAsVmJ8MCxVYnwwKXwwO1NiPURkKFVifDAsQ3wwLFRifDAsU2J8MCl8MDtRYj1EZChTYnwwLEN8MCxSYnwwLFFifDApfDA7T2I9RGQoUWJ8MCxDfDAsUGJ8MCxPYnwwKXwwO01iPURkKE9ifDAsQ3wwLE5ifDAsTWJ8MCl8MDtLYj1EZChNYnwwLEN8MCxMYnwwLEtifDApfDA7SWI9RGQoS2J8MCxDfDAsSmJ8MCxJYnwwKXwwO0FhPURkKElifDAsQ3wwLEhifDAsQWF8MCl8MDtPPURkKEFhfDAsQ3wwLHphfDAsT3wwKXwwO049RGQoT3wwLEN8MCxOJjIwOTcxNTF8MCwwKXwwO049RGQoTnwwLEN8MCxrYXwwLGNhfDApfDA7Tz1DO2NhPUhkKGthfDAsY2F8MCwyMSl8MDtrYT1DO3phPURkKFV8MCxUfDAsMTA0ODU3NiwwKXwwO3phPUVkKHphfDAsQ3wwLDIxKXwwO0FhPUM7aGE9RGQoRWJ8MCxEYnwwLGlhfDAsaGF8MCl8MDtjYj1EZChoYXwwLEN8MCxiYnwwLGNifDApfDA7YWE9RGQoY2J8MCxDfDAsJHwwLGFhfDApfDA7b2I9RGQoYWF8MCxDfDAsbmJ8MCxvYnwwKXwwO1dhPURkKG9ifDAsQ3wwLFZhfDAsV2F8MCl8MDtLPURkKFdhfDAsQ3wwLFF8MCxLfDApfDA7d2I9RGQoS3wwLEN8MCx2YnwwLHdifDApfDA7RT1EZCh3YnwwLEN8MCxJfDAsRXwwKXwwO2liPURkKEV8MCxDfDAsaGJ8MCxpYnwwKXwwO1c9RGQoaWJ8MCxDfDAsVnwwLFd8MCl8MDtrYj1EZChXfDAsQ3wwLHFifDAsa2J8MCl8MDtqPURkKGtifDAsQ3wwLEF8MCxqfDApfDA7aj1EZChqfDAsQ3wwLHphfDAsQWF8MCl8MDtBPUM7QWE9SGQoemF8MCxBYXwwLDIxKXwwO3phPUM7a2I9RGQoeWJ8MCx4YnwwLDEwNDg1NzYsMCl8MDtrYj1FZChrYnwwLEN8MCwyMSl8MDtxYj1DO2w9RGQoZWJ8MCxkYnwwLG18MCxsfDApfDA7bmE9RGQobHwwLEN8MCxVYXwwLG5hfDApfDA7d2E9RGQobmF8MCxDfDAseGF8MCx3YXwwKXwwO3JhPURkKHdhfDAsQ3wwLHNhfDAscmF8MCl8MDtBYj1EZChyYXwwLEN8MCx6YnwwLEFifDApfDA7cmI9RGQoQWJ8MCxDfDAsb2F8MCxyYnwwKXwwO2dhPURkKHJifDAsQ3wwLG1hfDAsZ2F8MCl8MDttYj1EZChnYXwwLEN8MCxsYnwwLG1ifDApfDA7Rz1EZChtYnwwLEN8MCxKfDAsR3wwKXwwO0c9RGQoR3wwLEN8MCxrYnwwLHFifDApfDA7Sj1DO3FiPUhkKGtifDAscWJ8MCwyMSl8MDtrYj1DO21iPURkKHRifDAsdWJ8MCwxMDQ4NTc2LDApfDA7bWI9RWQobWJ8MCxDfDAsMjEpfDA7bGI9QztmPURkKHZhfDAsaHwwLGxhfDAsZnwwKXwwO009RGQoZnwwLEN8MCxxYXwwLE18MCl8MDtrPURkKE18MCxDfDAsZmF8MCxrfDApfDA7eD1EZChrfDAsQ3wwLHJ8MCx4fDApfDA7bj1EZCh4fDAsQ3wwLEx8MCxufDApfDA7Z2I9RGQobnwwLEN8MCxmYnwwLGdifDApfDA7Zz1EZChnYnwwLEN8MCxGfDAsZ3wwKXwwO2c9RGQoZ3wwLEN8MCxtYnwwLGxifDApfDA7Rj1DO2xiPUhkKG1ifDAsbGJ8MCwyMSl8MDttYj1DO2diPURkKENifDAsdnwwLDEwNDg1NzYsMCl8MDtnYj1FZChnYnwwLEN8MCwyMSl8MDtmYj1DO3U9RGQoWmF8MCxfYXwwLHN8MCx1fDApfDA7JGE9RGQodXwwLEN8MCxhYnwwLCRhfDApfDA7Wj1EZCgkYXwwLEN8MCxffDAsWnwwKXwwO1JhPURkKFp8MCxDfDAsQnwwLFJhfDApfDA7Uz1EZChSYXwwLEN8MCxUYXwwLFN8MCl8MDtTPURkKFN8MCxDfDAsZ2J8MCxmYnwwKXwwO1RhPUM7ZmI9SGQoZ2J8MCxmYnwwLDIxKXwwO2diPUM7UmE9RGQoeXwwLGphfDAsMTA0ODU3NiwwKXwwO1JhPUVkKFJhfDAsQ3wwLDIxKXwwO0I9Qzt1YT1EZChqYnwwLHlhfDAsRGF8MCx1YXwwKXwwO1A9RGQodWF8MCxDfDAsSmF8MCxQfDApfDA7UWE9RGQoUHwwLEN8MCxzYnwwLFFhfDApfDA7UWE9RGQoUWF8MCxDfDAsUmF8MCxCfDApfDA7c2I9QztCPUhkKFJhfDAsQnwwLDIxKXwwO0I9Q2QoeXwwLGphfDAsQnwwLEN8MCl8MDtqYT1DO3k9RGQoQmJ8MCxTYXwwLDEwNDg1NzYsMCl8MDt5PUVkKHl8MCxDfDAsMjEpfDA7UmE9QztQYT1EZChSfDAsUGF8MCx5fDAsUmF8MCl8MDtSPUM7UmE9SGQoeXwwLFJhfDAsMjEpfDA7UmE9Q2QoQmJ8MCxTYXwwLFJhfDAsQ3wwKXwwO1NhPUM7QmI9RGQoS2F8MCxwfDAsMTA0ODU3NiwwKXwwO0JiPUVkKEJifDAsQ3wwLDIxKXwwO3k9QztQPUhkKEJifDAseXwwLDIxKXwwO1A9Q2QoS2F8MCxwfDAsUHwwLEN8MCl8MDtwPUM7S2E9RGQoRWF8MCx0YXwwLDEwNDg1NzYsMCl8MDtLYT1HZChLYXwwLEN8MCwyMSl8MDtKYT1DO3VhPUhkKEthfDAsSmF8MCwyMSl8MDt1YT1DZChFYXwwLHRhfDAsdWF8MCxDfDApfDA7dGE9QztFYT1EZChwYnwwLHBhfDAsMTA0ODU3NiwwKXwwO0VhPUVkKEVhfDAsQ3wwLDIxKXwwO0RhPUM7eWE9SGQoRWF8MCxEYXwwLDIxKXwwO3lhPUNkKHBifDAscGF8MCx5YXwwLEN8MCl8MDtwYT1DO3BiPURkKFh8MCxZfDAsMTA0ODU3NiwwKXwwO3BiPUVkKHBifDAsQ3wwLDIxKXwwO2piPUM7Wj1IZChwYnwwLGpifDAsMjEpfDA7Xz1DOyRhPURkKHd8MCxIfDAsMTA0ODU3NiwwKXwwOyRhPUVkKCRhfDAsQ3wwLDIxKXwwO2FiPUM7dT1IZCgkYXwwLGFifDAsMjEpfDA7cz1DO19hPURkKE58MCxPfDAsMTA0ODU3NiwwKXwwO19hPUVkKF9hfDAsQ3wwLDIxKXwwO1phPUM7bj1IZChfYXwwLFphfDAsMjEpfDA7TD1DO3g9RGQoanwwLEF8MCwxMDQ4NTc2LDApfDA7eD1FZCh4fDAsQ3wwLDIxKXwwO3I9QztrPUhkKHh8MCxyfDAsMjEpfDA7ZmE9QztNPURkKEd8MCxKfDAsMTA0ODU3NiwwKXwwO009RWQoTXwwLEN8MCwyMSl8MDtxYT1DO2Y9SGQoTXwwLHFhfDAsMjEpfDA7bGE9QztoPURkKGd8MCxGfDAsMTA0ODU3NiwwKXwwO2g9RWQoaHwwLEN8MCwyMSl8MDt2YT1DO2dhPUhkKGh8MCx2YXwwLDIxKXwwO21hPUM7cmI9RGQoU3wwLFRhfDAsMTA0ODU3NiwwKXwwO3JiPUVkKHJifDAsQ3wwLDIxKXwwO29hPUM7amE9RGQocmJ8MCxvYXwwLEJ8MCxqYXwwKXwwO0I9QztvYT1IZChyYnwwLG9hfDAsMjEpfDA7b2E9Q2QoU3wwLFRhfDAsb2F8MCxDfDApfDA7VGE9QztTPURkKFFhfDAsc2J8MCwxMDQ4NTc2LDApfDA7Uz1FZChTfDAsQ3wwLDIxKXwwO3JiPUM7U2E9RGQoU3wwLHJifDAsUmF8MCxTYXwwKXwwO1JhPUM7cmI9SGQoU3wwLHJifDAsMjEpfDA7cmI9Q2QoUWF8MCxzYnwwLHJifDAsQ3wwKXwwO3NiPUM7UWE9RGQoUGF8MCxSfDAsMTA0ODU3NiwwKXwwO1FhPUVkKFFhfDAsQ3wwLDIxKXwwO1M9QztwPURkKFFhfDAsU3wwLFB8MCxwfDApfDA7UD1DO1M9SGQoUWF8MCxTfDAsMjEpfDA7Uz1DZChQYXwwLFJ8MCxTfDAsQ3wwKXwwO1I9QztQYT1PZChCYnwwLHl8MCw2NjY2NDMsMCl8MDtRYT1DO0FiPU9kKEJifDAseXwwLDQ3MDI5NiwwKXwwO3piPUM7cmE9T2QoQmJ8MCx5fDAsNjU0MTgzLDApfDA7c2E9Qzt3YT1PZChCYnwwLHl8MCwtOTk3ODA1LC0xKXwwO3hhPUM7bmE9T2QoQmJ8MCx5fDAsMTM2NjU3LDApfDA7VWE9Qzt5PU9kKEJifDAseXwwLC02ODM5MDEsLTEpfDA7eT1EZChDYnwwLHZ8MCx5fDAsQ3wwKXwwO2diPUNkKHl8MCxDfDAsZmJ8MCxnYnwwKXwwO3ZhPURkKGdifDAsQ3wwLGh8MCx2YXwwKXwwO2g9QztnYj1PZChwfDAsUHwwLDY2NjY0MywwKXwwO2ZiPUM7eT1PZChwfDAsUHwwLDQ3MDI5NiwwKXwwO3Y9QztDYj1PZChwfDAsUHwwLDY1NDE4MywwKXwwO0JiPUM7bD1PZChwfDAsUHwwLC05OTc4MDUsLTEpfDA7bT1DO2RiPU9kKHB8MCxQfDAsMTM2NjU3LDApfDA7ZWI9QztQPU9kKHB8MCxQfDAsLTY4MzkwMSwtMSl8MDtwPUM7Vz1PZChTfDAsUnwwLDY2NjY0MywwKXwwO1Y9QztpYj1PZChTfDAsUnwwLDQ3MDI5NiwwKXwwO2hiPUM7RT1PZChTfDAsUnwwLDY1NDE4MywwKXwwO0k9Qzt3Yj1PZChTfDAsUnwwLC05OTc4MDUsLTEpfDA7dmI9QztLPU9kKFN8MCxSfDAsMTM2NjU3LDApfDA7UT1DO1I9T2QoU3wwLFJ8MCwtNjgzOTAxLC0xKXwwO1M9Qzt4YT1EZCh0YnwwLHVifDAsd2F8MCx4YXwwKXwwO2ViPURkKHhhfDAsQ3wwLGRifDAsZWJ8MCl8MDtTPURkKGVifDAsQ3wwLFJ8MCxTfDApfDA7bWI9Q2QoU3wwLEN8MCxsYnwwLG1ifDApfDA7cWE9RGQobWJ8MCxDfDAsTXwwLHFhfDApfDA7TT1DO21iPU9kKFNhfDAsUmF8MCw2NjY2NDMsMCl8MDtsYj1DO1M9T2QoU2F8MCxSYXwwLDQ3MDI5NiwwKXwwO1I9QztlYj1PZChTYXwwLFJhfDAsNjU0MTgzLDApfDA7ZGI9Qzt4YT1PZChTYXwwLFJhfDAsLTk5NzgwNSwtMSl8MDt3YT1DO3ViPU9kKFNhfDAsUmF8MCwxMzY2NTcsMCl8MDt0Yj1DO1JhPU9kKFNhfDAsUmF8MCwtNjgzOTAxLC0xKXwwO1NhPUM7V2E9T2QocmJ8MCxzYnwwLDY2NjY0MywwKXwwO1ZhPUM7b2I9T2QocmJ8MCxzYnwwLDQ3MDI5NiwwKXwwO25iPUM7YWE9T2QocmJ8MCxzYnwwLDY1NDE4MywwKXwwOyQ9QztjYj1PZChyYnwwLHNifDAsLTk5NzgwNSwtMSl8MDtiYj1DO2hhPU9kKHJifDAsc2J8MCwxMzY2NTcsMCl8MDtpYT1DO3NiPU9kKHJifDAsc2J8MCwtNjgzOTAxLC0xKXwwO3JiPUM7emI9RGQoQ2J8MCxCYnwwLEFifDAsemJ8MCl8MDt4Yj1EZCh6YnwwLEN8MCx5YnwwLHhifDApfDA7dmI9RGQoeGJ8MCxDfDAsd2J8MCx2YnwwKXwwO3RiPURkKHZifDAsQ3wwLHVifDAsdGJ8MCl8MDtyYj1EZCh0YnwwLEN8MCxzYnwwLHJifDApfDA7a2I9Q2QocmJ8MCxDfDAscWJ8MCxrYnwwKXwwO3I9RGQoa2J8MCxDfDAseHwwLHJ8MCl8MDt4PUM7a2I9T2QoamF8MCxCfDAsNjY2NjQzLDApfDA7a2I9RGQocGJ8MCxqYnwwLGtifDAsQ3wwKXwwO1lhPURkKGtifDAsQ3wwLFhhfDAsWWF8MCl8MDtPYT1DZChZYXwwLEN8MCxOYXwwLE9hfDApfDA7TmE9QztZYT1PZChqYXwwLEJ8MCw0NzAyOTYsMCl8MDtYYT1DO2tiPU9kKGphfDAsQnwwLDY1NDE4MywwKXwwO2piPUM7bGI9RGQob2J8MCxuYnwwLG1ifDAsbGJ8MCl8MDtqYj1EZChsYnwwLEN8MCxrYnwwLGpifDApfDA7YWI9RGQoamJ8MCxDfDAsJGF8MCxhYnwwKXwwO2VhPURkKGFifDAsQ3wwLGRhfDAsZWF8MCl8MDtrYT1DZChlYXwwLEN8MCxjYXwwLGthfDApfDA7Y2E9QztlYT1PZChqYXwwLEJ8MCwtOTk3ODA1LC0xKXwwO2RhPUM7YWI9T2QoamF8MCxCfDAsMTM2NjU3LDApfDA7JGE9QztmYj1EZChpYnwwLGhifDAsZ2J8MCxmYnwwKXwwO2RiPURkKGZifDAsQ3wwLGVifDAsZGJ8MCl8MDtiYj1EZChkYnwwLEN8MCxjYnwwLGJifDApfDA7JGE9RGQoYmJ8MCxDfDAsYWJ8MCwkYXwwKXwwO1phPURkKCRhfDAsQ3wwLF9hfDAsWmF8MCl8MDtUPURkKFphfDAsQ3wwLFV8MCxUfDApfDA7emE9Q2QoVHwwLEN8MCxBYXwwLHphfDApfDA7QWE9QztCPU9kKGphfDAsQnwwLC02ODM5MDEsLTEpfDA7amE9QztUPURkKE9hfDAsTmF8MCwxMDQ4NTc2LDApfDA7VD1FZChUfDAsQ3wwLDIxKXwwO1U9QztWYT1EZChZYXwwLFhhfDAsV2F8MCxWYXwwKXwwO0g9RGQoVmF8MCxDfDAsd3wwLEh8MCl8MDtzPUNkKEh8MCxDfDAsdXwwLHN8MCl8MDtzPURkKHN8MCxDfDAsVHwwLFV8MCl8MDt1PUM7VT1IZChUfDAsVXwwLDIxKXwwO1Q9QztIPURkKGthfDAsY2F8MCwxMDQ4NTc2LDApfDA7SD1FZChIfDAsQ3wwLDIxKXwwO3c9QztWPURkKFN8MCxSfDAsV3wwLFZ8MCl8MDskPURkKFZ8MCxDfDAsYWF8MCwkfDApfDA7ZGE9RGQoJHwwLEN8MCxlYXwwLGRhfDApfDA7Tz1EZChkYXwwLEN8MCxOfDAsT3wwKXwwO0w9Q2QoT3wwLEN8MCxufDAsTHwwKXwwO0w9RGQoTHwwLEN8MCxIfDAsd3wwKXwwO249Qzt3PUhkKEh8MCx3fDAsMjEpfDA7SD1DO089RGQoemF8MCxBYXwwLDEwNDg1NzYsMCl8MDtPPUVkKE98MCxDfDAsMjEpfDA7Tj1DO1FhPURkKHl8MCx2fDAsUGF8MCxRYXwwKXwwO0k9RGQoUWF8MCxDfDAsRXwwLEl8MCl8MDt3YT1EZChJfDAsQ3wwLHhhfDAsd2F8MCl8MDtpYT1EZCh3YXwwLEN8MCxoYXwwLGlhfDApfDA7amE9RGQoaWF8MCxDfDAsQnwwLGphfDApfDA7QT1EZChqYXwwLEN8MCxqfDAsQXwwKXwwO2ZhPUNkKEF8MCxDfDAsa3wwLGZhfDApfDA7ZmE9RGQoZmF8MCxDfDAsT3wwLE58MCl8MDtrPUM7Tj1IZChPfDAsTnwwLDIxKXwwO089QztBPURkKHJ8MCx4fDAsMTA0ODU3NiwwKXwwO0E9RWQoQXwwLEN8MCwyMSl8MDtqPUM7c2E9RGQobHwwLG18MCxyYXwwLHNhfDApfDA7UT1EZChzYXwwLEN8MCxLfDAsUXwwKXwwO1NhPURkKFF8MCxDfDAsUmF8MCxTYXwwKXwwO0o9RGQoU2F8MCxDfDAsR3wwLEp8MCl8MDtsYT1DZChKfDAsQ3wwLGZ8MCxsYXwwKXwwO2xhPURkKGxhfDAsQ3wwLEF8MCxqfDApfDA7Zj1DO2o9SGQoQXwwLGp8MCwyMSl8MDtqPUNkKHJ8MCx4fDAsanwwLEN8MCl8MDt4PUM7cj1EZChxYXwwLE18MCwxMDQ4NTc2LDApfDA7cj1FZChyfDAsQ3wwLDIxKXwwO0E9QztVYT1EZChQfDAscHwwLG5hfDAsVWF8MCl8MDtGPURkKFVhfDAsQ3wwLGd8MCxGfDApfDA7bWE9Q2QoRnwwLEN8MCxnYXwwLG1hfDApfDA7bWE9RGQobWF8MCxDfDAscnwwLEF8MCl8MDtnYT1DO0E9SGQocnwwLEF8MCwyMSl8MDtBPUNkKHFhfDAsTXwwLEF8MCxDfDApfDA7TT1DO3FhPURkKHZhfDAsaHwwLDEwNDg1NzYsMCl8MDtxYT1FZChxYXwwLEN8MCwyMSl8MDtyPUM7VGE9RGQocWF8MCxyfDAsb2F8MCxUYXwwKXwwO29hPUM7cj1IZChxYXwwLHJ8MCwyMSl8MDtyPUNkKHZhfDAsaHwwLHJ8MCxDfDApfDA7aD1DO3ZhPURkKHN8MCx1fDAsMTA0ODU3NiwwKXwwO3ZhPUVkKHZhfDAsQ3wwLDIxKXwwO3FhPUM7Rj1IZCh2YXwwLHFhfDAsMjEpfDA7Zz1DO1VhPURkKEx8MCxufDAsMTA0ODU3NiwwKXwwO1VhPUVkKFVhfDAsQ3wwLDIxKXwwO25hPUM7cD1IZChVYXwwLG5hfDAsMjEpfDA7UD1DO0o9RGQoZmF8MCxrfDAsMTA0ODU3NiwwKXwwO0o9RWQoSnwwLEN8MCwyMSl8MDtHPUM7eD1EZChKfDAsR3wwLGp8MCx4fDApfDA7aj1DO0c9SGQoSnwwLEd8MCwyMSl8MDtHPUNkKGZhfDAsa3wwLEd8MCxDfDApfDA7az1DO2ZhPURkKGxhfDAsZnwwLDEwNDg1NzYsMCl8MDtmYT1FZChmYXwwLEN8MCwyMSl8MDtKPUM7TT1EZChmYXwwLEp8MCxBfDAsTXwwKXwwO0E9QztKPUhkKGZhfDAsSnwwLDIxKXwwO0o9Q2QobGF8MCxmfDAsSnwwLEN8MCl8MDtmPUM7bGE9RGQobWF8MCxnYXwwLDEwNDg1NzYsMCl8MDtsYT1FZChsYXwwLEN8MCwyMSl8MDtmYT1DO2g9RGQobGF8MCxmYXwwLHJ8MCxofDApfDA7cj1DO2ZhPUhkKGxhfDAsZmF8MCwyMSl8MDtmYT1DZChtYXwwLGdhfDAsZmF8MCxDfDApfDA7Z2E9QzttYT1PZChUYXwwLG9hfDAsNjY2NjQzLDApfDA7bGE9QztTYT1PZChUYXwwLG9hfDAsNDcwMjk2LDApfDA7UmE9QztRPU9kKFRhfDAsb2F8MCw2NTQxODMsMCl8MDtLPUM7c2E9T2QoVGF8MCxvYXwwLC05OTc4MDUsLTEpfDA7cmE9QzttPU9kKFRhfDAsb2F8MCwxMzY2NTcsMCl8MDtsPUM7b2E9T2QoVGF8MCxvYXwwLC02ODM5MDEsLTEpfDA7b2E9RGQoVWF8MCxuYXwwLG9hfDAsQ3wwKXwwO0FhPURkKG9hfDAsQ3wwLHphfDAsQWF8MCl8MDtPPUNkKEFhfDAsQ3wwLE58MCxPfDApfDA7Tj1DO0FhPU9kKGh8MCxyfDAsNjY2NjQzLDApfDA7emE9QztvYT1PZChofDAscnwwLDQ3MDI5NiwwKXwwO25hPUM7VWE9T2QoaHwwLHJ8MCw2NTQxODMsMCl8MDtUYT1DO2phPU9kKGh8MCxyfDAsLTk5NzgwNSwtMSl8MDtCPUM7aWE9T2QoaHwwLHJ8MCwxMzY2NTcsMCl8MDtoYT1DO3I9T2QoaHwwLHJ8MCwtNjgzOTAxLC0xKXwwO2g9Qzt3YT1PZChmYXwwLGdhfDAsNjY2NjQzLDApfDA7d2E9RGQoeWF8MCxwYXwwLHdhfDAsQ3wwKXwwO3BhPUM7eWE9T2QoZmF8MCxnYXwwLDQ3MDI5NiwwKXwwO3hhPUM7ST1PZChmYXwwLGdhfDAsNjU0MTgzLDApfDA7RT1DO1FhPU9kKGZhfDAsZ2F8MCwtOTk3ODA1LC0xKXwwO1BhPUM7dj1PZChmYXwwLGdhfDAsMTM2NjU3LDApfDA7eT1DO2dhPU9kKGZhfDAsZ2F8MCwtNjgzOTAxLC0xKXwwO2ZhPUM7cmE9RGQoaWF8MCxoYXwwLHNhfDAscmF8MCl8MDtmYT1EZChyYXwwLEN8MCxnYXwwLGZhfDApfDA7cWE9RGQoZmF8MCxDfDAsdmF8MCxxYXwwKXwwO2NhPURkKHFhfDAsQ3wwLGthfDAsY2F8MCl8MDtIPUNkKGNhfDAsQ3wwLHd8MCxIfDApfDA7dz1DO2NhPU9kKE18MCxBfDAsNjY2NjQzLDApfDA7a2E9QztxYT1PZChNfDAsQXwwLDQ3MDI5NiwwKXwwO3FhPURkKHdhfDAscGF8MCxxYXwwLEN8MCl8MDtwYT1DO3dhPU9kKE18MCxBfDAsNjU0MTgzLDApfDA7dmE9QztmYT1PZChNfDAsQXwwLC05OTc4MDUsLTEpfDA7Z2E9QztyYT1PZChNfDAsQXwwLDEzNjY1NywwKXwwO3NhPUM7QT1PZChNfDAsQXwwLC02ODM5MDEsLTEpfDA7TT1DO2hhPU9kKEp8MCxmfDAsNjY2NjQzLDApfDA7aWE9QztkYT1PZChKfDAsZnwwLDQ3MDI5NiwwKXwwO2VhPUM7JD1PZChKfDAsZnwwLDY1NDE4MywwKXwwO2FhPUM7Vj1PZChKfDAsZnwwLC05OTc4MDUsLTEpfDA7Vz1DO1I9T2QoSnwwLGZ8MCwxMzY2NTcsMCl8MDtTPUM7Zj1PZChKfDAsZnwwLC02ODM5MDEsLTEpfDA7Sj1DO1JhPURkKFVhfDAsVGF8MCxTYXwwLFJhfDApfDA7UGE9RGQoUmF8MCxDfDAsUWF8MCxQYXwwKXwwO05hPURkKFBhfDAsQ3wwLE9hfDAsTmF8MCl8MDtUPUNkKE5hfDAsQ3wwLFV8MCxUfDApfDA7c2E9RGQoVHwwLEN8MCxyYXwwLHNhfDApfDA7Sj1EZChzYXwwLEN8MCxmfDAsSnwwKXwwO2Y9QztzYT1PZCh4fDAsanwwLDY2NjY0MywwKXwwO2JhPURkKHNhfDAsQ3wwLER8MCxiYXwwKXwwO0Q9QztzYT1PZCh4fDAsanwwLDQ3MDI5NiwwKXwwO3JhPUM7VD1PZCh4fDAsanwwLDY1NDE4MywwKXwwO1U9QztKYT1EZChNYXwwLExhfDAsS2F8MCxKYXwwKXwwO0hhPUNkKEphfDAsQ3wwLElhfDAsSGF8MCl8MDtrYT1EZChIYXwwLEN8MCxjYXwwLGthfDApfDA7VT1EZChrYXwwLEN8MCxUfDAsVXwwKXwwO2VhPURkKFV8MCxDfDAsZGF8MCxlYXwwKXwwO2RhPUM7VT1PZCh4fDAsanwwLC05OTc4MDUsLTEpfDA7VD1DO2thPU9kKHh8MCxqfDAsMTM2NjU3LDApfDA7Y2E9QztEYT1EZChHYXwwLEZhfDAsRWF8MCxEYXwwKXwwO0JhPUNkKERhfDAsQ3wwLENhfDAsQmF8MCl8MDt6YT1EZChCYXwwLEN8MCxBYXwwLHphfDApfDA7eGE9RGQoemF8MCxDfDAseWF8MCx4YXwwKXwwO3ZhPURkKHhhfDAsQ3wwLHdhfDAsdmF8MCl8MDtjYT1EZCh2YXwwLEN8MCxrYXwwLGNhfDApfDA7Vz1EZChjYXwwLEN8MCxWfDAsV3wwKXwwO1Y9QztqPU9kKHh8MCxqfDAsLTY4MzkwMSwtMSl8MDt4PUM7Y2E9RGQoYmF8MCxEfDAsMTA0ODU3NiwwKXwwO2NhPUVkKGNhfDAsQ3wwLDIxKXwwO2thPUM7cmE9RGQodWF8MCx0YXwwLHNhfDAscmF8MCl8MDtpYT1EZChyYXwwLEN8MCxoYXwwLGlhfDApfDA7aWE9RGQoaWF8MCxDfDAsY2F8MCxrYXwwKXwwO2hhPUM7a2E9SGQoY2F8MCxrYXwwLDIxKXwwO2thPUNkKGJhfDAsRHwwLGthfDAsQ3wwKXwwO0Q9QztiYT1EZChlYXwwLGRhfDAsMTA0ODU3NiwwKXwwO2JhPUVkKGJhfDAsQ3wwLDIxKXwwO2NhPUM7VD1EZChxYXwwLHBhfDAsVXwwLFR8MCl8MDthYT1EZChUfDAsQ3wwLCR8MCxhYXwwKXwwO2FhPURkKGFhfDAsQ3wwLGJhfDAsY2F8MCl8MDskPUM7Y2E9SGQoYmF8MCxjYXwwLDIxKXwwO2JhPUM7VD1EZChXfDAsVnwwLDEwNDg1NzYsMCl8MDtUPUVkKFR8MCxDfDAsMjEpfDA7VT1DO2xhPURkKG9hfDAsbmF8MCxtYXwwLGxhfDApfDA7RT1EZChsYXwwLEN8MCxJfDAsRXwwKXwwO1k9RGQoRXwwLEN8MCxYfDAsWXwwKXwwO189Q2QoWXwwLEN8MCxafDAsX3wwKXwwO2dhPURkKF98MCxDfDAsZmF8MCxnYXwwKXwwO3g9RGQoZ2F8MCxDfDAsanwwLHh8MCl8MDtTPURkKHh8MCxDfDAsUnwwLFN8MCl8MDtTPURkKFN8MCxDfDAsVHwwLFV8MCl8MDtSPUM7VT1IZChUfDAsVXwwLDIxKXwwO1Q9Qzt4PURkKEp8MCxmfDAsMTA0ODU3NiwwKXwwO3g9RWQoeHwwLEN8MCwyMSl8MDtqPUM7Sz1EZChqYXwwLEJ8MCxRfDAsS3wwKXwwO3k9RGQoS3wwLEN8MCx2fDAseXwwKXwwO3U9RGQoeXwwLEN8MCxzfDAsdXwwKXwwO2c9Q2QodXwwLEN8MCxGfDAsZ3wwKXwwO009RGQoZ3wwLEN8MCxBfDAsTXwwKXwwO009RGQoTXwwLEN8MCx4fDAsanwwKXwwO0E9QztqPUhkKHh8MCxqfDAsMjEpfDA7aj1DZChKfDAsZnwwLGp8MCxDfDApfDA7Zj1DO0o9RGQoSHwwLHd8MCwxMDQ4NTc2LDApfDA7Sj1FZChKfDAsQ3wwLDIxKXwwO3g9QztsPURkKHJ8MCxofDAsbXwwLGx8MCl8MDtuPURkKGx8MCxDfDAsTHwwLG58MCl8MDtuPURkKG58MCxDfDAsSnwwLHh8MCl8MDtQPUNkKG58MCxDfDAscHwwLFB8MCl8MDtwPUM7eD1IZChKfDAseHwwLDIxKXwwO3g9Q2QoSHwwLHd8MCx4fDAsQ3wwKXwwO3c9QztIPURkKE98MCxOfDAsMTA0ODU3NiwwKXwwO0g9RWQoSHwwLEN8MCwyMSl8MDtKPUM7az1EZChHfDAsa3wwLEh8MCxKfDApfDA7Rz1DO0o9SGQoSHwwLEp8MCwyMSl8MDtIPUM7bj1EZChpYXwwLGhhfDAsMTA0ODU3NiwwKXwwO249RWQobnwwLEN8MCwyMSl8MDtMPUM7bD1IZChufDAsTHwwLDIxKXwwO209QztoPURkKGFhfDAsJHwwLDEwNDg1NzYsMCl8MDtoPUVkKGh8MCxDfDAsMjEpfDA7cj1DO2c9SGQoaHwwLHJ8MCwyMSl8MDtGPUM7dT1EZChTfDAsUnwwLDEwNDg1NzYsMCl8MDt1PUVkKHV8MCxDfDAsMjEpfDA7cz1DO2Y9RGQoanwwLGZ8MCx1fDAsc3wwKXwwO2o9QztzPUhkKHV8MCxzfDAsMjEpfDA7dT1DO3k9RGQoTXwwLEF8MCwxMDQ4NTc2LDApfDA7eT1FZCh5fDAsQ3wwLDIxKXwwO3Y9Qzt3PURkKHh8MCx3fDAseXwwLHZ8MCl8MDt4PUM7dj1IZCh5fDAsdnwwLDIxKXwwO3Y9Q2QoTXwwLEF8MCx2fDAsQ3wwKXwwO0E9QztNPURkKFB8MCxwfDAsMTA0ODU3NiwwKXwwO009RWQoTXwwLEN8MCwyMSl8MDt5PUM7Sz1IZChNfDAseXwwLDIxKXwwO0s9Q2QoUHwwLHB8MCxLfDAsQ3wwKXwwO3A9QztQPURkKGt8MCxHfDAsMTA0ODU3NiwwKXwwO1A9RWQoUHwwLEN8MCwyMSl8MDtRPUM7Qj1IZChQfDAsUXwwLDIxKXwwO0I9Q2Qoa3wwLEd8MCxCfDAsQ3wwKXwwO0c9QztrPU9kKFB8MCxRfDAsNjY2NjQzLDApfDA7az1EZChrYXwwLER8MCxrfDAsQ3wwKXwwO0Q9QztrYT1PZChQfDAsUXwwLDQ3MDI5NiwwKXwwO2phPUM7Z2E9T2QoUHwwLFF8MCw2NTQxODMsMCl8MDtmYT1DO189T2QoUHwwLFF8MCwtOTk3ODA1LC0xKXwwO1o9QztZPU9kKFB8MCxRfDAsMTM2NjU3LDApfDA7WD1DO1E9T2QoUHwwLFF8MCwtNjgzOTAxLC0xKXwwO1A9QztFPUVkKGt8MCxEfDAsMjEpfDA7ST1DO2hhPURkKGthfDAsamF8MCxpYXwwLGhhfDApfDA7bT1DZChoYXwwLEN8MCxsfDAsbXwwKXwwO209RGQobXwwLEN8MCxFfDAsSXwwKXwwO2w9QztJPUhkKEV8MCxJfDAsMjEpfDA7ST1DZChrfDAsRHwwLEl8MCxDfDApfDA7RD1DO2s9RWQobXwwLGx8MCwyMSl8MDtFPUM7ZGE9RGQoZ2F8MCxmYXwwLGVhfDAsZGF8MCl8MDtiYT1DZChkYXwwLEN8MCxjYXwwLGJhfDApfDA7TD1EZChiYXwwLEN8MCxufDAsTHwwKXwwO0w9RGQoTHwwLEN8MCxrfDAsRXwwKXwwO249QztFPUhkKGt8MCxFfDAsMjEpfDA7RT1DZChtfDAsbHwwLEV8MCxDfDApfDA7bD1DO209RWQoTHwwLG58MCwyMSl8MDtrPUM7Wj1EZChhYXwwLCR8MCxffDAsWnwwKXwwO0Y9Q2QoWnwwLEN8MCxnfDAsRnwwKXwwO0Y9RGQoRnwwLEN8MCxtfDAsa3wwKXwwO2c9QztrPUhkKG18MCxrfDAsMjEpfDA7az1DZChMfDAsbnwwLGt8MCxDfDApfDA7bj1DO0w9RWQoRnwwLGd8MCwyMSl8MDttPUM7Vj1EZChZfDAsWHwwLFd8MCxWfDApfDA7VD1DZChWfDAsQ3wwLFV8MCxUfDApfDA7cj1EZChUfDAsQ3wwLGh8MCxyfDApfDA7cj1EZChyfDAsQ3wwLEx8MCxtfDApfDA7aD1DO209SGQoTHwwLG18MCwyMSl8MDttPUNkKEZ8MCxnfDAsbXwwLEN8MCl8MDtnPUM7Rj1FZChyfDAsaHwwLDIxKXwwO0w9QztQPURkKFN8MCxSfDAsUXwwLFB8MCl8MDt1PUNkKFB8MCxDfDAsc3wwLHV8MCl8MDt1PURkKHV8MCxDfDAsRnwwLEx8MCl8MDtzPUM7TD1IZChGfDAsTHwwLDIxKXwwO0w9Q2QocnwwLGh8MCxMfDAsQ3wwKXwwO2g9QztyPUVkKHV8MCxzfDAsMjEpfDA7Rj1DO2o9RGQoZnwwLGp8MCxyfDAsRnwwKXwwO2Y9QztGPUhkKHJ8MCxGfDAsMjEpfDA7Rj1DZCh1fDAsc3wwLEZ8MCxDfDApfDA7cz1DO3U9RWQoanwwLGZ8MCwyMSl8MDtyPUM7QT1EZCh1fDAscnwwLHZ8MCxBfDApfDA7dj1DO3I9SGQodXwwLHJ8MCwyMSl8MDtyPUNkKGp8MCxmfDAscnwwLEN8MCl8MDtmPUM7aj1FZChBfDAsdnwwLDIxKXwwO3U9Qzt4PURkKHd8MCx4fDAsanwwLHV8MCl8MDt3PUM7dT1IZChqfDAsdXwwLDIxKXwwO3U9Q2QoQXwwLHZ8MCx1fDAsQ3wwKXwwO3Y9QztBPUVkKHh8MCx3fDAsMjEpfDA7aj1DO3A9RGQoQXwwLGp8MCxLfDAscHwwKXwwO0s9QztqPUhkKEF8MCxqfDAsMjEpfDA7aj1DZCh4fDAsd3wwLGp8MCxDfDApfDA7dz1DO3g9RWQocHwwLEt8MCwyMSl8MDtBPUM7eT1EZChPfDAsTnwwLE18MCx5fDApfDA7SD1DZCh5fDAsQ3wwLEp8MCxIfDApfDA7SD1EZChIfDAsQ3wwLHh8MCxBfDApfDA7Sj1DO0E9SGQoeHwwLEF8MCwyMSl8MDtBPUNkKHB8MCxLfDAsQXwwLEN8MCl8MDtLPUM7cD1FZChIfDAsSnwwLDIxKXwwO3g9QztHPURkKHB8MCx4fDAsQnwwLEd8MCl8MDtCPUM7eD1IZChwfDAseHwwLDIxKXwwO3g9Q2QoSHwwLEp8MCx4fDAsQ3wwKXwwO0o9QztIPUVkKEd8MCxCfDAsMjEpfDA7cD1DO3k9SGQoSHwwLHB8MCwyMSl8MDt5PUNkKEd8MCxCfDAseXwwLEN8MCl8MDtCPUM7Rz1PZChIfDAscHwwLDY2NjY0MywwKXwwO0Q9RGQoR3wwLEN8MCxJfDAsRHwwKXwwO0k9QztHPU9kKEh8MCxwfDAsNDcwMjk2LDApfDA7Rz1EZChFfDAsbHwwLEd8MCxDfDApfDA7bD1DO0U9T2QoSHwwLHB8MCw2NTQxODMsMCl8MDtFPURkKGt8MCxufDAsRXwwLEN8MCl8MDtuPUM7az1PZChIfDAscHwwLC05OTc4MDUsLTEpfDA7az1EZChtfDAsZ3wwLGt8MCxDfDApfDA7Zz1DO209T2QoSHwwLHB8MCwxMzY2NTcsMCl8MDttPURkKEx8MCxofDAsbXwwLEN8MCl8MDtoPUM7cD1PZChIfDAscHwwLC02ODM5MDEsLTEpfDA7cD1EZChGfDAsc3wwLHB8MCxDfDApfDA7cz1DO0Y9RWQoRHwwLEl8MCwyMSl8MDtIPUM7bD1EZChHfDAsbHwwLEZ8MCxIfDApfDA7Rz1DO0g9SGQoRnwwLEh8MCwyMSl8MDtIPUNkKER8MCxJfDAsSHwwLEN8MCl8MDtJPUM7RD1FZChsfDAsR3wwLDIxKXwwO0Y9QztuPURkKEV8MCxufDAsRHwwLEZ8MCl8MDtFPUM7Rj1IZChEfDAsRnwwLDIxKXwwO0Y9Q2QobHwwLEd8MCxGfDAsQ3wwKXwwO0c9QztsPUVkKG58MCxFfDAsMjEpfDA7RD1DO2c9RGQoa3wwLGd8MCxsfDAsRHwwKXwwO2s9QztEPUhkKGx8MCxEfDAsMjEpfDA7RD1DZChufDAsRXwwLER8MCxDfDApfDA7RT1DO249RWQoZ3wwLGt8MCwyMSl8MDtsPUM7aD1EZChtfDAsaHwwLG58MCxsfDApfDA7bT1DO2w9SGQobnwwLGx8MCwyMSl8MDtsPUNkKGd8MCxrfDAsbHwwLEN8MCl8MDtrPUM7Zz1FZChofDAsbXwwLDIxKXwwO249QztzPURkKHB8MCxzfDAsZ3wwLG58MCl8MDtwPUM7bj1IZChnfDAsbnwwLDIxKXwwO249Q2QoaHwwLG18MCxufDAsQ3wwKXwwO209QztoPUVkKHN8MCxwfDAsMjEpfDA7Zz1DO2Y9RGQoaHwwLGd8MCxyfDAsZnwwKXwwO3I9QztnPUhkKGh8MCxnfDAsMjEpfDA7Zz1DZChzfDAscHwwLGd8MCxDfDApfDA7cD1DO3M9RWQoZnwwLHJ8MCwyMSl8MDtoPUM7dj1EZChzfDAsaHwwLHV8MCx2fDApfDA7dT1DO2g9SGQoc3wwLGh8MCwyMSl8MDtoPUNkKGZ8MCxyfDAsaHwwLEN8MCl8MDtyPUM7Zj1FZCh2fDAsdXwwLDIxKXwwO3M9Qzt3PURkKGZ8MCxzfDAsanwwLHd8MCl8MDtqPUM7cz1IZChmfDAsc3wwLDIxKXwwO3M9Q2QodnwwLHV8MCxzfDAsQ3wwKXwwO3U9Qzt2PUVkKHd8MCxqfDAsMjEpfDA7Zj1DO0s9RGQodnwwLGZ8MCxBfDAsS3wwKXwwO0E9QztmPUhkKHZ8MCxmfDAsMjEpfDA7Zj1DZCh3fDAsanwwLGZ8MCxDfDApfDA7aj1DO3c9RWQoS3wwLEF8MCwyMSl8MDt2PUM7Sj1EZCh3fDAsdnwwLHh8MCxKfDApfDA7eD1DO3Y9SGQod3wwLHZ8MCwyMSl8MDt2PUNkKEt8MCxBfDAsdnwwLEN8MCl8MDtBPUM7Sz1FZChKfDAseHwwLDIxKXwwO3c9QztCPURkKEt8MCx3fDAseXwwLEJ8MCl8MDt5PUM7dz1IZChLfDAsd3wwLDIxKXwwO3c9Q2QoSnwwLHh8MCx3fDAsQ3wwKXwwO3g9QzthW28+PjBdPUg7bz1HZChIfDAsSXwwLDgpfDA7YVtiKzMzPj4wXT1vO289R2QoSHwwLEl8MCwxNil8MDtJPUM7SD1IZChGfDAsR3wwLDUpfDA7YVtiKzM0Pj4wXT1IfG87bz1HZChGfDAsR3wwLDMpfDA7YVtiKzM1Pj4wXT1vO289R2QoRnwwLEd8MCwxMSl8MDthW2IrMzY+PjBdPW87bz1HZChGfDAsR3wwLDE5KXwwO0c9QztGPUhkKER8MCxFfDAsMil8MDthW2IrMzc+PjBdPUZ8bztvPUdkKER8MCxFfDAsNil8MDthW2IrMzg+PjBdPW87bz1HZChEfDAsRXwwLDE0KXwwO0U9QztEPUhkKGx8MCxrfDAsNyl8MDthW2IrMzk+PjBdPUR8bztvPUdkKGx8MCxrfDAsMSl8MDthW2IrNDA+PjBdPW87bz1HZChsfDAsa3wwLDkpfDA7YVtiKzQxPj4wXT1vO289R2QobHwwLGt8MCwxNyl8MDtrPUM7bD1IZChufDAsbXwwLDQpfDA7YVtiKzQyPj4wXT1sfG87bz1HZChufDAsbXwwLDQpfDA7YVtiKzQzPj4wXT1vO289R2QobnwwLG18MCwxMil8MDthW2IrNDQ+PjBdPW87bz1HZChufDAsbXwwLDIwKXwwO209QztuPUhkKGd8MCxwfDAsMSl8MDthW2IrNDU+PjBdPW58bztvPUdkKGd8MCxwfDAsNyl8MDthW2IrNDY+PjBdPW87cD1HZChnfDAscHwwLDE1KXwwO289QztnPUhkKGh8MCxyfDAsNil8MDthW2IrNDc+PjBdPWd8cDtwPUdkKGh8MCxyfDAsMil8MDthW2IrNDg+PjBdPXA7cD1HZChofDAscnwwLDEwKXwwO2FbYis0OT4+MF09cDtyPUdkKGh8MCxyfDAsMTgpfDA7aD1DO3A9SGQoc3wwLHV8MCwzKXwwO2FbYis1MD4+MF09cHxyO3I9R2Qoc3wwLHV8MCw1KXwwO2FbYis1MT4+MF09cjt1PUdkKHN8MCx1fDAsMTMpfDA7YVtiKzUyPj4wXT11O2FbYis1Mz4+MF09Zjt1PUdkKGZ8MCxqfDAsOCl8MDthW2IrNTQ+PjBdPXU7aj1HZChmfDAsanwwLDE2KXwwO2Y9Qzt1PUhkKHZ8MCxBfDAsNSl8MDthW2IrNTU+PjBdPXV8ajtqPUdkKHZ8MCxBfDAsMyl8MDthW2IrNTY+PjBdPWo7aj1HZCh2fDAsQXwwLDExKXwwO2FbYis1Nz4+MF09ajtBPUdkKHZ8MCxBfDAsMTkpfDA7dj1DO2o9SGQod3wwLHh8MCwyKXwwO2FbYis1OD4+MF09anxBO0E9R2Qod3wwLHh8MCw2KXwwO2FbYis1OT4+MF09QTt4PUdkKHd8MCx4fDAsMTQpfDA7dz1DO0E9SGQoQnwwLHl8MCw3KXwwO2FbYis2MD4+MF09eHxBO0E9R2QoQnwwLHl8MCwxKXwwO2FbYis2MT4+MF09QTtBPUdkKEJ8MCx5fDAsOSl8MDthW2IrNjI+PjBdPUE7eT1HZChCfDAseXwwLDE3KXwwO2FbYis2Mz4+MF09eTt5PXE7Qj15KzY0fDA7ZG97YVt5Pj4wXT0wO3k9eSsxfDB9d2hpbGUoKHl8MCk8KEJ8MCkpO3k9dDtCPXkrNjR8MDtkb3thW3k+PjBdPTA7eT15KzF8MH13aGlsZSgoeXwwKTwoQnwwKSk7aWYoIWUpe2k9ejtyZXR1cm59RWM9ZTtjW0VjPj4yXT02NDtjW0VjKzQ+PjJdPTA7aT16O3JldHVybn1mdW5jdGlvbiBZYyhiLGMpe2I9YnwwO2M9Y3wwO3JldHVybiAoKCgoYVtjKzE+PjBdXmFbYisxPj4wXXxhW2M+PjBdXmFbYj4+MF18YVtjKzI+PjBdXmFbYisyPj4wXXxhW2MrMz4+MF1eYVtiKzM+PjBdfGFbYys0Pj4wXV5hW2IrND4+MF18YVtjKzU+PjBdXmFbYis1Pj4wXXxhW2MrNj4+MF1eYVtiKzY+PjBdfGFbYys3Pj4wXV5hW2IrNz4+MF18YVtjKzg+PjBdXmFbYis4Pj4wXXxhW2MrOT4+MF1eYVtiKzk+PjBdfGFbYysxMD4+MF1eYVtiKzEwPj4wXXxhW2MrMTE+PjBdXmFbYisxMT4+MF18YVtjKzEyPj4wXV5hW2IrMTI+PjBdfGFbYysxMz4+MF1eYVtiKzEzPj4wXXxhW2MrMTQ+PjBdXmFbYisxND4+MF18YVtjKzE1Pj4wXV5hW2IrMTU+PjBdfGFbYysxNj4+MF1eYVtiKzE2Pj4wXXxhW2MrMTc+PjBdXmFbYisxNz4+MF18YVtjKzE4Pj4wXV5hW2IrMTg+PjBdfGFbYysxOT4+MF1eYVtiKzE5Pj4wXXxhW2MrMjA+PjBdXmFbYisyMD4+MF18YVtjKzIxPj4wXV5hW2IrMjE+PjBdfGFbYysyMj4+MF1eYVtiKzIyPj4wXXxhW2MrMjM+PjBdXmFbYisyMz4+MF18YVtjKzI0Pj4wXV5hW2IrMjQ+PjBdfGFbYysyNT4+MF1eYVtiKzI1Pj4wXXxhW2MrMjY+PjBdXmFbYisyNj4+MF18YVtjKzI3Pj4wXV5hW2IrMjc+PjBdfGFbYysyOD4+MF1eYVtiKzI4Pj4wXXxhW2MrMjk+PjBdXmFbYisyOT4+MF18YVtjKzMwPj4wXV5hW2IrMzA+PjBdfGFbYyszMT4+MF1eYVtiKzMxPj4wXSkmMjU1KSs1MTF8MCk+Pj44JjEpKy0xfDB9ZnVuY3Rpb24gWmMoYSl7YT1hfDA7Y1s3OTc2XT1hO3JldHVybiAwfWZ1bmN0aW9uIF9jKCl7cmV0dXJuIEJhKDApfDB9ZnVuY3Rpb24gJGMoKXtCYSgxKTtyZXR1cm59ZnVuY3Rpb24gYWQoYSl7YT1hfDA7dmFyIGI9MCxkPTA7Yj1jWzc5NzZdfDA7aWYoKGJ8MCkhPTA/KGQ9Y1tiKzEyPj4yXXwwLChkfDApIT0wKTowKXthPUVhW2QmMzFdKGEpfDA7cmV0dXJuIGF8MH1pZihhPj4+MDwyKXthPTA7cmV0dXJuIGF8MH1iPSgoMC1hfDApPj4+MCklKGE+Pj4wKXwwO2RvIGQ9QmEoMCl8MDt3aGlsZShkPj4+MDxiPj4+MCk7YT0oZD4+PjApJShhPj4+MCl8MDtyZXR1cm4gYXwwfWZ1bmN0aW9uIGJkKGIsYyl7Yj1ifDA7Yz1jfDA7dmFyIGQ9MDtpZighYylyZXR1cm47ZWxzZSBkPTA7ZG97YVtiK2Q+PjBdPUJhKDApfDA7ZD1kKzF8MH13aGlsZSgoZHwwKSE9KGN8MCkpO3JldHVybn1mdW5jdGlvbiBjZCgpe3ZhciBhPTA7YT1jWzc5NzZdfDA7aWYoIWEpe2E9MDtyZXR1cm4gYXwwfWE9Y1thKzIwPj4yXXwwO2lmKCFhKXthPTA7cmV0dXJuIGF8MH1hPURhW2EmMzFdKCl8MDtyZXR1cm4gYXwwfWZ1bmN0aW9uIGRkKCl7dmFyIGE9MCxiPTA7aWYoY1s3OTc3XXwwKXtiPTE7cmV0dXJuIGJ8MH1CYSgxKTthPW5hKDMwKXwwO2lmKChhfDApPjApY1s3OTc4XT1hO2Vsc2UgYT1jWzc5NzhdfDA7aWYoYT4+PjA8MTYpcmEoKTtlbHNlIGI9MDtkb3tCYSgwKXwwO2I9YisxfDB9d2hpbGUoKGJ8MCkhPTE2KTtjWzc5NzddPTE7Yj0wO3JldHVybiBifDB9ZnVuY3Rpb24gZWQoYSxiKXthPWF8MDtiPWJ8MDtGZChhfDAsMCxifDApfDA7cmV0dXJufWZ1bmN0aW9uIGZkKGIsYyxlLGYpe2I9YnwwO2M9Y3wwO2U9ZXwwO2Y9ZnwwO3ZhciBnPTAsaD0wLGk9MCxqPTA7Zz1mPDwxO2lmKCEoZj4+PjA8MjE0NzQ4MzY0NyZnPj4+MDxjPj4+MCkpcmEoKTtpZighZil7Zj0wO2Y9YitmfDA7YVtmPj4wXT0wO3JldHVybiBifDB9ZWxzZSBjPTA7ZG97aj1kW2UrYz4+MF18MDtpPWomMTU7aj1qPj4+NDtoPWM8PDE7YVtiK2g+PjBdPWorODcrKChqKzY1NTI2fDApPj4+OCYyMTcpO2FbYisoaHwxKT4+MF09KChpPDw4KSsyMjI3MisoaSs2NTUyNiY1NTU1Mil8MCk+Pj44O2M9YysxfDB9d2hpbGUoKGN8MCkhPShmfDApKTtqPWIrZ3wwO2Fbaj4+MF09MDtyZXR1cm4gYnwwfWZ1bmN0aW9uIGdkKGIsZSxmLGcsaCxpLGope2I9YnwwO2U9ZXwwO2Y9ZnwwO2c9Z3wwO2g9aHwwO2k9aXwwO2o9anwwO3ZhciBrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wLHM9MCx0PTAsdT0wO2E6ZG8gaWYoIWcpe249MDtsPTA7bz0wO2s9MH1lbHNle2I6ZG8gaWYoIWgpe249MDtyPTA7bD0wO2s9MDt3aGlsZSgxKXtwPWRbZitsPj4wXXwwO209cF40ODtvPShtKzY1NTI2fDApPj4+ODtwPShwJjIyMykrMjAxfDA7cT1wJjI1NTtxPShxKzY1NTI2XnErNjU1MjApPj4+ODtpZighKChxfG8pJjI1NSkpe289MDticmVhayBhfW09cSZwfG8mbTtpZihuPj4+MD49ZT4+PjApe209azticmVhayBifWlmKCEoazw8MjQ+PjI0KSltPW08PDQmMjU1O2Vsc2V7YVtiK24+PjBdPW18ciYyNTU7bj1uKzF8MDttPXJ9az0oayYyNTVeMjU1KSYyNTU7bD1sKzF8MDtpZihsPj4+MDxnPj4+MClyPW07ZWxzZXtvPTA7YnJlYWsgYX19fWVsc2V7bj0wO3U9MDtsPTA7az0wO3doaWxlKDEpe3Q9azw8MjQ+PjI0PT0wO2M6ZG8gaWYoIXQpe3E9ZFtmK2w+PjBdfDA7bT1xXjQ4O289KG0rNjU1MjZ8MCk+Pj44O3E9KHEmMjIzKSsyMDF8MDtwPXEmMjU1O3A9KHArNjU1MjZecCs2NTUyMCk+Pj44O2lmKCEoKHB8bykmMjU1KSl7bz0wO2JyZWFrIGF9fWVsc2Ugd2hpbGUoMSl7cT1hW2YrbD4+MF18MDtyPXEmMjU1O209cl40ODtvPShtKzY1NTI2fDApPj4+ODtzPShyJjIyMykrMjAxfDA7cD1zJjI1NTtwPShwKzY1NTI2XnArNjU1MjApPj4+ODtpZigocHxvKSYyNTUpe3E9czticmVhayBjfXM9dWQoaCxyKXwwO2lmKChzfDApPT0wPzE6KGFbcz4+MF18MCkhPXE8PDI0Pj4yNCl7bz0wO2s9MDticmVhayBhfWw9bCsxfDA7aWYobD4+PjA+PWc+Pj4wKXtvPTA7az0wO2JyZWFrIGF9fXdoaWxlKDApO209cCZxfG8mbTtpZihuPj4+MD49ZT4+PjApe209azticmVhayBifWlmKHQpbT1tPDw0JjI1NTtlbHNle2FbYituPj4wXT1tfHUmMjU1O249bisxfDA7bT11fWs9KGsmMjU1XjI1NSkmMjU1O2w9bCsxfDA7aWYobD4+PjA8Zz4+PjApdT1tO2Vsc2V7bz0wO2JyZWFrIGF9fX13aGlsZSgwKTtpZighKGNbNzk3OV18MCkpaz0zMTk2NDtlbHNlIGs9Y1sob2EoKXwwKSs2MD4+Ml18MDtjW2s+PjJdPTM0O289LTE7az1tfXdoaWxlKDApO2lmKGopY1tqPj4yXT1mKygoKGs8PDI0Pj4yNCE9MCk8PDMxPj4zMSkrbCk7aWYoIWkpcmV0dXJuIG98MDtjW2k+PjJdPW47cmV0dXJuIG98MH1mdW5jdGlvbiBoZCgpe3JldHVybiAzMzc3OX1mdW5jdGlvbiBpZCgpe3JldHVybiA4fWZ1bmN0aW9uIGpkKCl7cmV0dXJuIDB9ZnVuY3Rpb24ga2QoYSxiLGQpe2E9YXwwO2I9YnwwO2Q9ZHwwO3ZhciBlPTAsZj0wLGc9MCxoPTAsaT0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wLHM9MCx0PTAsdT0wLHY9MCx3PTAseD0wLHk9MCx6PTAsQT0wLEI9MCxEPTAsRT0wLEY9MCxHPTAsSD0wLEk9MCxKPTAsSz0wLEw9MCxNPTAsTj0wLE89MCxQPTAsUT0wLFI9MCxTPTAsVD0wLFU9MCxWPTAsVz0wLFg9MCxZPTAsWj0wLF89MCwkPTAsYWE9MCxiYT0wLGNhPTAsZGE9MCxlYT0wLGZhPTAsZ2E9MCxoYT0wLGlhPTAsamE9MCxrYT0wLGxhPTAsbWE9MCxuYT0wLG9hPTAscGE9MCxxYT0wLHJhPTAsc2E9MCx0YT0wLHVhPTAsdmE9MCx3YT0wLHhhPTAseWE9MCx6YT0wLEFhPTAsQmE9MCxDYT0wLERhPTAsRWE9MCxGYT0wLEdhPTAsSGE9MCxJYT0wLEphPTAsS2E9MCxMYT0wLE1hPTAsTmE9MCxPYT0wLFBhPTAsUWE9MCxSYT0wLFNhPTAsVGE9MCxVYT0wLFZhPTAsV2E9MCxYYT0wLFlhPTAsWmE9MCxfYT0wLCRhPTAsYWI9MCxiYj0wLGNiPTAsZGI9MCxlYj0wLGZiPTAsZ2I9MCxoYj0wLGliPTAsamI9MCxrYj0wLGxiPTAsbWI9MCxuYj0wLG9iPTAscGI9MCxxYj0wLHJiPTAsc2I9MCx0Yj0wLHViPTAsdmI9MCx3Yj0wLHhiPTAseWI9MCx6Yj0wLEFiPTAsQmI9MCxDYj0wLERiPTAsRWI9MCxGYj0wLEdiPTAsSGI9MCxJYj0wLEpiPTAsS2I9MCxMYj0wLE1iPTAsTmI9MCxPYj0wLFBiPTAsUWI9MCxSYj0wLFNiPTAsVGI9MCxVYj0wLFZiPTAsV2I9MCxYYj0wLFliPTAsWmI9MCxfYj0wLCRiPTAsYWM9MCxiYz0wLGNjPTAsZGM9MCxlYz0wLGZjPTAsZ2M9MCxoYz0wLGljPTAsamM9MCxrYz0wLGxjPTAsbWM9MCxuYz0wLG9jPTAscGM9MCxxYz0wLHJjPTAsc2M9MCx0Yz0wLHVjPTAsdmM9MCx3Yz0wLHhjPTAseWM9MCx6Yz0wLEFjPTAsQmM9MCxDYz0wLERjPTAsRWM9MCxGYz0wLEdjPTAsSGM9MCxJYz0wLEpjPTAsS2M9MCxMYz0wLE1jPTAsTmM9MCxPYz0wLFBjPTAsUWM9MCxSYz0wLFNjPTA7bD1jW2I+PjJdfDA7cz1jW2IrND4+Ml18MDtqPWNbYis4Pj4yXXwwO1JiPWNbYisxMj4+Ml18MDtlPWNbYisxNj4+Ml18MDt6YT1jW2IrMjA+PjJdfDA7eWE9Y1tiKzI0Pj4yXXwwO3piPWNbYisyOD4+Ml18MDtoPWNbYiszMj4+Ml18MDtnYT1jW2IrMzY+PjJdfDA7SD1jW2Q+PjJdfDA7Sj1jW2QrND4+Ml18MDtGPWNbZCs4Pj4yXXwwO0Q9Y1tkKzEyPj4yXXwwO0E9Y1tkKzE2Pj4yXXwwO3k9Y1tkKzIwPj4yXXwwO3c9Y1tkKzI0Pj4yXXwwO3U9Y1tkKzI4Pj4yXXwwO2s9Y1tkKzMyPj4yXXwwO3Q9Y1tkKzM2Pj4yXXwwO09jPUoqMTl8MDtiYz1GKjE5fDA7cmI9RCoxOXwwO0hhPUEqMTl8MDtqYz15KjE5fDA7RGI9dyoxOXwwO1RhPXUqMTl8MDtTYz1rKjE5fDA7UWM9dCoxOXwwO3A9czw8MTtmPVJiPDwxO009emE8PDE7aT16Yjw8MTtkPWdhPDwxO289KChsfDApPDApPDwzMT4+MzE7ST0oKEh8MCk8MCk8PDMxPj4zMTtNYz1PZChIfDAsSXwwLGx8MCxvfDApfDA7TGM9QztLPSgoSnwwKTwwKTw8MzE+PjMxO3djPU9kKEp8MCxLfDAsbHwwLG98MCl8MDt2Yz1DO0c9KChGfDApPDApPDwzMT4+MzE7dWI9T2QoRnwwLEd8MCxsfDAsb3wwKXwwO3RiPUM7RT0oKER8MCk8MCk8PDMxPj4zMTtLYT1PZChEfDAsRXwwLGx8MCxvfDApfDA7SmE9QztCPSgoQXwwKTwwKTw8MzE+PjMxO21jPU9kKEF8MCxCfDAsbHwwLG98MCl8MDtsYz1DO3o9KCh5fDApPDApPDwzMT4+MzE7R2I9T2QoeXwwLHp8MCxsfDAsb3wwKXwwO0ZiPUM7eD0oKHd8MCk8MCk8PDMxPj4zMTtXYT1PZCh3fDAseHwwLGx8MCxvfDApfDA7VmE9Qzt2PSgodXwwKTwwKTw8MzE+PjMxO2phPU9kKHV8MCx2fDAsbHwwLG98MCl8MDtpYT1DO1BjPSgoa3wwKTwwKTw8MzE+PjMxO1A9T2Qoa3wwLFBjfDAsbHwwLG98MCl8MDtPPUM7bz1PZCh0fDAsKCh0fDApPDApPDwzMT4+MzF8MCxsfDAsb3wwKXwwO2w9Qzt0PSgoc3wwKTwwKTw8MzE+PjMxO2RjPU9kKEh8MCxJfDAsc3wwLHR8MCl8MDtlYz1DO249KChwfDApPDApPDwzMT4+MzE7eWI9T2QoSnwwLEt8MCxwfDAsbnwwKXwwO3hiPUM7TWE9T2QoRnwwLEd8MCxzfDAsdHwwKXwwO0xhPUM7b2M9T2QoRHwwLEV8MCxwfDAsbnwwKXwwO25jPUM7SWI9T2QoQXwwLEJ8MCxzfDAsdHwwKXwwO0hiPUM7WWE9T2QoeXwwLHp8MCxwfDAsbnwwKXwwO1hhPUM7bGE9T2Qod3wwLHh8MCxzfDAsdHwwKXwwO2thPUM7Uj1PZCh1fDAsdnwwLHB8MCxufDApfDA7UT1DO3Q9T2Qoa3wwLFBjfDAsc3wwLHR8MCl8MDtzPUM7UGM9KChRY3wwKTwwKTw8MzE+PjMxO249T2QoUWN8MCxQY3wwLHB8MCxufDApfDA7cD1DO2s9KChqfDApPDApPDwzMT4+MzE7d2I9T2QoSHwwLEl8MCxqfDAsa3wwKXwwO3ZiPUM7UWE9T2QoSnwwLEt8MCxqfDAsa3wwKXwwO1BhPUM7cWM9T2QoRnwwLEd8MCxqfDAsa3wwKXwwO3BjPUM7S2I9T2QoRHwwLEV8MCxqfDAsa3wwKXwwO0piPUM7X2E9T2QoQXwwLEJ8MCxqfDAsa3wwKXwwO1phPUM7bmE9T2QoeXwwLHp8MCxqfDAsa3wwKXwwO21hPUM7VD1PZCh3fDAseHwwLGp8MCxrfDApfDA7Uz1DO3Y9T2QodXwwLHZ8MCxqfDAsa3wwKXwwO3U9QztSYz0oKFNjfDApPDApPDwzMT4+MzE7eWM9T2QoU2N8MCxSY3wwLGp8MCxrfDApfDA7eGM9QztrPU9kKFFjfDAsUGN8MCxqfDAsa3wwKXwwO2o9QztTYj0oKFJifDApPDApPDwzMT4+MzE7T2E9T2QoSHwwLEl8MCxSYnwwLFNifDApfDA7TmE9QztmYT0oKGZ8MCk8MCk8PDMxPj4zMTt1Yz1PZChKfDAsS3wwLGZ8MCxmYXwwKXwwO3RjPUM7TWI9T2QoRnwwLEd8MCxSYnwwLFNifDApfDA7TGI9QzthYj1PZChEfDAsRXwwLGZ8MCxmYXwwKXwwOyRhPUM7cGE9T2QoQXwwLEJ8MCxSYnwwLFNifDApfDA7b2E9QztWPU9kKHl8MCx6fDAsZnwwLGZhfDApfDA7VT1DO3g9T2Qod3wwLHh8MCxSYnwwLFNifDApfDA7dz1DO1VhPSgoVGF8MCk8MCk8PDMxPj4zMTtBYz1PZChUYXwwLFVhfDAsZnwwLGZhfDApfDA7emM9QztTYj1PZChTY3wwLFJjfDAsUmJ8MCxTYnwwKXwwO1JiPUM7ZmE9T2QoUWN8MCxQY3wwLGZ8MCxmYXwwKXwwO2Y9QztOPSgoZXwwKTwwKTw8MzE+PjMxO3NjPU9kKEh8MCxJfDAsZXwwLE58MCl8MDtyYz1DO1FiPU9kKEp8MCxLfDAsZXwwLE58MCl8MDtQYj1DO2NiPU9kKEZ8MCxHfDAsZXwwLE58MCl8MDtiYj1DO3JhPU9kKER8MCxFfDAsZXwwLE58MCl8MDtxYT1DO1g9T2QoQXwwLEJ8MCxlfDAsTnwwKXwwO1c9Qzt6PU9kKHl8MCx6fDAsZXwwLE58MCl8MDt5PUM7RWI9KChEYnwwKTwwKTw8MzE+PjMxO0NjPU9kKERifDAsRWJ8MCxlfDAsTnwwKXwwO0JjPUM7VWI9T2QoVGF8MCxVYXwwLGV8MCxOfDApfDA7VGI9QztpYj1PZChTY3wwLFJjfDAsZXwwLE58MCl8MDtoYj1DO049T2QoUWN8MCxQY3wwLGV8MCxOfDApfDA7ZT1DO0FhPSgoemF8MCk8MCk8PDMxPj4zMTtPYj1PZChIfDAsSXwwLHphfDAsQWF8MCl8MDtOYj1DO2I9KChNfDApPDApPDwzMT4+MzE7Z2I9T2QoSnwwLEt8MCxNfDAsYnwwKXwwO2ZiPUM7dGE9T2QoRnwwLEd8MCx6YXwwLEFhfDApfDA7c2E9QztaPU9kKER8MCxFfDAsTXwwLGJ8MCl8MDtZPUM7Qj1PZChBfDAsQnwwLHphfDAsQWF8MCl8MDtBPUM7a2M9KChqY3wwKTwwKTw8MzE+PjMxO0VjPU9kKGpjfDAsa2N8MCxNfDAsYnwwKXwwO0RjPUM7V2I9T2QoRGJ8MCxFYnwwLHphfDAsQWF8MCl8MDtWYj1DO2tiPU9kKFRhfDAsVWF8MCxNfDAsYnwwKXwwO2piPUM7QWE9T2QoU2N8MCxSY3wwLHphfDAsQWF8MCl8MDt6YT1DO2I9T2QoUWN8MCxQY3wwLE18MCxifDApfDA7TT1DO2c9KCh5YXwwKTwwKTw8MzE+PjMxO2ViPU9kKEh8MCxJfDAseWF8MCxnfDApfDA7ZGI9Qzt4YT1PZChKfDAsS3wwLHlhfDAsZ3wwKXwwO3dhPUM7JD1PZChGfDAsR3wwLHlhfDAsZ3wwKXwwO189QztFPU9kKER8MCxFfDAseWF8MCxnfDApfDA7RD1DO0lhPSgoSGF8MCk8MCk8PDMxPj4zMTtHYz1PZChIYXwwLElhfDAseWF8MCxnfDApfDA7RmM9QztZYj1PZChqY3wwLGtjfDAseWF8MCxnfDApfDA7WGI9QzttYj1PZChEYnwwLEVifDAseWF8MCxnfDApfDA7bGI9QztDYT1PZChUYXwwLFVhfDAseWF8MCxnfDApfDA7QmE9QzttPU9kKFNjfDAsUmN8MCx5YXwwLGd8MCl8MDtyPUM7Zz1PZChRY3wwLFBjfDAseWF8MCxnfDApfDA7eWE9QztBYj0oKHpifDApPDApPDwzMT4+MzE7dmE9T2QoSHwwLEl8MCx6YnwwLEFifDApfDA7dWE9QztlYT0oKGl8MCk8MCk8PDMxPj4zMTtkYT1PZChKfDAsS3wwLGl8MCxlYXwwKXwwO2NhPUM7Rz1PZChGfDAsR3wwLHpifDAsQWJ8MCl8MDtGPUM7c2I9KChyYnwwKTwwKTw8MzE+PjMxO0ljPU9kKHJifDAsc2J8MCxpfDAsZWF8MCl8MDtIYz1DO19iPU9kKEhhfDAsSWF8MCx6YnwwLEFifDApfDA7WmI9QztvYj1PZChqY3wwLGtjfDAsaXwwLGVhfDApfDA7bmI9QztFYT1PZChEYnwwLEVifDAsemJ8MCxBYnwwKXwwO0RhPUM7Z2M9T2QoVGF8MCxVYXwwLGl8MCxlYXwwKXwwO2ZjPUM7QWI9T2QoU2N8MCxSY3wwLHpifDAsQWJ8MCl8MDt6Yj1DO2VhPU9kKFFjfDAsUGN8MCxpfDAsZWF8MCl8MDtpPUM7TD0oKGh8MCk8MCk8PDMxPj4zMTtiYT1PZChIfDAsSXwwLGh8MCxMfDApfDA7YWE9QztLPU9kKEp8MCxLfDAsaHwwLEx8MCl8MDtKPUM7Y2M9KChiY3wwKTwwKTw8MzE+PjMxO0tjPU9kKGJjfDAsY2N8MCxofDAsTHwwKXwwO0pjPUM7YWM9T2QocmJ8MCxzYnwwLGh8MCxMfDApfDA7JGI9QztxYj1PZChIYXwwLElhfDAsaHwwLEx8MCl8MDtwYj1DO0dhPU9kKGpjfDAsa2N8MCxofDAsTHwwKXwwO0ZhPUM7aWM9T2QoRGJ8MCxFYnwwLGh8MCxMfDApfDA7aGM9QztDYj1PZChUYXwwLFVhfDAsaHwwLEx8MCl8MDtCYj1DO1NhPU9kKFNjfDAsUmN8MCxofDAsTHwwKXwwO1JhPUM7TD1PZChRY3wwLFBjfDAsaHwwLEx8MCl8MDtoPUM7aGE9KChnYXwwKTwwKTw8MzE+PjMxO0k9T2QoSHwwLEl8MCxnYXwwLGhhfDApfDA7SD1DO3E9KChkfDApPDApPDwzMT4+MzE7T2M9T2QoT2N8MCwoKE9jfDApPDApPDwzMT4+MzF8MCxkfDAscXwwKXwwO05jPUM7Y2M9T2QoYmN8MCxjY3wwLGdhfDAsaGF8MCl8MDtiYz1DO3NiPU9kKHJifDAsc2J8MCxkfDAscXwwKXwwO3JiPUM7SWE9T2QoSGF8MCxJYXwwLGdhfDAsaGF8MCl8MDtIYT1DO2tjPU9kKGpjfDAsa2N8MCxkfDAscXwwKXwwO2pjPUM7RWI9T2QoRGJ8MCxFYnwwLGdhfDAsaGF8MCl8MDtEYj1DO1VhPU9kKFRhfDAsVWF8MCxkfDAscXwwKXwwO1RhPUM7aGE9T2QoU2N8MCxSY3wwLGdhfDAsaGF8MCl8MDtnYT1DO3E9T2QoUWN8MCxQY3wwLGR8MCxxfDApfDA7ZD1DO0xjPURkKE9jfDAsTmN8MCxNY3wwLExjfDApfDA7SmM9RGQoTGN8MCxDfDAsS2N8MCxKY3wwKXwwO0hjPURkKEpjfDAsQ3wwLEljfDAsSGN8MCl8MDtGYz1EZChIY3wwLEN8MCxHY3wwLEZjfDApfDA7RGM9RGQoRmN8MCxDfDAsRWN8MCxEY3wwKXwwO0JjPURkKERjfDAsQ3wwLENjfDAsQmN8MCl8MDt6Yz1EZChCY3wwLEN8MCxBY3wwLHpjfDApfDA7eGM9RGQoemN8MCxDfDAseWN8MCx4Y3wwKXwwO3A9RGQoeGN8MCxDfDAsbnwwLHB8MCl8MDtuPUM7ZWM9RGQod2N8MCx2Y3wwLGRjfDAsZWN8MCl8MDtkYz1DO3JjPURkKHVjfDAsdGN8MCxzY3wwLHJjfDApfDA7cGM9RGQocmN8MCxDfDAscWN8MCxwY3wwKXwwO25jPURkKHBjfDAsQ3wwLG9jfDAsbmN8MCl8MDtsYz1EZChuY3wwLEN8MCxtY3wwLGxjfDApfDA7amM9RGQobGN8MCxDfDAsa2N8MCxqY3wwKXwwO2hjPURkKGpjfDAsQ3wwLGljfDAsaGN8MCl8MDtmYz1EZChoY3wwLEN8MCxnY3wwLGZjfDApfDA7cj1EZChmY3wwLEN8MCxtfDAscnwwKXwwO009RGQocnwwLEN8MCxifDAsTXwwKXwwO2I9QztyPURkKHB8MCxufDAsMzM1NTQ0MzIsMCl8MDtyPUVkKHJ8MCxDfDAsMjYpfDA7bT1DO2JjPURkKGVjfDAsZGN8MCxjY3wwLGJjfDApfDA7JGI9RGQoYmN8MCxDfDAsYWN8MCwkYnwwKXwwO1piPURkKCRifDAsQ3wwLF9ifDAsWmJ8MCl8MDtYYj1EZChaYnwwLEN8MCxZYnwwLFhifDApfDA7VmI9RGQoWGJ8MCxDfDAsV2J8MCxWYnwwKXwwO1RiPURkKFZifDAsQ3wwLFVifDAsVGJ8MCl8MDtSYj1EZChUYnwwLEN8MCxTYnwwLFJifDApfDA7aj1EZChSYnwwLEN8MCxrfDAsanwwKXwwO2o9RGQoanwwLEN8MCxyfDAsbXwwKXwwO2s9QzttPUhkKHJ8MCxtfDAsMjYpfDA7bT1DZChwfDAsbnwwLG18MCxDfDApfDA7bj1DO3A9RGQoTXwwLGJ8MCwzMzU1NDQzMiwwKXwwO3A9RWQocHwwLEN8MCwyNil8MDtyPUM7TmI9RGQoUWJ8MCxQYnwwLE9ifDAsTmJ8MCl8MDtMYj1EZChOYnwwLEN8MCxNYnwwLExifDApfDA7SmI9RGQoTGJ8MCxDfDAsS2J8MCxKYnwwKXwwO0hiPURkKEpifDAsQ3wwLElifDAsSGJ8MCl8MDtGYj1EZChIYnwwLEN8MCxHYnwwLEZifDApfDA7RGI9RGQoRmJ8MCxDfDAsRWJ8MCxEYnwwKXwwO0JiPURkKERifDAsQ3wwLENifDAsQmJ8MCl8MDt6Yj1EZChCYnwwLEN8MCxBYnwwLHpifDApfDA7eWE9RGQoemJ8MCxDfDAsZ3wwLHlhfDApfDA7eWE9RGQoeWF8MCxDfDAscHwwLHJ8MCl8MDtnPUM7cj1IZChwfDAscnwwLDI2KXwwO3I9Q2QoTXwwLGJ8MCxyfDAsQ3wwKXwwO2I9QztNPURkKGp8MCxrfDAsMTY3NzcyMTYsMCl8MDtNPUVkKE18MCxDfDAsMjUpfDA7cD1DO3ZiPURkKHlifDAseGJ8MCx3YnwwLHZifDApfDA7dGI9RGQodmJ8MCxDfDAsdWJ8MCx0YnwwKXwwO3JiPURkKHRifDAsQ3wwLHNifDAscmJ8MCl8MDtwYj1EZChyYnwwLEN8MCxxYnwwLHBifDApfDA7bmI9RGQocGJ8MCxDfDAsb2J8MCxuYnwwKXwwO2xiPURkKG5ifDAsQ3wwLG1ifDAsbGJ8MCl8MDtqYj1EZChsYnwwLEN8MCxrYnwwLGpifDApfDA7aGI9RGQoamJ8MCxDfDAsaWJ8MCxoYnwwKXwwO2Y9RGQoaGJ8MCxDfDAsZmF8MCxmfDApfDA7Zj1EZChmfDAsQ3wwLE18MCxwfDApfDA7ZmE9QztwPUhkKE18MCxwfDAsMjUpfDA7cD1DZChqfDAsa3wwLHB8MCxDfDApfDA7az1DO2o9RGQoeWF8MCxnfDAsMTY3NzcyMTYsMCl8MDtqPUVkKGp8MCxDfDAsMjUpfDA7TT1DO2RiPURkKGdifDAsZmJ8MCxlYnwwLGRifDApfDA7YmI9RGQoZGJ8MCxDfDAsY2J8MCxiYnwwKXwwOyRhPURkKGJifDAsQ3wwLGFifDAsJGF8MCl8MDtaYT1EZCgkYXwwLEN8MCxfYXwwLFphfDApfDA7WGE9RGQoWmF8MCxDfDAsWWF8MCxYYXwwKXwwO1ZhPURkKFhhfDAsQ3wwLFdhfDAsVmF8MCl8MDtUYT1EZChWYXwwLEN8MCxVYXwwLFRhfDApfDA7UmE9RGQoVGF8MCxDfDAsU2F8MCxSYXwwKXwwO2k9RGQoUmF8MCxDfDAsZWF8MCxpfDApfDA7aT1EZChpfDAsQ3wwLGp8MCxNfDApfDA7ZWE9QztNPUhkKGp8MCxNfDAsMjUpfDA7TT1DZCh5YXwwLGd8MCxNfDAsQ3wwKXwwO2c9Qzt5YT1EZChmfDAsZmF8MCwzMzU1NDQzMiwwKXwwO3lhPUVkKHlhfDAsQ3wwLDI2KXwwO2o9QztOYT1EZChRYXwwLFBhfDAsT2F8MCxOYXwwKXwwO0xhPURkKE5hfDAsQ3wwLE1hfDAsTGF8MCl8MDtKYT1EZChMYXwwLEN8MCxLYXwwLEphfDApfDA7SGE9RGQoSmF8MCxDfDAsSWF8MCxIYXwwKXwwO0ZhPURkKEhhfDAsQ3wwLEdhfDAsRmF8MCl8MDtEYT1EZChGYXwwLEN8MCxFYXwwLERhfDApfDA7QmE9RGQoRGF8MCxDfDAsQ2F8MCxCYXwwKXwwO3phPURkKEJhfDAsQ3wwLEFhfDAsemF8MCl8MDtlPURkKHphfDAsQ3wwLE58MCxlfDApfDA7ZT1EZChlfDAsQ3wwLHlhfDAsanwwKXwwO049QztqPUhkKHlhfDAsanwwLDI2KXwwO2o9Q2QoZnwwLGZhfDAsanwwLEN8MCl8MDtmYT1EZChpfDAsZWF8MCwzMzU1NDQzMiwwKXwwO2ZhPUVkKGZhfDAsQ3wwLDI2KXwwO2Y9Qzt1YT1EZCh4YXwwLHdhfDAsdmF8MCx1YXwwKXwwO3NhPURkKHVhfDAsQ3wwLHRhfDAsc2F8MCl8MDtxYT1EZChzYXwwLEN8MCxyYXwwLHFhfDApfDA7b2E9RGQocWF8MCxDfDAscGF8MCxvYXwwKXwwO21hPURkKG9hfDAsQ3wwLG5hfDAsbWF8MCl8MDtrYT1EZChtYXwwLEN8MCxsYXwwLGthfDApfDA7aWE9RGQoa2F8MCxDfDAsamF8MCxpYXwwKXwwO2dhPURkKGlhfDAsQ3wwLGhhfDAsZ2F8MCl8MDtoPURkKGdhfDAsQ3wwLEx8MCxofDApfDA7aD1EZChofDAsQ3wwLGZhfDAsZnwwKXwwO0w9QztmPUhkKGZhfDAsZnwwLDI2KXwwO2Y9Q2QoaXwwLGVhfDAsZnwwLEN8MCl8MDtlYT1EZChlfDAsTnwwLDE2Nzc3MjE2LDApfDA7ZWE9RWQoZWF8MCxDfDAsMjUpfDA7aT1DO2I9RGQoZWF8MCxpfDAscnwwLGJ8MCl8MDtyPUM7aT1IZChlYXwwLGl8MCwyNSl8MDtpPUNkKGV8MCxOfDAsaXwwLEN8MCl8MDtOPURkKGh8MCxMfDAsMTY3NzcyMTYsMCl8MDtOPUVkKE58MCxDfDAsMjUpfDA7ZT1DO2FhPURkKGRhfDAsY2F8MCxiYXwwLGFhfDApfDA7Xz1EZChhYXwwLEN8MCwkfDAsX3wwKXwwO1k9RGQoX3wwLEN8MCxafDAsWXwwKXwwO1c9RGQoWXwwLEN8MCxYfDAsV3wwKXwwO1U9RGQoV3wwLEN8MCxWfDAsVXwwKXwwO1M9RGQoVXwwLEN8MCxUfDAsU3wwKXwwO1E9RGQoU3wwLEN8MCxSfDAsUXwwKXwwO089RGQoUXwwLEN8MCxQfDAsT3wwKXwwO2Q9RGQoT3wwLEN8MCxxfDAsZHwwKXwwO2Q9RGQoZHwwLEN8MCxOfDAsZXwwKXwwO3E9QztlPUhkKE58MCxlfDAsMjUpfDA7ZT1DZChofDAsTHwwLGV8MCxDfDApfDA7TD1EZChifDAscnwwLDMzNTU0NDMyLDApfDA7TD1FZChMfDAsQ3wwLDI2KXwwO2g9QztnPURkKE18MCxnfDAsTHwwLGh8MCl8MDtoPUhkKEx8MCxofDAsMjYpfDA7aD1DZChifDAscnwwLGh8MCxDfDApfDA7cj1EZChkfDAscXwwLDMzNTU0NDMyLDApfDA7cj1FZChyfDAsQ3wwLDI2KXwwO2I9QztIPURkKEt8MCxKfDAsSXwwLEh8MCl8MDtGPURkKEh8MCxDfDAsR3wwLEZ8MCl8MDtEPURkKEZ8MCxDfDAsRXwwLER8MCl8MDtBPURkKER8MCxDfDAsQnwwLEF8MCl8MDt5PURkKEF8MCxDfDAsenwwLHl8MCl8MDt3PURkKHl8MCxDfDAseHwwLHd8MCl8MDt1PURkKHd8MCxDfDAsdnwwLHV8MCl8MDtzPURkKHV8MCxDfDAsdHwwLHN8MCl8MDtsPURkKHN8MCxDfDAsb3wwLGx8MCl8MDtsPURkKGx8MCxDfDAscnwwLGJ8MCl8MDtvPUM7Yj1IZChyfDAsYnwwLDI2KXwwO2I9Q2QoZHwwLHF8MCxifDAsQ3wwKXwwO3E9RGQobHwwLG98MCwxNjc3NzIxNiwwKXwwO3E9RWQocXwwLEN8MCwyNSl8MDtkPUM7cj1PZChxfDAsZHwwLDE5LDApfDA7bj1EZChyfDAsQ3wwLG18MCxufDApfDA7bT1DO2Q9SGQocXwwLGR8MCwyNSl8MDtkPUNkKGx8MCxvfDAsZHwwLEN8MCl8MDtvPURkKG58MCxtfDAsMzM1NTQ0MzIsMCl8MDtvPUVkKG98MCxDfDAsMjYpfDA7bD1DO2s9RGQocHwwLGt8MCxvfDAsbHwwKXwwO2w9SGQob3wwLGx8MCwyNil8MDtsPUNkKG58MCxtfDAsbHwwLEN8MCl8MDtjW2E+PjJdPWw7Y1thKzQ+PjJdPWs7Y1thKzg+PjJdPWo7Y1thKzEyPj4yXT1pO2NbYSsxNj4+Ml09aDtjW2ErMjA+PjJdPWc7Y1thKzI0Pj4yXT1mO2NbYSsyOD4+Ml09ZTtjW2ErMzI+PjJdPWI7Y1thKzM2Pj4yXT1kO3JldHVybn1mdW5jdGlvbiBsZChhLGIpe2E9YXwwO2I9YnwwO3ZhciBkPTAsZT0wLGY9MCxnPTAsaD0wLGk9MCxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTAsdD0wLHU9MCx2PTAsdz0wLHg9MCx5PTAsej0wLEE9MCxCPTAsRD0wLEU9MCxGPTAsRz0wLEg9MCxJPTAsSj0wLEs9MCxMPTAsTT0wLE49MCxPPTAsUD0wLFE9MCxSPTAsUz0wLFQ9MCxVPTAsVj0wLFc9MCxYPTAsWT0wLFo9MCxfPTAsJD0wLGFhPTAsYmE9MCxjYT0wLGRhPTAsZWE9MCxmYT0wLGdhPTAsaGE9MCxpYT0wLGphPTAsa2E9MCxsYT0wLG1hPTAsbmE9MCxvYT0wLHBhPTAscWE9MCxyYT0wLHNhPTAsdGE9MCx1YT0wLHZhPTAsd2E9MCx4YT0wLHlhPTAsemE9MCxBYT0wLEJhPTAsQ2E9MCxEYT0wLEVhPTAsRmE9MCxHYT0wLEhhPTAsSWE9MCxKYT0wLEthPTAsTGE9MCxNYT0wLE5hPTAsT2E9MCxQYT0wLFFhPTAsUmE9MCxTYT0wLFRhPTAsVWE9MCxWYT0wLFdhPTAsWGE9MCxZYT0wLFphPTAsX2E9MCwkYT0wLGFiPTAsYmI9MCxjYj0wLGRiPTAsZWI9MCxmYj0wLGdiPTA7YmI9Y1tiPj4yXXwwO3VhPWNbYis0Pj4yXXwwO2o9Y1tiKzg+PjJdfDA7bGE9Y1tiKzEyPj4yXXwwO2U9Y1tiKzE2Pj4yXXwwO2RiPWNbYisyMD4+Ml18MDtZPWNbYisyND4+Ml18MDtMYT1jW2IrMjg+PjJdfDA7aD1jW2IrMzI+PjJdfDA7Yj1jW2IrMzY+PjJdfDA7bD1iYjw8MTtwPXVhPDwxO1hhPWo8PDE7Zj1sYTw8MTtuYT1lPDwxO0I9ZGI8PDE7bT1ZPDwxO2k9TGE8PDE7S2E9ZGIqMzh8MDtyYT1ZKjE5fDA7dmE9TGEqMzh8MDtkYT1oKjE5fDA7Z2I9YiozOHwwO2NiPSgoYmJ8MCk8MCk8PDMxPj4zMTtjYj1PZChiYnwwLGNifDAsYmJ8MCxjYnwwKXwwO2JiPUM7bz0oKGx8MCk8MCk8PDMxPj4zMTt0YT0oKHVhfDApPDApPDwzMT4+MzE7SWE9T2QobHwwLG98MCx1YXwwLHRhfDApfDA7SGE9QztrPSgoanwwKTwwKTw8MzE+PjMxO1dhPU9kKGp8MCxrfDAsbHwwLG98MCl8MDtWYT1DO21hPSgobGF8MCk8MCk8PDMxPj4zMTtVYT1PZChsYXwwLG1hfDAsbHwwLG98MCl8MDtUYT1DO0Q9KChlfDApPDApPDwzMT4+MzE7T2E9T2QoZXwwLER8MCxsfDAsb3wwKXwwO05hPUM7ZWI9KChkYnwwKTwwKTw8MzE+PjMxO3lhPU9kKGRifDAsZWJ8MCxsfDAsb3wwKXwwO3hhPUM7Zz0oKFl8MCk8MCk8PDMxPj4zMTtnYT1PZChZfDAsZ3wwLGx8MCxvfDApfDA7ZmE9QztNYT0oKExhfDApPDApPDwzMT4+MzE7Uj1PZChMYXwwLE1hfDAsbHwwLG98MCl8MDtRPUM7QT0oKGh8MCk8MCk8PDMxPj4zMTtGPU9kKGh8MCxBfDAsbHwwLG98MCl8MDtFPUM7cT0oKGJ8MCk8MCk8PDMxPj4zMTtvPU9kKGJ8MCxxfDAsbHwwLG98MCl8MDtsPUM7bj0oKHB8MCk8MCk8PDMxPj4zMTt0YT1PZChwfDAsbnwwLHVhfDAsdGF8MCl8MDt1YT1DO2JhPU9kKHB8MCxufDAsanwwLGt8MCl8MDtjYT1DO1A9KChmfDApPDApPDwzMT4+MzE7U2E9T2QoZnwwLFB8MCxwfDAsbnwwKXwwO1JhPUM7Q2E9T2QoZXwwLER8MCxwfDAsbnwwKXwwO0JhPUM7ZD0oKEJ8MCk8MCk8PDMxPj4zMTtpYT1PZChCfDAsZHwwLHB8MCxufDApfDA7aGE9QztUPU9kKFl8MCxnfDAscHwwLG58MCl8MDtTPUM7Tz0oKGl8MCk8MCk8PDMxPj4zMTtIPU9kKGl8MCxPfDAscHwwLG58MCl8MDtHPUM7dD1PZChofDAsQXwwLHB8MCxufDApfDA7cz1DO2ZiPSgoZ2J8MCk8MCk8PDMxPj4zMTtuPU9kKGdifDAsZmJ8MCxwfDAsbnwwKXwwO3A9QztRYT1PZChqfDAsa3wwLGp8MCxrfDApfDA7UGE9QztZYT0oKFhhfDApPDApPDwzMT4+MzE7QWE9T2QoWGF8MCxZYXwwLGxhfDAsbWF8MCl8MDt6YT1DO2thPU9kKGV8MCxEfDAsWGF8MCxZYXwwKXwwO2phPUM7WD1PZChkYnwwLGVifDAsWGF8MCxZYXwwKXwwO1c9QztOPU9kKFl8MCxnfDAsWGF8MCxZYXwwKXwwO009Qzt2PU9kKExhfDAsTWF8MCxYYXwwLFlhfDApfDA7dT1DO2VhPSgoZGF8MCk8MCk8PDMxPj4zMTtZYT1PZChkYXwwLGVhfDAsWGF8MCxZYXwwKXwwO1hhPUM7az1PZChnYnwwLGZifDAsanwwLGt8MCl8MDtqPUM7bWE9T2QoZnwwLFB8MCxsYXwwLG1hfDApfDA7bGE9QztWPU9kKGZ8MCxQfDAsZXwwLER8MCl8MDtVPUM7Sj1PZChCfDAsZHwwLGZ8MCxQfDApfDA7ST1DO3o9T2QoWXwwLGd8MCxmfDAsUHwwKXwwO3k9Qzt3YT0oKHZhfDApPDApPDwzMT4+MzE7X2E9T2QodmF8MCx3YXwwLGZ8MCxQfDApfDA7WmE9QztFYT1PZChkYXwwLGVhfDAsZnwwLFB8MCl8MDtEYT1DO1A9T2QoZ2J8MCxmYnwwLGZ8MCxQfDApfDA7Zj1DO0w9T2QoZXwwLER8MCxlfDAsRHwwKXwwO0s9QztvYT0oKG5hfDApPDApPDwzMT4+MzE7eD1PZChuYXwwLG9hfDAsZGJ8MCxlYnwwKXwwO3c9QztzYT0oKHJhfDApPDApPDwzMT4+MzE7YWI9T2QocmF8MCxzYXwwLG5hfDAsb2F8MCl8MDskYT1DO0dhPU9kKHZhfDAsd2F8MCxlfDAsRHwwKXwwO0ZhPUM7b2E9T2QoZGF8MCxlYXwwLG5hfDAsb2F8MCl8MDtuYT1DO0Q9T2QoZ2J8MCxmYnwwLGV8MCxEfDApfDA7ZT1DO2ViPU9kKEthfDAsKChLYXwwKTwwKTw8MzE+PjMxfDAsZGJ8MCxlYnwwKXwwO2RiPUM7S2E9T2QocmF8MCxzYXwwLEJ8MCxkfDApfDA7SmE9QztxYT1PZCh2YXwwLHdhfDAsQnwwLGR8MCl8MDtwYT1DO189T2QoZGF8MCxlYXwwLEJ8MCxkfDApfDA7Wj1DO2Q9T2QoZ2J8MCxmYnwwLEJ8MCxkfDApfDA7Qj1DO3NhPU9kKHJhfDAsc2F8MCxZfDAsZ3wwKXwwO3JhPUM7YWE9T2QodmF8MCx3YXwwLFl8MCxnfDApfDA7JD1DO209T2QoZGF8MCxlYXwwLG18MCwoKG18MCk8MCk8PDMxPj4zMXwwKXwwO3I9QztnPU9kKGdifDAsZmJ8MCxZfDAsZ3wwKXwwO1k9QztNYT1PZCh2YXwwLHdhfDAsTGF8MCxNYXwwKXwwO0xhPUM7d2E9T2QoZGF8MCxlYXwwLGl8MCxPfDApfDA7dmE9QztPPU9kKGdifDAsZmJ8MCxpfDAsT3wwKXwwO2k9QztlYT1PZChkYXwwLGVhfDAsaHwwLEF8MCl8MDtkYT1DO0E9T2QoZ2J8MCxmYnwwLGh8MCxBfDApfDA7aD1DO3E9T2QoZ2J8MCxmYnwwLGJ8MCxxfDApfDA7Yj1DO2JiPURkKGVifDAsZGJ8MCxjYnwwLGJifDApfDA7JGE9RGQoYmJ8MCxDfDAsYWJ8MCwkYXwwKXwwO1phPURkKCRhfDAsQ3wwLF9hfDAsWmF8MCl8MDtYYT1EZChaYXwwLEN8MCxZYXwwLFhhfDApfDA7cD1EZChYYXwwLEN8MCxufDAscHwwKXwwO249Qzt1YT1EZChXYXwwLFZhfDAsdGF8MCx1YXwwKXwwO3RhPUM7Y2E9RGQoVWF8MCxUYXwwLGJhfDAsY2F8MCl8MDtiYT1DO1BhPURkKFNhfDAsUmF8MCxRYXwwLFBhfDApfDA7TmE9RGQoUGF8MCxDfDAsT2F8MCxOYXwwKXwwO0xhPURkKE5hfDAsQ3wwLE1hfDAsTGF8MCl8MDtyPURkKExhfDAsQ3wwLG18MCxyfDApfDA7Qj1EZChyfDAsQ3wwLGR8MCxCfDApfDA7ZD1DO3I9RGQocHwwLG58MCwzMzU1NDQzMiwwKXwwO3I9RWQocnwwLEN8MCwyNil8MDttPUM7SGE9RGQoS2F8MCxKYXwwLElhfDAsSGF8MCl8MDtGYT1EZChIYXwwLEN8MCxHYXwwLEZhfDApfDA7RGE9RGQoRmF8MCxDfDAsRWF8MCxEYXwwKXwwO2o9RGQoRGF8MCxDfDAsa3wwLGp8MCl8MDtqPURkKGp8MCxDfDAscnwwLG18MCl8MDtrPUM7bT1IZChyfDAsbXwwLDI2KXwwO209Q2QocHwwLG58MCxtfDAsQ3wwKXwwO249QztwPURkKEJ8MCxkfDAsMzM1NTQ0MzIsMCl8MDtwPUVkKHB8MCxDfDAsMjYpfDA7cj1DO3phPURkKENhfDAsQmF8MCxBYXwwLHphfDApfDA7eGE9RGQoemF8MCxDfDAseWF8MCx4YXwwKXwwO3ZhPURkKHhhfDAsQ3wwLHdhfDAsdmF8MCl8MDtZPURkKHZhfDAsQ3wwLGd8MCxZfDApfDA7WT1EZChZfDAsQ3wwLHB8MCxyfDApfDA7Zz1DO3I9SGQocHwwLHJ8MCwyNil8MDtyPUNkKEJ8MCxkfDAscnwwLEN8MCl8MDtkPUM7Qj1EZChqfDAsa3wwLDE2Nzc3MjE2LDApfDA7Qj1FZChCfDAsQ3wwLDI1KXwwO3A9QztyYT1EZCh1YXwwLHRhfDAsc2F8MCxyYXwwKXwwO3BhPURkKHJhfDAsQ3wwLHFhfDAscGF8MCl8MDtuYT1EZChwYXwwLEN8MCxvYXwwLG5hfDApfDA7Zj1EZChuYXwwLEN8MCxQfDAsZnwwKXwwO2Y9RGQoZnwwLEN8MCxCfDAscHwwKXwwO1A9QztwPUhkKEJ8MCxwfDAsMjUpfDA7cD1DZChqfDAsa3wwLHB8MCxDfDApfDA7az1DO2o9RGQoWXwwLGd8MCwxNjc3NzIxNiwwKXwwO2o9RWQoanwwLEN8MCwyNSl8MDtCPUM7amE9RGQobWF8MCxsYXwwLGthfDAsamF8MCl8MDtoYT1EZChqYXwwLEN8MCxpYXwwLGhhfDApfDA7ZmE9RGQoaGF8MCxDfDAsZ2F8MCxmYXwwKXwwO2RhPURkKGZhfDAsQ3wwLGVhfDAsZGF8MCl8MDtpPURkKGRhfDAsQ3wwLE98MCxpfDApfDA7aT1EZChpfDAsQ3wwLGp8MCxCfDApfDA7Tz1DO0I9SGQoanwwLEJ8MCwyNSl8MDtCPUNkKFl8MCxnfDAsQnwwLEN8MCl8MDtnPUM7WT1EZChmfDAsUHwwLDMzNTU0NDMyLDApfDA7WT1FZChZfDAsQ3wwLDI2KXwwO2o9QzskPURkKGNhfDAsYmF8MCxhYXwwLCR8MCl8MDtaPURkKCR8MCxDfDAsX3wwLFp8MCl8MDtlPURkKFp8MCxDfDAsRHwwLGV8MCl8MDtlPURkKGV8MCxDfDAsWXwwLGp8MCl8MDtEPUM7aj1IZChZfDAsanwwLDI2KXwwO2o9Q2QoZnwwLFB8MCxqfDAsQ3wwKXwwO1A9RGQoaXwwLE98MCwzMzU1NDQzMiwwKXwwO1A9RWQoUHwwLEN8MCwyNil8MDtmPUM7VT1EZChYfDAsV3wwLFZ8MCxVfDApfDA7Uz1EZChVfDAsQ3wwLFR8MCxTfDApfDA7UT1EZChTfDAsQ3wwLFJ8MCxRfDApfDA7aD1EZChRfDAsQ3wwLEF8MCxofDApfDA7aD1EZChofDAsQ3wwLFB8MCxmfDApfDA7QT1DO2Y9SGQoUHwwLGZ8MCwyNil8MDtmPUNkKGl8MCxPfDAsZnwwLEN8MCl8MDtPPURkKGV8MCxEfDAsMTY3NzcyMTYsMCl8MDtPPUVkKE98MCxDfDAsMjUpfDA7aT1DO2Q9RGQoT3wwLGl8MCxyfDAsZHwwKXwwO3I9QztpPUhkKE98MCxpfDAsMjUpfDA7aT1DZChlfDAsRHwwLGl8MCxDfDApfDA7RD1EZChofDAsQXwwLDE2Nzc3MjE2LDApfDA7RD1FZChEfDAsQ3wwLDI1KXwwO2U9QztLPURkKE58MCxNfDAsTHwwLEt8MCl8MDtJPURkKEt8MCxDfDAsSnwwLEl8MCl8MDtHPURkKEl8MCxDfDAsSHwwLEd8MCl8MDtFPURkKEd8MCxDfDAsRnwwLEV8MCl8MDtiPURkKEV8MCxDfDAscXwwLGJ8MCl8MDtiPURkKGJ8MCxDfDAsRHwwLGV8MCl8MDtxPUM7ZT1IZChEfDAsZXwwLDI1KXwwO2U9Q2QoaHwwLEF8MCxlfDAsQ3wwKXwwO0E9RGQoZHwwLHJ8MCwzMzU1NDQzMiwwKXwwO0E9RWQoQXwwLEN8MCwyNil8MDtoPUM7Zz1EZChCfDAsZ3wwLEF8MCxofDApfDA7aD1IZChBfDAsaHwwLDI2KXwwO2g9Q2QoZHwwLHJ8MCxofDAsQ3wwKXwwO3I9RGQoYnwwLHF8MCwzMzU1NDQzMiwwKXwwO3I9RWQocnwwLEN8MCwyNil8MDtkPUM7dz1EZCh6fDAseXwwLHh8MCx3fDApfDA7dT1EZCh3fDAsQ3wwLHZ8MCx1fDApfDA7cz1EZCh1fDAsQ3wwLHR8MCxzfDApfDA7bD1EZChzfDAsQ3wwLG98MCxsfDApfDA7bD1EZChsfDAsQ3wwLHJ8MCxkfDApfDA7bz1DO2Q9SGQocnwwLGR8MCwyNil8MDtkPUNkKGJ8MCxxfDAsZHwwLEN8MCl8MDtxPURkKGx8MCxvfDAsMTY3NzcyMTYsMCl8MDtxPUVkKHF8MCxDfDAsMjUpfDA7Yj1DO3I9T2QocXwwLGJ8MCwxOSwwKXwwO249RGQocnwwLEN8MCxtfDAsbnwwKXwwO209QztiPUhkKHF8MCxifDAsMjUpfDA7Yj1DZChsfDAsb3wwLGJ8MCxDfDApfDA7bz1EZChufDAsbXwwLDMzNTU0NDMyLDApfDA7bz1FZChvfDAsQ3wwLDI2KXwwO2w9QztrPURkKHB8MCxrfDAsb3wwLGx8MCl8MDtsPUhkKG98MCxsfDAsMjYpfDA7bD1DZChufDAsbXwwLGx8MCxDfDApfDA7Y1thPj4yXT1sO2NbYSs0Pj4yXT1rO2NbYSs4Pj4yXT1qO2NbYSsxMj4+Ml09aTtjW2ErMTY+PjJdPWg7Y1thKzIwPj4yXT1nO2NbYSsyND4+Ml09ZjtjW2ErMjg+PjJdPWU7Y1thKzMyPj4yXT1kO2NbYSszNj4+Ml09YjtyZXR1cm59ZnVuY3Rpb24gbWQoYixlLGYpe2I9YnwwO2U9ZXwwO2Y9ZnwwO3ZhciBnPTAsaD0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wLHM9MCx0PTAsdT0wLHY9MCx3PTAseD0wLHk9MCx6PTAsQT0wLEI9MCxEPTAsRT0wLEY9MCxHPTAsSD0wLEk9MCxKPTAsSz0wLEw9MCxNPTAsTj0wLE89MCxQPTAsUT0wLFI9MCxTPTAsVD0wLFU9MCxWPTAsVz0wLFg9MCxZPTAsWj0wLF89MCwkPTAsYWE9MCxiYT0wLGNhPTAsZGE9MCxlYT0wLGZhPTAsZ2E9MCxoYT0wLGlhPTAsamE9MCxrYT0wLGxhPTAsbWE9MCxuYT0wLG9hPTAscGE9MCxxYT0wLHJhPTAsc2E9MCx0YT0wLHVhPTAsdmE9MCx3YT0wLHhhPTAseWE9MCx6YT0wLEFhPTAsQmE9MCxDYT0wLERhPTAsRWE9MCxGYT0wLEdhPTAsSGE9MCxJYT0wLEphPTAsS2E9MCxMYT0wLE1hPTAsTmE9MCxPYT0wLFBhPTAsUWE9MCxSYT0wLFNhPTAsVGE9MCxVYT0wLFZhPTAsV2E9MCxYYT0wLFlhPTAsWmE9MCxfYT0wLCRhPTAsYWI9MCxiYj0wLGNiPTAsZGI9MCxlYj0wLGZiPTAsZ2I9MCxoYj0wLGliPTAsamI9MCxrYj0wLGxiPTAsbWI9MCxuYj0wO1lhPWk7T2E9aT1pKzYzJi02NDtpPWkrNDgwfDA7VGE9T2ErNDAwfDA7VWE9T2ErMzYwfDA7VmE9T2ErMzIwfDA7U2E9T2ErMjgwfDA7TWE9T2ErNDQwfDA7UGE9T2ErMjQwfDA7V2E9T2ErMjAwfDA7WGE9T2ErMTYwfDA7UWE9T2ErMTIwfDA7UmE9T2ErODB8MDtOYT1PYSs0MHwwO2g9TWE7Zz1oKzMyfDA7ZG97YVtoPj4wXT1hW2U+PjBdfDA7aD1oKzF8MDtlPWUrMXwwfXdoaWxlKChofDApPChnfDApKTthW01hPj4wXT0oZFtNYT4+MF18MCkmMjQ4O209TWErMzF8MDthW20+PjBdPShkW20+PjBdfDApJjYzfDY0O209ZFtmPj4wXXwwO0RhPUhkKGRbZisxPj4wXXwwfDAsMCw4KXwwO2o9Qzt2YT1IZChkW2YrMj4+MF18MHwwLDAsMTYpfDA7aj1qfEM7QWE9SGQoZFtmKzM+PjBdfDB8MCwwLDI0KXwwO2o9anxDO2s9YVtmKzY+PjBdfDA7bD1kW2YrND4+MF18MDt5YT1IZChkW2YrNT4+MF18MHwwLDAsOCl8MDt6YT1DO2s9SGQoayYyNTV8MCwwLDE2KXwwO3phPUhkKHlhfGx8a3wwLHphfEN8MCw2KXwwO2s9QztsPWFbZis5Pj4wXXwwO3lhPWRbZis3Pj4wXXwwO249SGQoZFtmKzg+PjBdfDB8MCwwLDgpfDA7RWE9QztsPUhkKGwmMjU1fDAsMCwxNil8MDtFYT1IZChufHlhfGx8MCxFYXxDfDAsNSl8MDtsPUM7eWE9YVtmKzEyPj4wXXwwO249ZFtmKzEwPj4wXXwwO0dhPUhkKGRbZisxMT4+MF18MHwwLDAsOCl8MDt4YT1DO3lhPUhkKHlhJjI1NXwwLDAsMTYpfDA7eGE9SGQoR2F8bnx5YXwwLHhhfEN8MCwzKXwwO3lhPUM7bj1hW2YrMTU+PjBdfDA7R2E9ZFtmKzEzPj4wXXwwO2g9SGQoZFtmKzE0Pj4wXXwwfDAsMCw4KXwwO0lhPUM7bj1IZChuJjI1NXwwLDAsMTYpfDA7SWE9SGQoaHxHYXxufDAsSWF8Q3wwLDIpfDA7bj1DO0dhPWRbZisxNj4+MF18MDtoPUhkKGRbZisxNz4+MF18MHwwLDAsOCl8MDtDYT1DO3A9SGQoZFtmKzE4Pj4wXXwwfDAsMCwxNil8MDtDYT1DYXxDO0JhPUhkKGRbZisxOT4+MF18MHwwLDAsMjQpfDA7QmE9aHxHYXxwfEJhO0NhPUNhfEM7cD1hW2YrMjI+PjBdfDA7R2E9ZFtmKzIwPj4wXXwwO2g9SGQoZFtmKzIxPj4wXXwwfDAsMCw4KXwwO2c9QztwPUhkKHAmMjU1fDAsMCwxNil8MDtnPUhkKGh8R2F8cHwwLGd8Q3wwLDcpfDA7cD1DO0dhPWFbZisyNT4+MF18MDtoPWRbZisyMz4+MF18MDtxPUhkKGRbZisyND4+MF18MHwwLDAsOCl8MDtGYT1DO0dhPUhkKEdhJjI1NXwwLDAsMTYpfDA7RmE9SGQocXxofEdhfDAsRmF8Q3wwLDUpfDA7R2E9QztoPWFbZisyOD4+MF18MDtxPWRbZisyNj4+MF18MDtLYT1IZChkW2YrMjc+PjBdfDB8MCwwLDgpfDA7TGE9QztoPUhkKGgmMjU1fDAsMCwxNil8MDtMYT1IZChLYXxxfGh8MCxMYXxDfDAsNCl8MDtoPUM7cT1hW2YrMzE+PjBdfDA7S2E9ZFtmKzI5Pj4wXXwwO2Y9SGQoZFtmKzMwPj4wXXwwfDAsMCw4KXwwO0phPUM7cT1IZChxJjI1NXwwLDAsMTYpfDA7SmE9SGQoZnxLYXxxfDAsSmF8Q3wwLDIpfDA7SmE9SmEmMzM1NTQ0Mjg7cT1EZChKYXwwLDAsMTY3NzcyMTYsMCl8MDtxPUdkKHF8MCxDfDAsMjUpfDA7S2E9QztmPUNkKDAsMCxxfDAsS2F8MCl8MDtqPURkKGYmMTl8MCwwLERhfG18dmF8QWF8MCxqfDApfDA7QWE9QztLYT1IZChxfDAsS2F8MCwyNSl8MDtxPUM7Zj1EZCh6YXwwLGt8MCwxNjc3NzIxNiwwKXwwO2Y9R2QoZnwwLEN8MCwyNSl8MDt2YT1DO2w9RGQoRWF8MCxsfDAsZnwwLHZhfDApfDA7RWE9Qzt2YT1IZChmfDAsdmF8MCwyNSl8MDt2YT1DZCh6YXwwLGt8MCx2YXwwLEN8MCl8MDtmPUM7az1EZCh4YXwwLHlhfDAsMTY3NzcyMTYsMCl8MDtrPUdkKGt8MCxDfDAsMjUpfDA7emE9QztuPURkKElhfDAsbnwwLGt8MCx6YXwwKXwwO0lhPUM7emE9SGQoa3wwLHphfDAsMjUpfDA7az1DO209RGQoQmF8MCxDYXwwLDE2Nzc3MjE2LDApfDA7bT1HZChtfDAsQ3wwLDI1KXwwO0RhPUM7cD1EZChnfDAscHwwLG18MCxEYXwwKXwwO2c9QztEYT1IZChtfDAsRGF8MCwyNSl8MDttPUM7bz1EZChGYXwwLEdhfDAsMTY3NzcyMTYsMCl8MDtvPUdkKG98MCxDfDAsMjUpfDA7SGE9QztoPURkKExhfDAsaHwwLG98MCxIYXwwKXwwO0xhPUM7SGE9SGQob3wwLEhhfDAsMjUpfDA7bz1DO3dhPURkKGp8MCxBYXwwLDMzNTU0NDMyLDApfDA7d2E9RWQod2F8MCxDfDAsMjYpfDA7ZT1DO2Y9RGQodmF8MCxmfDAsd2F8MCxlfDApfDA7ZT1IZCh3YXwwLGV8MCwyNil8MDtlPUNkKGp8MCxBYXwwLGV8MCxDfDApfDA7QWE9RGQobHwwLEVhfDAsMzM1NTQ0MzIsMCl8MDtBYT1FZChBYXwwLEN8MCwyNil8MDtqPUM7eWE9RGQoQWF8MCxqfDAseGF8MCx5YXwwKXwwO2s9Q2QoeWF8MCxDfDAsemF8MCxrfDApfDA7aj1IZChBYXwwLGp8MCwyNil8MDtqPUNkKGx8MCxFYXwwLGp8MCxDfDApfDA7RWE9RGQobnwwLElhfDAsMzM1NTQ0MzIsMCl8MDtFYT1FZChFYXwwLEN8MCwyNil8MDtsPUM7Q2E9RGQoRWF8MCxsfDAsQmF8MCxDYXwwKXwwO209Q2QoQ2F8MCxDfDAsRGF8MCxtfDApfDA7bD1IZChFYXwwLGx8MCwyNil8MDtsPUNkKG58MCxJYXwwLGx8MCxDfDApfDA7SWE9RGQocHwwLGd8MCwzMzU1NDQzMiwwKXwwO0lhPUVkKElhfDAsQ3wwLDI2KXwwO249QztHYT1EZChJYXwwLG58MCxGYXwwLEdhfDApfDA7bz1DZChHYXwwLEN8MCxIYXwwLG98MCl8MDtuPUhkKElhfDAsbnwwLDI2KXwwO249Q2QocHwwLGd8MCxufDAsQ3wwKXwwO2c9RGQoaHwwLExhfDAsMzM1NTQ0MzIsMCl8MDtnPUVkKGd8MCxDfDAsMjYpfDA7cD1DO0phPURkKEphfDAsMCxnfDAscHwwKXwwO3E9Q2QoSmF8MCxDfDAsS2F8MCxxfDApfDA7cD1IZChnfDAscHwwLDI2KXwwO3A9Q2QoaHwwLExhfDAscHwwLEN8MCl8MDtjW1BhPj4yXT1lO2NbUGErND4+Ml09ZjtjW1BhKzg+PjJdPWo7Y1tQYSsxMj4+Ml09aztjW1BhKzE2Pj4yXT1sO2NbUGErMjA+PjJdPW07Y1tQYSsyND4+Ml09bjtjW1BhKzI4Pj4yXT1vO2NbUGErMzI+PjJdPXA7Y1tQYSszNj4+Ml09cTtjW1dhPj4yXT0xO0xhPVdhKzR8MDtoPUxhO2c9aCszNnwwO2Rve2NbaD4+Ml09MDtoPWgrNHwwfXdoaWxlKChofDApPChnfDApKTtoPVhhO2c9aCs0MHwwO2Rve2NbaD4+Ml09MDtoPWgrNHwwfXdoaWxlKChofDApPChnfDApKTtjW1FhPj4yXT1lO3RhPVFhKzR8MDtjW3RhPj4yXT1mO3VhPVFhKzh8MDtjW3VhPj4yXT1qO3ZhPVFhKzEyfDA7Y1t2YT4+Ml09azt3YT1RYSsxNnwwO2Nbd2E+PjJdPWw7eGE9UWErMjB8MDtjW3hhPj4yXT1tO3lhPVFhKzI0fDA7Y1t5YT4+Ml09bjt6YT1RYSsyOHwwO2NbemE+PjJdPW87QWE9UWErMzJ8MDtjW0FhPj4yXT1wO0JhPVFhKzM2fDA7Y1tCYT4+Ml09cTtjW1JhPj4yXT0xO0NhPVJhKzR8MDtoPUNhO2c9aCszNnwwO2Rve2NbaD4+Ml09MDtoPWgrNHwwfXdoaWxlKChofDApPChnfDApKTtEYT1XYSs4fDA7RWE9V2ErMTJ8MDtGYT1XYSsxNnwwO0dhPVdhKzIwfDA7SGE9V2ErMjR8MDtJYT1XYSsyOHwwO0phPVdhKzMyfDA7S2E9V2ErMzZ8MDtNPVhhKzR8MDtOPVhhKzh8MDtPPVhhKzEyfDA7UD1YYSsxNnwwO1E9WGErMjB8MDtSPVhhKzI0fDA7Uz1YYSsyOHwwO1Q9WGErMzJ8MDtVPVhhKzM2fDA7Vj1SYSs4fDA7Vz1SYSsxMnwwO1g9UmErMTZ8MDtZPVJhKzIwfDA7Wj1SYSsyNHwwO189UmErMjh8MDskPVJhKzMyfDA7YWE9UmErMzZ8MDtiYT1OYSs0fDA7Y2E9TmErOHwwO2RhPU5hKzEyfDA7ZWE9TmErMTZ8MDtmYT1OYSsyMHwwO2dhPU5hKzI0fDA7aGE9TmErMjh8MDtpYT1OYSszMnwwO2phPU5hKzM2fDA7a2E9T2ErNHwwO2xhPU9hKzh8MDttYT1PYSsxMnwwO25hPU9hKzE2fDA7b2E9T2ErMjB8MDtwYT1PYSsyNHwwO3FhPU9hKzI4fDA7cmE9T2ErMzJ8MDtzYT1PYSszNnwwO0w9MTtLPTA7Sj0wO0k9MDtIPTA7Rz0wO0Y9MDtFPTA7RD0wO2g9MDtyPTA7cz0wO3Q9MDt1PTA7dj0wO3c9MDt4PTA7eT0wO3o9MDtBPTI1NDtCPTA7d2hpbGUoMSl7Zz0oZFtNYSsoKEF8MCkvOHwwKT4+MF18MCk+Pj4oQSY3KSYxO25iPTAtKGdeQil8MDtiYj0oZV5MKSZuYjthYj0oZl5LKSZuYjskYT0oal5KKSZuYjtfYT0oa15JKSZuYjtaYT0obF5IKSZuYjtrYj0obV5HKSZuYjttYj0obl5GKSZuYjtCPShvXkUpJm5iO2piPShwXkQpJm5iO2xiPShxXmgpJm5iO2NbV2E+PjJdPWJiXkw7Y1tMYT4+Ml09YWJeSztjW0RhPj4yXT0kYV5KO2NbRWE+PjJdPV9hXkk7Y1tGYT4+Ml09WmFeSDtjW0dhPj4yXT1rYl5HO2NbSGE+PjJdPW1iXkY7Y1tJYT4+Ml09Ql5FO2NbSmE+PjJdPWpiXkQ7Y1tLYT4+Ml09bGJeaDtiYj1iYl5lO2NbUWE+PjJdPWJiO2FiPWFiXmY7Y1t0YT4+Ml09YWI7JGE9JGFeajtjW3VhPj4yXT0kYTtfYT1fYV5rO2NbdmE+PjJdPV9hO1phPVphXmw7Y1t3YT4+Ml09WmE7ST1rYl5tO2NbeGE+PjJdPUk7RT1tYl5uO2NbeWE+PjJdPUU7bD1CXm87Y1t6YT4+Ml09bDtqPWpiXnA7Y1tBYT4+Ml09ajtmPWxiXnE7Y1tCYT4+Ml09ZjtLPWNbVT4+Ml18MDtsYj1jW1JhPj4yXXwwO2piPWNbQ2E+PjJdfDA7Qj1jW1Y+PjJdfDA7cD1jW1c+PjJdfDA7cT1jW1g+PjJdfDA7RD1jW1k+PjJdfDA7Rj1jW1o+PjJdfDA7SD1jW18+PjJdfDA7Sj1jWyQ+PjJdfDA7TD1jW2FhPj4yXXwwO21iPShsYl5yKSZuYjtrYj0oamJecykmbmI7aWI9KEJedCkmbmI7aGI9KHBedSkmbmI7Z2I9KHFedikmbmI7ZmI9KERedykmbmI7ZWI9KEZeeCkmbmI7ZGI9KEheeSkmbmI7Y2I9KEpeeikmbmI7bz0oTF5LKSZuYjtlPW1iXnI7Y1tYYT4+Ml09ZTtoPWtiXnM7Y1tNPj4yXT1oO2s9aWJedDtjW04+PjJdPWs7bT1oYl51O2NbTz4+Ml09bTtuPWdiXnY7Y1tQPj4yXT1uO3I9ZmJedztjW1E+PjJdPXI7dj1lYl54O2NbUj4+Ml09djt4PWRiXnk7Y1tTPj4yXT14O0c9Y2JeejtjW1Q+PjJdPUc7Sz1vXks7Y1tVPj4yXT1LO3M9bWJebGI7Y1tSYT4+Ml09czt1PWtiXmpiO2NbQ2E+PjJdPXU7Qj1pYl5CO2NbVj4+Ml09QjtwPWhiXnA7Y1tXPj4yXT1wO3E9Z2JecTtjW1g+PjJdPXE7RD1mYl5EO2NbWT4+Ml09RDtGPWViXkY7Y1taPj4yXT1GO0g9ZGJeSDtjW18+PjJdPUg7Sj1jYl5KO2NbJD4+Ml09SjtMPW9eTDtjW2FhPj4yXT1MO2NbTmE+PjJdPWJiLXM7Y1tiYT4+Ml09YWItdTtjW2NhPj4yXT0kYS1CO2NbZGE+PjJdPV9hLXA7Y1tlYT4+Ml09WmEtcTtjW2ZhPj4yXT1JLUQ7Y1tnYT4+Ml09RS1GO2NbaGE+PjJdPWwtSDtjW2lhPj4yXT1qLUo7Y1tqYT4+Ml09Zi1MO2Y9Y1tXYT4+Ml18MDtqPWNbTGE+PjJdfDA7bD1jW0RhPj4yXXwwO3c9Y1tFYT4+Ml18MDtvPWNbRmE+PjJdfDA7dD1jW0dhPj4yXXwwO3o9Y1tIYT4+Ml18MDtFPWNbSWE+PjJdfDA7ST1jW0phPj4yXXwwO3k9Y1tLYT4+Ml18MDtjW09hPj4yXT1mLWU7Y1trYT4+Ml09ai1oO2NbbGE+PjJdPWwtaztjW21hPj4yXT13LW07Y1tuYT4+Ml09by1uO2Nbb2E+PjJdPXQtcjtjW3BhPj4yXT16LXY7Y1txYT4+Ml09RS14O2NbcmE+PjJdPUktRztjW3NhPj4yXT15LUs7Y1tXYT4+Ml09ZStmO2NbTGE+PjJdPWgrajtjW0RhPj4yXT1rK2w7Y1tFYT4+Ml09bSt3O2NbRmE+PjJdPW4rbztjW0dhPj4yXT1yK3Q7Y1tIYT4+Ml09dit6O2NbSWE+PjJdPXgrRTtjW0phPj4yXT1HK0k7Y1tLYT4+Ml09Syt5O3U9dSsoY1t0YT4+Ml18MCl8MDtCPUIrKGNbdWE+PjJdfDApfDA7cD1wKyhjW3ZhPj4yXXwwKXwwO3E9cSsoY1t3YT4+Ml18MCl8MDtEPUQrKGNbeGE+PjJdfDApfDA7Rj1GKyhjW3lhPj4yXXwwKXwwO0g9SCsoY1t6YT4+Ml18MCl8MDtKPUorKGNbQWE+PjJdfDApfDA7TD1MKyhjW0JhPj4yXXwwKXwwO2NbWGE+PjJdPXMrKGNbUWE+PjJdfDApO2NbTT4+Ml09dTtjW04+PjJdPUI7Y1tPPj4yXT1wO2NbUD4+Ml09cTtjW1E+PjJdPUQ7Y1tSPj4yXT1GO2NbUz4+Ml09SDtjW1Q+PjJdPUo7Y1tVPj4yXT1MO2tkKFJhLE5hLFdhKTtrZChYYSxYYSxPYSk7bGQoTmEsT2EpO2xkKE9hLFdhKTtMPWNbUmE+PjJdfDA7Sj1jW0NhPj4yXXwwO0g9Y1tWPj4yXXwwO0Y9Y1tXPj4yXXwwO0Q9Y1tYPj4yXXwwO3E9Y1tZPj4yXXwwO3A9Y1taPj4yXXwwO0I9Y1tfPj4yXXwwO3U9Y1skPj4yXXwwO3M9Y1thYT4+Ml18MDt5PWNbWGE+PjJdfDA7Sz1jW00+PjJdfDA7ST1jW04+PjJdfDA7Rz1jW08+PjJdfDA7RT1jW1A+PjJdfDA7ej1jW1E+PjJdfDA7eD1jW1I+PjJdfDA7dj1jW1M+PjJdfDA7dD1jW1Q+PjJdfDA7cj1jW1U+PjJdfDA7Y1tRYT4+Ml09eStMO2NbdGE+PjJdPUsrSjtjW3VhPj4yXT1JK0g7Y1t2YT4+Ml09RytGO2Nbd2E+PjJdPUUrRDtjW3hhPj4yXT16K3E7Y1t5YT4+Ml09eCtwO2NbemE+PjJdPXYrQjtjW0FhPj4yXT10K3U7Y1tCYT4+Ml09citzO2NbWGE+PjJdPUwteTtjW00+PjJdPUotSztjW04+PjJdPUgtSTtjW08+PjJdPUYtRztjW1A+PjJdPUQtRTtjW1E+PjJdPXEtejtjW1I+PjJdPXAteDtjW1M+PjJdPUItdjtjW1Q+PjJdPXUtdDtjW1U+PjJdPXMtcjtrZChXYSxPYSxOYSk7cj0oY1tPYT4+Ml18MCktKGNbTmE+PjJdfDApfDA7cz0oY1trYT4+Ml18MCktKGNbYmE+PjJdfDApfDA7dD0oY1tsYT4+Ml18MCktKGNbY2E+PjJdfDApfDA7dT0oY1ttYT4+Ml18MCktKGNbZGE+PjJdfDApfDA7dj0oY1tuYT4+Ml18MCktKGNbZWE+PjJdfDApfDA7Qj0oY1tvYT4+Ml18MCktKGNbZmE+PjJdfDApfDA7eD0oY1twYT4+Ml18MCktKGNbZ2E+PjJdfDApfDA7cD0oY1txYT4+Ml18MCktKGNbaGE+PjJdfDApfDA7ej0oY1tyYT4+Ml18MCktKGNbaWE+PjJdfDApfDA7cT0oY1tzYT4+Ml18MCktKGNbamE+PjJdfDApfDA7Y1tPYT4+Ml09cjtjW2thPj4yXT1zO2NbbGE+PjJdPXQ7Y1ttYT4+Ml09dTtjW25hPj4yXT12O2Nbb2E+PjJdPUI7Y1twYT4+Ml09eDtjW3FhPj4yXT1wO2NbcmE+PjJdPXo7Y1tzYT4+Ml09cTtsZChYYSxYYSk7cj1PZChyfDAsKChyfDApPDApPDwzMT4+MzF8MCwxMjE2NjYsMCl8MDtFPUM7cz1PZChzfDAsKChzfDApPDApPDwzMT4+MzF8MCwxMjE2NjYsMCl8MDtEPUM7dD1PZCh0fDAsKCh0fDApPDApPDwzMT4+MzF8MCwxMjE2NjYsMCl8MDtHPUM7dT1PZCh1fDAsKCh1fDApPDApPDwzMT4+MzF8MCwxMjE2NjYsMCl8MDtGPUM7dj1PZCh2fDAsKCh2fDApPDApPDwzMT4+MzF8MCwxMjE2NjYsMCl8MDtJPUM7Qj1PZChCfDAsKChCfDApPDApPDwzMT4+MzF8MCwxMjE2NjYsMCl8MDtIPUM7eD1PZCh4fDAsKCh4fDApPDApPDwzMT4+MzF8MCwxMjE2NjYsMCl8MDtLPUM7cD1PZChwfDAsKChwfDApPDApPDwzMT4+MzF8MCwxMjE2NjYsMCl8MDtKPUM7ej1PZCh6fDAsKCh6fDApPDApPDwzMT4+MzF8MCwxMjE2NjYsMCl8MDt5PUM7cT1PZChxfDAsKChxfDApPDApPDwzMT4+MzF8MCwxMjE2NjYsMCl8MDtMPUM7bz1EZChxfDAsTHwwLDE2Nzc3MjE2LDApfDA7bz1FZChvfDAsQ3wwLDI1KXwwO3c9QztuPU9kKG98MCx3fDAsMTksMCl8MDtFPURkKG58MCxDfDAscnwwLEV8MCl8MDtyPUM7dz1IZChvfDAsd3wwLDI1KXwwO3c9Q2QocXwwLEx8MCx3fDAsQ3wwKXwwO0w9QztxPURkKHN8MCxEfDAsMTY3NzcyMTYsMCl8MDtxPUVkKHF8MCxDfDAsMjUpfDA7bz1DO0c9RGQocXwwLG98MCx0fDAsR3wwKXwwO3Q9QztvPUhkKHF8MCxvfDAsMjUpfDA7bz1DZChzfDAsRHwwLG98MCxDfDApfDA7RD1DO3M9RGQodXwwLEZ8MCwxNjc3NzIxNiwwKXwwO3M9RWQoc3wwLEN8MCwyNSl8MDtxPUM7ST1EZChzfDAscXwwLHZ8MCxJfDApfDA7dj1DO3E9SGQoc3wwLHF8MCwyNSl8MDtxPUNkKHV8MCxGfDAscXwwLEN8MCl8MDtGPUM7dT1EZChCfDAsSHwwLDE2Nzc3MjE2LDApfDA7dT1FZCh1fDAsQ3wwLDI1KXwwO3M9QztLPURkKHV8MCxzfDAseHwwLEt8MCl8MDt4PUM7cz1IZCh1fDAsc3wwLDI1KXwwO3M9Q2QoQnwwLEh8MCxzfDAsQ3wwKXwwO0g9QztCPURkKHB8MCxKfDAsMTY3NzcyMTYsMCl8MDtCPUVkKEJ8MCxDfDAsMjUpfDA7dT1DO3k9RGQoQnwwLHV8MCx6fDAseXwwKXwwO3o9Qzt1PUhkKEJ8MCx1fDAsMjUpfDA7dT1DZChwfDAsSnwwLHV8MCxDfDApfDA7Sj1DO3A9RGQoRXwwLHJ8MCwzMzU1NDQzMiwwKXwwO3A9RWQocHwwLEN8MCwyNil8MDtCPUM7RD1EZChvfDAsRHwwLHB8MCxCfDApfDA7Qj1IZChwfDAsQnwwLDI2KXwwO0I9Q2QoRXwwLHJ8MCxCfDAsQ3wwKXwwO3I9RGQoR3wwLHR8MCwzMzU1NDQzMiwwKXwwO3I9RWQocnwwLEN8MCwyNil8MDtFPUM7Rj1EZChxfDAsRnwwLHJ8MCxFfDApfDA7RT1IZChyfDAsRXwwLDI2KXwwO0U9Q2QoR3wwLHR8MCxFfDAsQ3wwKXwwO3Q9RGQoSXwwLHZ8MCwzMzU1NDQzMiwwKXwwO3Q9RWQodHwwLEN8MCwyNil8MDtHPUM7SD1EZChzfDAsSHwwLHR8MCxHfDApfDA7Rz1IZCh0fDAsR3wwLDI2KXwwO0c9Q2QoSXwwLHZ8MCxHfDAsQ3wwKXwwO3Y9RGQoS3wwLHh8MCwzMzU1NDQzMiwwKXwwO3Y9RWQodnwwLEN8MCwyNil8MDtJPUM7Sj1EZCh1fDAsSnwwLHZ8MCxJfDApfDA7ST1IZCh2fDAsSXwwLDI2KXwwO0k9Q2QoS3wwLHh8MCxJfDAsQ3wwKXwwO3g9RGQoeXwwLHp8MCwzMzU1NDQzMiwwKXwwO3g9RWQoeHwwLEN8MCwyNil8MDtLPUM7TD1EZCh3fDAsTHwwLHh8MCxLfDApfDA7Sz1IZCh4fDAsS3wwLDI2KXwwO0s9Q2QoeXwwLHp8MCxLfDAsQ3wwKXwwO2NbUmE+PjJdPUI7Y1tDYT4+Ml09RDtjW1Y+PjJdPUU7Y1tXPj4yXT1GO2NbWD4+Ml09RztjW1k+PjJdPUg7Y1taPj4yXT1JO2NbXz4+Ml09SjtjWyQ+PjJdPUs7Y1thYT4+Ml09TDtsZChRYSxRYSk7RD1EKyhjW2JhPj4yXXwwKXwwO0U9RSsoY1tjYT4+Ml18MCl8MDtGPUYrKGNbZGE+PjJdfDApfDA7Rz1HKyhjW2VhPj4yXXwwKXwwO0g9SCsoY1tmYT4+Ml18MCl8MDtJPUkrKGNbZ2E+PjJdfDApfDA7Sj1KKyhjW2hhPj4yXXwwKXwwO0s9SysoY1tpYT4+Ml18MCl8MDtMPUwrKGNbamE+PjJdfDApfDA7Y1tOYT4+Ml09QisoY1tOYT4+Ml18MCk7Y1tiYT4+Ml09RDtjW2NhPj4yXT1FO2NbZGE+PjJdPUY7Y1tlYT4+Ml09RztjW2ZhPj4yXT1IO2NbZ2E+PjJdPUk7Y1toYT4+Ml09SjtjW2lhPj4yXT1LO2NbamE+PjJdPUw7a2QoUmEsUGEsWGEpO2tkKFhhLE9hLE5hKTtpZigoQXwwKTw9MClicmVhaztlPWNbUWE+PjJdfDA7TD1jW1dhPj4yXXwwO2Y9Y1t0YT4+Ml18MDtLPWNbTGE+PjJdfDA7aj1jW3VhPj4yXXwwO0o9Y1tEYT4+Ml18MDtrPWNbdmE+PjJdfDA7ST1jW0VhPj4yXXwwO2w9Y1t3YT4+Ml18MDtIPWNbRmE+PjJdfDA7bT1jW3hhPj4yXXwwO0c9Y1tHYT4+Ml18MDtuPWNbeWE+PjJdfDA7Rj1jW0hhPj4yXXwwO289Y1t6YT4+Ml18MDtFPWNbSWE+PjJdfDA7cD1jW0FhPj4yXXwwO0Q9Y1tKYT4+Ml18MDtxPWNbQmE+PjJdfDA7aD1jW0thPj4yXXwwO3I9Y1tYYT4+Ml18MDtzPWNbTT4+Ml18MDt0PWNbTj4+Ml18MDt1PWNbTz4+Ml18MDt2PWNbUD4+Ml18MDt3PWNbUT4+Ml18MDt4PWNbUj4+Ml18MDt5PWNbUz4+Ml18MDt6PWNbVD4+Ml18MDtBPUErLTF8MDtCPWd9a2E9Y1tXYT4+Ml18MDtsYT1jW0xhPj4yXXwwO21hPWNbRGE+PjJdfDA7bmE9Y1tFYT4+Ml18MDtvYT1jW0ZhPj4yXXwwO3BhPWNbR2E+PjJdfDA7cWE9Y1tIYT4+Ml18MDtyYT1jW0lhPj4yXXwwO3NhPWNbSmE+PjJdfDA7bGI9Y1tLYT4+Ml18MDtoYj1jW1FhPj4yXXwwO2RiPWNbdGE+PjJdfDA7JGE9Y1t1YT4+Ml18MDtQYT1jW3ZhPj4yXXwwO21iPWNbd2E+PjJdfDA7aWI9Y1t4YT4+Ml18MDtlYj1jW3lhPj4yXXwwO2FiPWNbemE+PjJdfDA7T2E9Y1tBYT4+Ml18MDtNYT1jW0JhPj4yXXwwO25iPTAtZ3wwO2piPShoYl5rYSkmbmI7ZmI9KGRiXmxhKSZuYjtiYj0oJGFebWEpJm5iO1phPShQYV5uYSkmbmI7ZT0obWJeb2EpJm5iO2tiPShpYl5wYSkmbmI7Z2I9KGViXnFhKSZuYjtjYj0oYWJecmEpJm5iO19hPShPYV5zYSkmbmI7TmE9KE1hXmxiKSZuYjtjW1dhPj4yXT1qYl5rYTtjW0xhPj4yXT1mYl5sYTtjW0RhPj4yXT1iYl5tYTtjW0VhPj4yXT1aYV5uYTtjW0ZhPj4yXT1lXm9hO2NbR2E+PjJdPWtiXnBhO2NbSGE+PjJdPWdiXnFhO2NbSWE+PjJdPWNiXnJhO2NbSmE+PjJdPV9hXnNhO2NbS2E+PjJdPU5hXmxiO2NbUWE+PjJdPWpiXmhiO2NbdGE+PjJdPWZiXmRiO2NbdWE+PjJdPWJiXiRhO2NbdmE+PjJdPVphXlBhO2Nbd2E+PjJdPWVebWI7Y1t4YT4+Ml09a2JeaWI7Y1t5YT4+Ml09Z2JeZWI7Y1t6YT4+Ml09Y2JeYWI7Y1tBYT4+Ml09X2FeT2E7Y1tCYT4+Ml09TmFeTWE7dmE9Y1tYYT4+Ml18MDt3YT1jW00+PjJdfDA7eGE9Y1tOPj4yXXwwO3lhPWNbTz4+Ml18MDt6YT1jW1A+PjJdfDA7QWE9Y1tRPj4yXXwwO0JhPWNbUj4+Ml18MDtNYT1jW1M+PjJdfDA7TmE9Y1tUPj4yXXwwO09hPWNbVT4+Ml18MDtRYT1jW1JhPj4yXXwwO19hPWNbQ2E+PjJdfDA7YWI9Y1tWPj4yXXwwO2NiPWNbVz4+Ml18MDtlYj1jW1g+PjJdfDA7Z2I9Y1tZPj4yXXwwO2liPWNbWj4+Ml18MDtrYj1jW18+PjJdfDA7bWI9Y1skPj4yXXwwO2U9Y1thYT4+Ml18MDtQYT0oUWFedmEpJm5iO1phPShfYV53YSkmbmI7JGE9KGFiXnhhKSZuYjtiYj0oY2JeeWEpJm5iO2RiPShlYl56YSkmbmI7ZmI9KGdiXkFhKSZuYjtoYj0oaWJeQmEpJm5iO2piPShrYl5NYSkmbmI7bGI9KG1iXk5hKSZuYjtuYj0oZV5PYSkmbmI7Y1tYYT4+Ml09UGFedmE7Y1tNPj4yXT1aYV53YTtjW04+PjJdPSRhXnhhO2NbTz4+Ml09YmJeeWE7Y1tQPj4yXT1kYl56YTtjW1E+PjJdPWZiXkFhO2NbUj4+Ml09aGJeQmE7Y1tTPj4yXT1qYl5NYTtjW1Q+PjJdPWxiXk5hO2NbVT4+Ml09bmJeT2E7Y1tSYT4+Ml09UGFeUWE7Y1tDYT4+Ml09WmFeX2E7Y1tWPj4yXT0kYV5hYjtjW1c+PjJdPWJiXmNiO2NbWD4+Ml09ZGJeZWI7Y1tZPj4yXT1mYl5nYjtjW1o+PjJdPWhiXmliO2NbXz4+Ml09amJea2I7Y1skPj4yXT1sYl5tYjtjW2FhPj4yXT1uYl5lO2xkKFRhLFhhKTtsZChVYSxUYSk7bGQoVWEsVWEpO2tkKFVhLFhhLFVhKTtrZChUYSxUYSxVYSk7bGQoVmEsVGEpO2tkKFVhLFVhLFZhKTtsZChWYSxVYSk7bGQoVmEsVmEpO2xkKFZhLFZhKTtsZChWYSxWYSk7bGQoVmEsVmEpO2tkKFVhLFZhLFVhKTtsZChWYSxVYSk7bGQoVmEsVmEpO2xkKFZhLFZhKTtsZChWYSxWYSk7bGQoVmEsVmEpO2xkKFZhLFZhKTtsZChWYSxWYSk7bGQoVmEsVmEpO2xkKFZhLFZhKTtsZChWYSxWYSk7a2QoVmEsVmEsVWEpO2xkKFNhLFZhKTtsZChTYSxTYSk7bGQoU2EsU2EpO2xkKFNhLFNhKTtsZChTYSxTYSk7bGQoU2EsU2EpO2xkKFNhLFNhKTtsZChTYSxTYSk7bGQoU2EsU2EpO2xkKFNhLFNhKTtsZChTYSxTYSk7bGQoU2EsU2EpO2xkKFNhLFNhKTtsZChTYSxTYSk7bGQoU2EsU2EpO2xkKFNhLFNhKTtsZChTYSxTYSk7bGQoU2EsU2EpO2xkKFNhLFNhKTtsZChTYSxTYSk7a2QoVmEsU2EsVmEpO2xkKFZhLFZhKTtsZChWYSxWYSk7bGQoVmEsVmEpO2xkKFZhLFZhKTtsZChWYSxWYSk7bGQoVmEsVmEpO2xkKFZhLFZhKTtsZChWYSxWYSk7bGQoVmEsVmEpO2xkKFZhLFZhKTtrZChVYSxWYSxVYSk7bGQoVmEsVWEpO2U9MTtkb3tsZChWYSxWYSk7ZT1lKzF8MH13aGlsZSgoZXwwKSE9NTApO2tkKFZhLFZhLFVhKTtsZChTYSxWYSk7ZT0xO2Rve2xkKFNhLFNhKTtlPWUrMXwwfXdoaWxlKChlfDApIT0xMDApO2tkKFZhLFNhLFZhKTtsZChWYSxWYSk7ZT0xO2Rve2xkKFZhLFZhKTtlPWUrMXwwfXdoaWxlKChlfDApIT01MCk7a2QoVWEsVmEsVWEpO2xkKFVhLFVhKTtsZChVYSxVYSk7bGQoVWEsVWEpO2xkKFVhLFVhKTtsZChVYSxVYSk7a2QoWGEsVWEsVGEpO2tkKFdhLFdhLFhhKTtlYj1jW1dhPj4yXXwwO2ZiPWNbTGE+PjJdfDA7Z2I9Y1tEYT4+Ml18MDtoYj1jW0VhPj4yXXwwO2liPWNbRmE+PjJdfDA7amI9Y1tHYT4+Ml18MDtrYj1jW0hhPj4yXXwwO2xiPWNbSWE+PjJdfDA7bmI9Y1tKYT4+Ml18MDttYj1jW0thPj4yXXwwO2ViPSgoKCgoKCgoKCgoKChtYioxOXwwKSsxNjc3NzIxNj4+MjUpK2ViPj4yNikrZmI+PjI1KStnYj4+MjYpK2hiPj4yNSkraWI+PjI2KStqYj4+MjUpK2tiPj4yNikrbGI+PjI1KStuYj4+MjYpK21iPj4yNSkqMTl8MCkrZWJ8MDtkYj1lYj4+MjY7ZmI9ZGIrZmJ8MDtkYj1lYi0oZGI8PDI2KXwwO2ViPWZiPj4yNTtnYj1lYitnYnwwO2ViPWZiLShlYjw8MjUpfDA7ZmI9Z2I+PjI2O2hiPWZiK2hifDA7ZmI9Z2ItKGZiPDwyNil8MDtnYj1oYj4+MjU7aWI9Z2IraWJ8MDtnYj1oYi0oZ2I8PDI1KXwwO2hiPWliPj4yNjtqYj1oYitqYnwwO2hiPWliLShoYjw8MjYpfDA7aWI9amI+PjI1O2tiPWliK2tifDA7aWI9amItKGliPDwyNSl8MDtqYj1rYj4+MjY7bGI9amIrbGJ8MDtqYj1rYi0oamI8PDI2KXwwO2tiPWxiPj4yNTtuYj1rYituYnwwO2tiPWxiLShrYjw8MjUpfDA7bGI9bmI+PjI2O21iPWxiK21ifDA7bGI9bmItKGxiPDwyNil8MDtuYj1tYiYzMzU1NDQzMTthW2I+PjBdPWRiO2FbYisxPj4wXT1kYj4+Pjg7YVtiKzI+PjBdPWRiPj4+MTY7YVtiKzM+PjBdPWViPDwyfGRiPj4+MjQ7YVtiKzQ+PjBdPWViPj4+NjthW2IrNT4+MF09ZWI+Pj4xNDthW2IrNj4+MF09ZmI8PDN8ZWI+Pj4yMjthW2IrNz4+MF09ZmI+Pj41O2FbYis4Pj4wXT1mYj4+PjEzO2FbYis5Pj4wXT1nYjw8NXxmYj4+PjIxO2FbYisxMD4+MF09Z2I+Pj4zO2FbYisxMT4+MF09Z2I+Pj4xMTthW2IrMTI+PjBdPWhiPDw2fGdiPj4+MTk7YVtiKzEzPj4wXT1oYj4+PjI7YVtiKzE0Pj4wXT1oYj4+PjEwO2FbYisxNT4+MF09aGI+Pj4xODthW2IrMTY+PjBdPWliO2FbYisxNz4+MF09aWI+Pj44O2FbYisxOD4+MF09aWI+Pj4xNjthW2IrMTk+PjBdPWpiPDwxfGliPj4+MjQ7YVtiKzIwPj4wXT1qYj4+Pjc7YVtiKzIxPj4wXT1qYj4+PjE1O2FbYisyMj4+MF09a2I8PDN8amI+Pj4yMzthW2IrMjM+PjBdPWtiPj4+NTthW2IrMjQ+PjBdPWtiPj4+MTM7YVtiKzI1Pj4wXT1sYjw8NHxrYj4+PjIxO2FbYisyNj4+MF09bGI+Pj40O2FbYisyNz4+MF09bGI+Pj4xMjthW2IrMjg+PjBdPWxiPj4+MjB8bmI8PDY7YVtiKzI5Pj4wXT1tYj4+PjI7YVtiKzMwPj4wXT1tYj4+PjEwO2FbYiszMT4+MF09bmI+Pj4xODtpPVlhO3JldHVybn1mdW5jdGlvbiBuZChiLGUsZixnLGgsaixrLGwpe2I9YnwwO2U9ZXwwO2Y9ZnwwO2c9Z3wwO2g9aHwwO2o9anwwO2s9a3wwO2w9bHwwO3ZhciBtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTAsdD0wLHU9MCx2PTAsdz0wLHg9MCx5PTAsej0wLEE9MCxCPTAsRD0wO0Q9aTtCPWk9aSs2MyYtNjQ7aT1pKzExMnwwO3Y9QjtBPUIrNDh8MDtCPUIrMTZ8MDtpZigoZnwwKT09MCYoZ3wwKT09MCl7aT1EO3JldHVybn1uPUI7bT1uKzMyfDA7ZG97YVtuPj4wXT1hW2w+PjBdfDA7bj1uKzF8MDtsPWwrMXwwfXdoaWxlKChufDApPChtfDApKTtzPWg7cD1zO3M9cys0fDA7cz1kW3M+PjBdfGRbcysxPj4wXTw8OHxkW3MrMj4+MF08PDE2fGRbcyszPj4wXTw8MjQ7bz12O2Nbbz4+Ml09ZFtwPj4wXXxkW3ArMT4+MF08PDh8ZFtwKzI+PjBdPDwxNnxkW3ArMz4+MF08PDI0O2Nbbys0Pj4yXT1zO289dis4fDA7YVtvPj4wXT1qO3M9R2QoanwwLGt8MCw4KXwwO3A9dis5fDA7YVtwPj4wXT1zO3M9R2QoanwwLGt8MCwxNil8MDtxPXYrMTB8MDthW3E+PjBdPXM7cz1HZChqfDAsa3wwLDI0KXwwO3I9disxMXwwO2Fbcj4+MF09cztzPXYrMTJ8MDthW3M+PjBdPWs7bj1HZChqfDAsa3wwLDQwKXwwO3Q9disxM3wwO2FbdD4+MF09bjtuPUdkKGp8MCxrfDAsNDgpfDA7dT12KzE0fDA7YVt1Pj4wXT1uO2s9R2QoanwwLGt8MCw1Nil8MDtqPXYrMTV8MDthW2o+PjBdPWs7aWYoZz4+PjA+MHwoZ3wwKT09MCZmPj4+MD42Myl7bj1lO2g9ZjtsPWc7ZG97b2IoQSx2LEIsMzM4MzMpO209MDtkb3thW2IrbT4+MF09YVtBK20+PjBdXmFbbittPj4wXTttPW0rMXwwfXdoaWxlKChtfDApIT02NCk7Zj1jW28+PjJdfDA7Zz0oZiYyNTUpKzF8MDthW28+PjBdPWc7Zz0oZj4+PjgmMjU1KSsoZz4+PjgpfDA7YVtwPj4wXT1nO2c9KGY+Pj4xNiYyNTUpKyhnPj4+OCl8MDthW3E+PjBdPWc7Zz0oZj4+PjI0KSsoZz4+PjgpfDA7YVtyPj4wXT1nO2Y9Y1tzPj4yXXwwO2c9KGYmMjU1KSsoZz4+PjgpfDA7YVtzPj4wXT1nO2c9KGY+Pj44JjI1NSkrKGc+Pj44KXwwO2FbdD4+MF09ZztnPShmPj4+MTYmMjU1KSsoZz4+PjgpfDA7YVt1Pj4wXT1nO2Fbaj4+MF09KGY+Pj4yNCkrKGc+Pj44KTtoPURkKGh8MCxsfDAsLTY0LC0xKXwwO2w9QztiPWIrNjR8MDtuPW4rNjR8MH13aGlsZShsPj4+MD4wfChsfDApPT0wJmg+Pj4wPjYzKTtpZighKChofDApPT0wJihsfDApPT0wKSl7eD1iO3k9aDt6PW47dz04fX1lbHNle3g9Yjt5PWY7ej1lO3c9OH1pZigod3wwKT09OD8ob2IoQSx2LEIsMzM4MzMpLCh5fDApIT0wKTowKXtsPTA7ZG97YVt4K2w+PjBdPWFbQStsPj4wXV5hW3orbD4+MF07bD1sKzF8MH13aGlsZSgobHwwKSE9KHl8MCkpfW49QTttPW4rNjR8MDtkb3thW24+PjBdPTA7bj1uKzF8MH13aGlsZSgobnwwKTwobXwwKSk7bj1CO209biszMnwwO2Rve2Fbbj4+MF09MDtuPW4rMXwwfXdoaWxlKChufDApPChtfDApKTtpPUQ7cmV0dXJufWZ1bmN0aW9uIG9kKCl7dmFyIGE9MDtpZighKGNbNzk3OV18MCkpYT0zMTk2NDtlbHNlIGE9Y1sob2EoKXwwKSs2MD4+Ml18MDtyZXR1cm4gYXwwfWZ1bmN0aW9uIHBkKGEpe2E9YXwwO3ZhciBiPTAsZD0wO2Q9aTtiPWk9aSs2MyYtNjQ7aT1pKzE2fDA7Y1tiPj4yXT1jW2ErNjA+PjJdO2E9cGEoNixifDApfDA7aWYoYT4+PjA+NDI5NDk2MzIwMCl7aWYoIShjWzc5NzldfDApKWI9MzE5NjQ7ZWxzZSBiPWNbKG9hKCl8MCkrNjA+PjJdfDA7Y1tiPj4yXT0wLWE7YT0tMX1pPWQ7cmV0dXJuIGF8MH1mdW5jdGlvbiBxZChhLGIsZCl7YT1hfDA7Yj1ifDA7ZD1kfDA7dmFyIGU9MCxmPTAsZz0wLGg9MDtnPWk7ZT1pPWkrNjMmLTY0O2k9aSszMnwwO2g9ZTtlPWUrMjB8MDtjW2g+PjJdPWNbYSs2MD4+Ml07Y1toKzQ+PjJdPTA7Y1toKzg+PjJdPWI7Y1toKzEyPj4yXT1lO2NbaCsxNj4+Ml09ZDtiPXlhKDE0MCxofDApfDA7aWYoYj4+PjA8PTQyOTQ5NjMyMDApaWYoKGJ8MCk8MClmPTc7ZWxzZSBhPWNbZT4+Ml18MDtlbHNle2lmKCEoY1s3OTc5XXwwKSlhPTMxOTY0O2Vsc2UgYT1jWyhvYSgpfDApKzYwPj4yXXwwO2NbYT4+Ml09MC1iO2Y9N31pZigoZnwwKT09Nyl7Y1tlPj4yXT0tMTthPS0xfWk9ZztyZXR1cm4gYXwwfWZ1bmN0aW9uIHJkKGEsYixkKXthPWF8MDtiPWJ8MDtkPWR8MDt2YXIgZT0wLGY9MCxnPTAsaD0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTA7cT1pO2s9aT1pKzYzJi02NDtpPWkrNDh8MDtuPWsrMTZ8MDttPWs7az1rKzMyfDA7bz1hKzI4fDA7Zz1jW28+PjJdfDA7Y1trPj4yXT1nO3A9YSsyMHwwO2c9KGNbcD4+Ml18MCktZ3wwO2Nbays0Pj4yXT1nO2Nbays4Pj4yXT1iO2NbaysxMj4+Ml09ZDtqPWErNjB8MDtsPWErNDR8MDtmPTI7Zz1nK2R8MDt3aGlsZSgxKXtpZighKGNbNzk3OV18MCkpe2Nbbj4+Ml09Y1tqPj4yXTtjW24rND4+Ml09aztjW24rOD4+Ml09ZjtiPUFhKDE0NixufDApfDA7aWYoYj4+PjA+NDI5NDk2MzIwMCl7aWYoIShjWzc5NzldfDApKWU9MzE5NjQ7ZWxzZSBlPWNbKG9hKCl8MCkrNjA+PjJdfDA7Y1tlPj4yXT0wLWI7Yj0tMX19ZWxzZXt1YSgxOCxhfDApO2NbbT4+Ml09Y1tqPj4yXTtjW20rND4+Ml09aztjW20rOD4+Ml09ZjtiPUFhKDE0NixtfDApfDA7aWYoYj4+PjA+NDI5NDk2MzIwMCl7aWYoIShjWzc5NzldfDApKWU9MzE5NjQ7ZWxzZSBlPWNbKG9hKCl8MCkrNjA+PjJdfDA7Y1tlPj4yXT0wLWI7Yj0tMX1sYSgwKX1pZigoZ3wwKT09KGJ8MCkpe2I9MTM7YnJlYWt9aWYoKGJ8MCk8MCl7Yj0xNTticmVha31nPWctYnwwO2U9Y1trKzQ+PjJdfDA7aWYoYj4+PjA8PWU+Pj4wKWlmKChmfDApPT0yKXtjW28+PjJdPShjW28+PjJdfDApK2I7aD1lO2U9aztmPTJ9ZWxzZXtoPWU7ZT1rfWVsc2V7aD1jW2w+PjJdfDA7Y1tvPj4yXT1oO2NbcD4+Ml09aDtoPWNbaysxMj4+Ml18MDtiPWItZXwwO2U9ays4fDA7Zj1mKy0xfDB9Y1tlPj4yXT0oY1tlPj4yXXwwKStiO2NbZSs0Pj4yXT1oLWI7az1lfWlmKChifDApPT0xMyl7bj1jW2w+PjJdfDA7Y1thKzE2Pj4yXT1uKyhjW2ErNDg+PjJdfDApO2E9bjtjW28+PjJdPWE7Y1twPj4yXT1hfWVsc2UgaWYoKGJ8MCk9PTE1KXtjW2ErMTY+PjJdPTA7Y1tvPj4yXT0wO2NbcD4+Ml09MDtjW2E+PjJdPWNbYT4+Ml18MzI7aWYoKGZ8MCk9PTIpZD0wO2Vsc2UgZD1kLShjW2srND4+Ml18MCl8MH1pPXE7cmV0dXJuIGR8MH1mdW5jdGlvbiBzZChiLGQsZSl7Yj1ifDA7ZD1kfDA7ZT1lfDA7dmFyIGY9MCxnPTAsaD0wO2c9aTtoPWk9aSs2MyYtNjQ7aT1pKzgwfDA7Zj1oO2NbYiszNj4+Ml09MjA7aWYoKGNbYj4+Ml0mNjR8MCk9PTA/KGNbZj4+Ml09Y1tiKzYwPj4yXSxjW2YrND4+Ml09MjE1MDUsY1tmKzg+PjJdPWgrMTIsKHdhKDU0LGZ8MCl8MCkhPTApOjApYVtiKzc1Pj4wXT0tMTtoPXJkKGIsZCxlKXwwO2k9ZztyZXR1cm4gaHwwfWZ1bmN0aW9uIHRkKGEpe2E9YXwwO3ZhciBiPTA7aWYoIWEpe2lmKCEoY1s3OTkwXXwwKSlhPTA7ZWxzZSBhPXRkKGNbNzk5MF18MCl8MDttYSgzMTk0NCk7Yj1jWzc5ODVdfDA7aWYoYilkb3tpZigoY1tiKzIwPj4yXXwwKT4+PjA+KGNbYisyOD4+Ml18MCk+Pj4wKWE9eGQoYil8MHxhO2I9Y1tiKzU2Pj4yXXwwfXdoaWxlKChifDApIT0wKTt4YSgzMTk0NCl9ZWxzZSBhPXhkKGEpfDA7cmV0dXJuIGF8MH1mdW5jdGlvbiB1ZChiLGQpe2I9YnwwO2Q9ZHwwO3ZhciBlPTAsZj0wLGc9MDtmPWQmMjU1O2E6ZG8gaWYoIWYpYj1iKyh2ZChiKXwwKXwwO2Vsc2V7aWYoYiYzKXtlPWQmMjU1O2Rve2c9YVtiPj4wXXwwO2lmKGc8PDI0Pj4yND09MD8xOmc8PDI0Pj4yND09ZTw8MjQ+PjI0KWJyZWFrIGE7Yj1iKzF8MH13aGlsZSgoYiYzfDApIT0wKX1mPV8oZiwxNjg0MzAwOSl8MDtlPWNbYj4+Ml18MDtiOmRvIGlmKCEoKGUmLTIxMzkwNjIxNDReLTIxMzkwNjIxNDQpJmUrLTE2ODQzMDA5KSlkb3tnPWVeZjtpZigoZyYtMjEzOTA2MjE0NF4tMjEzOTA2MjE0NCkmZystMTY4NDMwMDkpYnJlYWsgYjtiPWIrNHwwO2U9Y1tiPj4yXXwwfXdoaWxlKCgoZSYtMjEzOTA2MjE0NF4tMjEzOTA2MjE0NCkmZSstMTY4NDMwMDl8MCk9PTApO3doaWxlKDApO2U9ZCYyNTU7d2hpbGUoMSl7Zz1hW2I+PjBdfDA7aWYoZzw8MjQ+PjI0PT0wPzE6Zzw8MjQ+PjI0PT1lPDwyND4+MjQpYnJlYWs7ZWxzZSBiPWIrMXwwfX13aGlsZSgwKTtyZXR1cm4gYnwwfWZ1bmN0aW9uIHZkKGIpe2I9YnwwO3ZhciBkPTAsZT0wLGY9MDtmPWI7YTpkbyBpZighKGYmMykpZT00O2Vsc2V7ZD1iO2I9Zjt3aGlsZSgxKXtpZighKGFbZD4+MF18MCkpYnJlYWsgYTtkPWQrMXwwO2I9ZDtpZighKGImMykpe2I9ZDtlPTQ7YnJlYWt9fX13aGlsZSgwKTtpZigoZXwwKT09NCl7d2hpbGUoMSl7ZD1jW2I+PjJdfDA7aWYoISgoZCYtMjEzOTA2MjE0NF4tMjEzOTA2MjE0NCkmZCstMTY4NDMwMDkpKWI9Yis0fDA7ZWxzZSBicmVha31pZigoZCYyNTUpPDwyND4+MjQpZG8gYj1iKzF8MDt3aGlsZSgoYVtiPj4wXXwwKSE9MCl9cmV0dXJuIGItZnwwfWZ1bmN0aW9uIHdkKGEpe2E9YXwwO3JldHVybn1mdW5jdGlvbiB4ZChhKXthPWF8MDt2YXIgYj0wLGQ9MCxlPTAsZj0wLGc9MCxoPTA7Yj1hKzIwfDA7Zz1hKzI4fDA7aWYoKGNbYj4+Ml18MCk+Pj4wPihjW2c+PjJdfDApPj4+MD8oRmFbY1thKzM2Pj4yXSYzMV0oYSwwLDApfDAsKGNbYj4+Ml18MCk9PTApOjApYj0tMTtlbHNle2g9YSs0fDA7ZD1jW2g+PjJdfDA7ZT1hKzh8MDtmPWNbZT4+Ml18MDtpZihkPj4+MDxmPj4+MClGYVtjW2ErNDA+PjJdJjMxXShhLGQtZnwwLDEpfDA7Y1thKzE2Pj4yXT0wO2NbZz4+Ml09MDtjW2I+PjJdPTA7Y1tlPj4yXT0wO2NbaD4+Ml09MDtiPTB9cmV0dXJuIGJ8MH1cbmZ1bmN0aW9uIEhiKGEsYil7YT1hfDA7Yj1ifDA7dmFyIGU9MCxmPTAsZz0wLGg9MCxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTAsdD0wLHU9MCx2PTAsdz0wLHg9MCx5PTAsej0wLEE9MCxCPTAsRD0wLEU9MCxGPTAsRz0wLEg9MCxJPTAsSj0wLEs9MCxMPTAsTT0wO2g9aTtnPWk9aSs2MyYtNjQ7aT1pKzY0MHwwO2U9MDtkb3tqPWIrKGU8PDMpfDA7bz1kW2orNz4+MF18MDtwPUhkKGRbais2Pj4wXXwwfDAsMCw4KXwwO2Y9QztuPUhkKGRbais1Pj4wXXwwfDAsMCwxNil8MDtmPWZ8QzttPUhkKGRbais0Pj4wXXwwfDAsMCwyNCl8MDtmPWZ8Q3woZFtqKzM+PjBdfDApO2w9SGQoZFtqKzI+PjBdfDB8MCwwLDQwKXwwO2Y9ZnxDO2s9SGQoZFtqKzE+PjBdfDB8MCwwLDQ4KXwwO2s9RGQocHxvfG58bXxsfDAsZnwwLGt8MCxDfDApfDA7Zj1DO2o9SGQoZFtqPj4wXXwwfDAsMCw1Nil8MDtqPURkKGt8MCxmfDAsanwwLEN8MCl8MDtmPWcrKGU8PDMpfDA7Y1tmPj4yXT1qO2NbZis0Pj4yXT1DO2U9ZSsxfDB9d2hpbGUoKGV8MCkhPTE2KTtlPWc7Yj1jW2U+PjJdfDA7ZT1jW2UrND4+Ml18MDtmPTE2O2Rve3M9ZysoZistMjw8Myl8MDt3PWNbcz4+Ml18MDtzPWNbcys0Pj4yXXwwO3I9R2Qod3wwLHN8MCwxOSl8MDtqPUM7cT1IZCh3fDAsc3wwLDQ1KXwwO2o9anxDO3U9R2Qod3wwLHN8MCw2MSl8MDt2PUM7dD1IZCh3fDAsc3wwLDMpfDA7dj12fEM7cz1HZCh3fDAsc3wwLDYpfDA7aj12XkNeajt2PWcrKGYrLTc8PDMpfDA7dz1jW3Y+PjJdfDA7dj1jW3YrND4+Ml18MDtuPWcrKGYrLTE1PDwzKXwwO3k9YjtiPWNbbj4+Ml18MDt4PWU7ZT1jW24rND4+Ml18MDtuPUdkKGJ8MCxlfDAsMSl8MDtvPUM7cD1IZChifDAsZXwwLDYzKXwwO289b3xDO2s9R2QoYnwwLGV8MCw4KXwwO3o9QztsPUhkKGJ8MCxlfDAsNTYpfDA7ej16fEM7bT1HZChifDAsZXwwLDcpfDA7bz16XkNebzt2PURkKHl8MCx4fDAsd3wwLHZ8MCl8MDtqPURkKHZ8MCxDfDAsKHV8dClec14ocnxxKXwwLGp8MCl8MDtvPURkKGp8MCxDfDAsKGt8bClebV4obnxwKXwwLG98MCl8MDtwPWcrKGY8PDMpfDA7Y1twPj4yXT1vO2NbcCs0Pj4yXT1DO2Y9ZisxfDB9d2hpbGUoKGZ8MCkhPTgwKTtLPWE7ST1jW0s+PjJdfDA7Sz1jW0srND4+Ml18MDtlPWErOHwwO0E9ZTtCPWNbQT4+Ml18MDtBPWNbQSs0Pj4yXXwwO2s9YSsxNnwwO2Y9aztiPWNbZj4+Ml18MDtmPWNbZis0Pj4yXXwwO249YSsyNHwwO2w9bjtqPWNbbD4+Ml18MDtsPWNbbCs0Pj4yXXwwO3E9YSszMnwwO209cTtwPWNbbT4+Ml18MDttPWNbbSs0Pj4yXXwwO3Q9YSs0MHwwO289dDtzPWNbbz4+Ml18MDtvPWNbbys0Pj4yXXwwO3c9YSs0OHwwO3I9dzt2PWNbcj4+Ml18MDtyPWNbcis0Pj4yXXwwO3o9YSs1NnwwO3U9ejt5PWNbdT4+Ml18MDt1PWNbdSs0Pj4yXXwwO0g9R2QocHwwLG18MCwxNCl8MDtEPUM7eD1IZChwfDAsbXwwLDUwKXwwO0Q9RHxDO009R2QocHwwLG18MCwxOCl8MDtFPUM7TD1IZChwfDAsbXwwLDQ2KXwwO0U9RF4oRXxDKTtEPUdkKHB8MCxtfDAsNDEpfDA7Rz1DO0o9SGQocHwwLG18MCwyMyl8MDtHPUVeKEd8Qyk7RT1nO0Y9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7dT1EZCh5fDAsdXwwLC02ODUxOTk4MzgsMTExNjM1MjQwOCl8MDtFPURkKHV8MCxDfDAsRnwwLEV8MCl8MDtHPURkKEV8MCxDfDAsKEh8eCleKE18TCleKER8Sil8MCxHfDApfDA7Rz1EZChHfDAsQ3wwLCh2XnMpJnBednwwLChyXm8pJm1ecnwwKXwwO0o9QztEPUdkKEl8MCxLfDAsMjgpfDA7TD1DO009SGQoSXwwLEt8MCwzNil8MDtMPUx8Qzt4PUdkKEl8MCxLfDAsMzQpfDA7SD1DO0U9SGQoSXwwLEt8MCwzMCl8MDtIPUxeKEh8Qyk7TD1HZChJfDAsS3wwLDM5KXwwO0Y9Qzt1PUhkKEl8MCxLfDAsMjUpfDA7Rj1EZCgoYnxCKSZJfGImQnwwLChmfEEpJkt8ZiZBfDAsKER8TSleKHh8RSleKEx8dSl8MCxIXihGfEMpfDApfDA7SD1DO2w9RGQoanwwLGx8MCxHfDAsSnwwKXwwO2o9QztKPURkKEZ8MCxIfDAsR3wwLEp8MCl8MDtHPUM7SD1HZChsfDAsanwwLDE0KXwwO0Y9Qzt1PUhkKGx8MCxqfDAsNTApfDA7Rj1GfEM7TD1HZChsfDAsanwwLDE4KXwwO0U9Qzt4PUhkKGx8MCxqfDAsNDYpfDA7RT1GXihFfEMpO0Y9R2QobHwwLGp8MCw0MSl8MDtNPUM7RD1IZChsfDAsanwwLDIzKXwwO009RV4oTXxDKTtFPWcrOHwwO3k9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7cj1EZCh2fDAscnwwLDYwMjg5MTcyNSwxODk5NDQ3NDQxKXwwO0U9RGQocnwwLEN8MCx5fDAsRXwwKXwwO009RGQoRXwwLEN8MCwoSHx1KV4oTHx4KV4oRnxEKXwwLE18MCl8MDtNPURkKE18MCxDfDAsKHNecCkmbF5zfDAsKG9ebSkmal5vfDApfDA7RD1DO0Y9R2QoSnwwLEd8MCwyOCl8MDt4PUM7TD1IZChKfDAsR3wwLDM2KXwwO3g9eHxDO3U9R2QoSnwwLEd8MCwzNCl8MDtIPUM7RT1IZChKfDAsR3wwLDMwKXwwO0g9eF4oSHxDKTt4PUdkKEp8MCxHfDAsMzkpfDA7eT1DO3I9SGQoSnwwLEd8MCwyNSl8MDt5PURkKChCfEkpJkp8QiZJfDAsKEF8SykmR3xBJkt8MCwoRnxMKV4odXxFKV4oeHxyKXwwLEheKHl8Qyl8MCl8MDtIPUM7Zj1EZChifDAsZnwwLE18MCxEfDApfDA7Yj1DO0Q9RGQoeXwwLEh8MCxNfDAsRHwwKXwwO009QztIPUdkKGZ8MCxifDAsMTQpfDA7eT1DO3I9SGQoZnwwLGJ8MCw1MCl8MDt5PXl8Qzt4PUdkKGZ8MCxifDAsMTgpfDA7RT1DO3U9SGQoZnwwLGJ8MCw0Nil8MDtFPXleKEV8Qyk7eT1HZChmfDAsYnwwLDQxKXwwO0w9QztGPUhkKGZ8MCxifDAsMjMpfDA7TD1FXihMfEMpO0U9ZysxNnwwO3Y9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7bz1EZChzfDAsb3wwLC0zMzA0ODI4OTcsLTEyNDU2NDM4MjUpfDA7RT1EZChvfDAsQ3wwLHZ8MCxFfDApfDA7TD1EZChFfDAsQ3wwLChIfHIpXih4fHUpXih5fEYpfDAsTHwwKXwwO0w9RGQoTHwwLEN8MCwocF5sKSZmXnB8MCwobV5qKSZiXm18MCl8MDtGPUM7eT1HZChEfDAsTXwwLDI4KXwwO3U9Qzt4PUhkKER8MCxNfDAsMzYpfDA7dT11fEM7cj1HZChEfDAsTXwwLDM0KXwwO0g9QztFPUhkKER8MCxNfDAsMzApfDA7SD11XihIfEMpO3U9R2QoRHwwLE18MCwzOSl8MDt2PUM7bz1IZChEfDAsTXwwLDI1KXwwO3Y9RGQoKEl8SikmRHxJJkp8MCwoS3xHKSZNfEsmR3wwLCh5fHgpXihyfEUpXih1fG8pfDAsSF4odnxDKXwwKXwwO0g9QztBPURkKEJ8MCxBfDAsTHwwLEZ8MCl8MDtCPUM7Rj1EZCh2fDAsSHwwLEx8MCxGfDApfDA7TD1DO0g9R2QoQXwwLEJ8MCwxNCl8MDt2PUM7bz1IZChBfDAsQnwwLDUwKXwwO3Y9dnxDO3U9R2QoQXwwLEJ8MCwxOCl8MDtFPUM7cj1IZChBfDAsQnwwLDQ2KXwwO0U9dl4oRXxDKTt2PUdkKEF8MCxCfDAsNDEpfDA7eD1DO3k9SGQoQXwwLEJ8MCwyMyl8MDt4PUVeKHh8Qyk7RT1nKzI0fDA7cz1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDttPURkKHB8MCxtfDAsLTIxMjE2NzE3NDgsLTM3Mzk1NzcyMyl8MDtFPURkKG18MCxDfDAsc3wwLEV8MCl8MDt4PURkKEV8MCxDfDAsKEh8byleKHV8cileKHZ8eSl8MCx4fDApfDA7eD1EZCh4fDAsQ3wwLChsXmYpJkFebHwwLChqXmIpJkJeanwwKXwwO3k9Qzt2PUdkKEZ8MCxMfDAsMjgpfDA7cj1DO3U9SGQoRnwwLEx8MCwzNil8MDtyPXJ8QztvPUdkKEZ8MCxMfDAsMzQpfDA7SD1DO0U9SGQoRnwwLEx8MCwzMCl8MDtIPXJeKEh8Qyk7cj1HZChGfDAsTHwwLDM5KXwwO3M9QzttPUhkKEZ8MCxMfDAsMjUpfDA7cz1EZCgoSnxEKSZGfEomRHwwLChHfE0pJkx8RyZNfDAsKHZ8dSleKG98RSleKHJ8bSl8MCxIXihzfEMpfDApfDA7SD1DO0s9RGQoSXwwLEt8MCx4fDAseXwwKXwwO0k9Qzt5PURkKHN8MCxIfDAseHwwLHl8MCl8MDt4PUM7SD1HZChLfDAsSXwwLDE0KXwwO3M9QzttPUhkKEt8MCxJfDAsNTApfDA7cz1zfEM7cj1HZChLfDAsSXwwLDE4KXwwO0U9QztvPUhkKEt8MCxJfDAsNDYpfDA7RT1zXihFfEMpO3M9R2QoS3wwLEl8MCw0MSl8MDt1PUM7dj1IZChLfDAsSXwwLDIzKXwwO3U9RV4odXxDKTtFPWcrMzJ8MDtwPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO2o9RGQobHwwLGp8MCwtMjEzMzM4ODI0LDk2MTk4NzE2Myl8MDtFPURkKGp8MCxDfDAscHwwLEV8MCl8MDt1PURkKEV8MCxDfDAsKEh8bSleKHJ8byleKHN8dil8MCx1fDApfDA7dT1EZCh1fDAsQ3wwLChmXkEpJkteZnwwLChiXkIpJkleYnwwKXwwO3Y9QztzPUdkKHl8MCx4fDAsMjgpfDA7bz1DO3I9SGQoeXwwLHh8MCwzNil8MDtvPW98QzttPUdkKHl8MCx4fDAsMzQpfDA7SD1DO0U9SGQoeXwwLHh8MCwzMCl8MDtIPW9eKEh8Qyk7bz1HZCh5fDAseHwwLDM5KXwwO3A9QztqPUhkKHl8MCx4fDAsMjUpfDA7cD1EZCgoRHxGKSZ5fEQmRnwwLChNfEwpJnh8TSZMfDAsKHN8cileKG18RSleKG98ail8MCxIXihwfEMpfDApfDA7SD1DO0c9RGQoSnwwLEd8MCx1fDAsdnwwKXwwO0o9Qzt2PURkKHB8MCxIfDAsdXwwLHZ8MCl8MDt1PUM7SD1HZChHfDAsSnwwLDE0KXwwO3A9QztqPUhkKEd8MCxKfDAsNTApfDA7cD1wfEM7bz1HZChHfDAsSnwwLDE4KXwwO0U9QzttPUhkKEd8MCxKfDAsNDYpfDA7RT1wXihFfEMpO3A9R2QoR3wwLEp8MCw0MSl8MDtyPUM7cz1IZChHfDAsSnwwLDIzKXwwO3I9RV4ocnxDKTtFPWcrNDB8MDtsPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO2I9RGQoZnwwLGJ8MCwtMTI0MTEzMzAzMSwxNTA4OTcwOTkzKXwwO0U9RGQoYnwwLEN8MCxsfDAsRXwwKXwwO3I9RGQoRXwwLEN8MCwoSHxqKV4ob3xtKV4ocHxzKXwwLHJ8MCl8MDtyPURkKHJ8MCxDfDAsKEFeSykmR15BfDAsKEJeSSkmSl5CfDApfDA7cz1DO3A9R2QodnwwLHV8MCwyOCl8MDttPUM7bz1IZCh2fDAsdXwwLDM2KXwwO209bXxDO2o9R2QodnwwLHV8MCwzNCl8MDtIPUM7RT1IZCh2fDAsdXwwLDMwKXwwO0g9bV4oSHxDKTttPUdkKHZ8MCx1fDAsMzkpfDA7bD1DO2I9SGQodnwwLHV8MCwyNSl8MDtsPURkKChGfHkpJnZ8RiZ5fDAsKEx8eCkmdXxMJnh8MCwocHxvKV4oanxFKV4obXxiKXwwLEheKGx8Qyl8MCl8MDtIPUM7TT1EZChEfDAsTXwwLHJ8MCxzfDApfDA7RD1DO3M9RGQobHwwLEh8MCxyfDAsc3wwKXwwO3I9QztIPUdkKE18MCxEfDAsMTQpfDA7bD1DO2I9SGQoTXwwLER8MCw1MCl8MDtsPWx8QzttPUdkKE18MCxEfDAsMTgpfDA7RT1DO2o9SGQoTXwwLER8MCw0Nil8MDtFPWxeKEV8Qyk7bD1HZChNfDAsRHwwLDQxKXwwO289QztwPUhkKE18MCxEfDAsMjMpfDA7bz1FXihvfEMpO0U9Zys0OHwwO2Y9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7Qj1EZChBfDAsQnwwLC0xMzU3Mjk1NzE3LC0xODQxMzMxNTQ4KXwwO0U9RGQoQnwwLEN8MCxmfDAsRXwwKXwwO289RGQoRXwwLEN8MCwoSHxiKV4obXxqKV4obHxwKXwwLG98MCl8MDtvPURkKG98MCxDfDAsKEteRykmTV5LfDAsKEleSikmRF5JfDApfDA7cD1DO2w9R2Qoc3wwLHJ8MCwyOCl8MDtqPUM7bT1IZChzfDAscnwwLDM2KXwwO2o9anxDO2I9R2Qoc3wwLHJ8MCwzNCl8MDtIPUM7RT1IZChzfDAscnwwLDMwKXwwO0g9al4oSHxDKTtqPUdkKHN8MCxyfDAsMzkpfDA7Zj1DO0I9SGQoc3wwLHJ8MCwyNSl8MDtmPURkKCh5fHYpJnN8eSZ2fDAsKHh8dSkmcnx4JnV8MCwobHxtKV4oYnxFKV4oanxCKXwwLEheKGZ8Qyl8MCl8MDtIPUM7TD1EZChGfDAsTHwwLG98MCxwfDApfDA7Rj1DO3A9RGQoZnwwLEh8MCxvfDAscHwwKXwwO289QztIPUdkKEx8MCxGfDAsMTQpfDA7Zj1DO0I9SGQoTHwwLEZ8MCw1MCl8MDtmPWZ8QztqPUdkKEx8MCxGfDAsMTgpfDA7RT1DO2I9SGQoTHwwLEZ8MCw0Nil8MDtFPWZeKEV8Qyk7Zj1HZChMfDAsRnwwLDQxKXwwO209QztsPUhkKEx8MCxGfDAsMjMpfDA7bT1FXihtfEMpO0U9Zys1NnwwO0E9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7ST1EZChLfDAsSXwwLC02MzAzNTc3MzYsLTE0MjQyMDQwNzUpfDA7RT1EZChJfDAsQ3wwLEF8MCxFfDApfDA7bT1EZChFfDAsQ3wwLChIfEIpXihqfGIpXihmfGwpfDAsbXwwKXwwO209RGQobXwwLEN8MCwoR15NKSZMXkd8MCwoSl5EKSZGXkp8MCl8MDtsPUM7Zj1HZChwfDAsb3wwLDI4KXwwO2I9QztqPUhkKHB8MCxvfDAsMzYpfDA7Yj1ifEM7Qj1HZChwfDAsb3wwLDM0KXwwO0g9QztFPUhkKHB8MCxvfDAsMzApfDA7SD1iXihIfEMpO2I9R2QocHwwLG98MCwzOSl8MDtBPUM7ST1IZChwfDAsb3wwLDI1KXwwO0E9RGQoKHZ8cykmcHx2JnN8MCwodXxyKSZvfHUmcnwwLChmfGopXihCfEUpXihifEkpfDAsSF4oQXxDKXwwKXwwO0g9Qzt4PURkKHl8MCx4fDAsbXwwLGx8MCl8MDt5PUM7bD1EZChBfDAsSHwwLG18MCxsfDApfDA7bT1DO0g9R2QoeHwwLHl8MCwxNCl8MDtBPUM7ST1IZCh4fDAseXwwLDUwKXwwO0E9QXxDO2I9R2QoeHwwLHl8MCwxOCl8MDtFPUM7Qj1IZCh4fDAseXwwLDQ2KXwwO0U9QV4oRXxDKTtBPUdkKHh8MCx5fDAsNDEpfDA7aj1DO2Y9SGQoeHwwLHl8MCwyMyl8MDtqPUVeKGp8Qyk7RT1nKzY0fDA7Sz1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtKPURkKEd8MCxKfDAsLTE1NjAwODM5MDIsLTY3MDU4NjIxNil8MDtFPURkKEp8MCxDfDAsS3wwLEV8MCl8MDtqPURkKEV8MCxDfDAsKEh8SSleKGJ8QileKEF8Zil8MCxqfDApfDA7aj1EZChqfDAsQ3wwLChNXkwpJnheTXwwLChEXkYpJnleRHwwKXwwO2Y9QztBPUdkKGx8MCxtfDAsMjgpfDA7Qj1DO2I9SGQobHwwLG18MCwzNil8MDtCPUJ8QztJPUdkKGx8MCxtfDAsMzQpfDA7SD1DO0U9SGQobHwwLG18MCwzMCl8MDtIPUJeKEh8Qyk7Qj1HZChsfDAsbXwwLDM5KXwwO0s9QztKPUhkKGx8MCxtfDAsMjUpfDA7Sz1EZCgoc3xwKSZsfHMmcHwwLChyfG8pJm18ciZvfDAsKEF8YileKEl8RSleKEJ8Sil8MCxIXihLfEMpfDApfDA7SD1DO3U9RGQodnwwLHV8MCxqfDAsZnwwKXwwO3Y9QztmPURkKEt8MCxIfDAsanwwLGZ8MCl8MDtqPUM7SD1HZCh1fDAsdnwwLDE0KXwwO0s9QztKPUhkKHV8MCx2fDAsNTApfDA7Sz1LfEM7Qj1HZCh1fDAsdnwwLDE4KXwwO0U9QztJPUhkKHV8MCx2fDAsNDYpfDA7RT1LXihFfEMpO0s9R2QodXwwLHZ8MCw0MSl8MDtiPUM7QT1IZCh1fDAsdnwwLDIzKXwwO2I9RV4oYnxDKTtFPWcrNzJ8MDtHPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO0Q9RGQoTXwwLER8MCwxMTY0OTk2NTQyLDMxMDU5ODQwMSl8MDtFPURkKER8MCxDfDAsR3wwLEV8MCl8MDtiPURkKEV8MCxDfDAsKEh8SileKEJ8SSleKEt8QSl8MCxifDApfDA7Yj1EZChifDAsQ3wwLChMXngpJnVeTHwwLChGXnkpJnZeRnwwKXwwO0E9QztLPUdkKGZ8MCxqfDAsMjgpfDA7ST1DO0I9SGQoZnwwLGp8MCwzNil8MDtJPUl8QztKPUdkKGZ8MCxqfDAsMzQpfDA7SD1DO0U9SGQoZnwwLGp8MCwzMCl8MDtIPUleKEh8Qyk7ST1HZChmfDAsanwwLDM5KXwwO0c9QztEPUhkKGZ8MCxqfDAsMjUpfDA7Rz1EZCgocHxsKSZmfHAmbHwwLChvfG0pJmp8byZtfDAsKEt8QileKEp8RSleKEl8RCl8MCxIXihHfEMpfDApfDA7SD1DO3I9RGQoc3wwLHJ8MCxifDAsQXwwKXwwO3M9QztBPURkKEd8MCxIfDAsYnwwLEF8MCl8MDtiPUM7SD1HZChyfDAsc3wwLDE0KXwwO0c9QztEPUhkKHJ8MCxzfDAsNTApfDA7Rz1HfEM7ST1HZChyfDAsc3wwLDE4KXwwO0U9QztKPUhkKHJ8MCxzfDAsNDYpfDA7RT1HXihFfEMpO0c9R2QocnwwLHN8MCw0MSl8MDtCPUM7Sz1IZChyfDAsc3wwLDIzKXwwO0I9RV4oQnxDKTtFPWcrODB8MDtNPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO0Y9RGQoTHwwLEZ8MCwxMzIzNjEwNzY0LDYwNzIyNTI3OCl8MDtFPURkKEZ8MCxDfDAsTXwwLEV8MCl8MDtCPURkKEV8MCxDfDAsKEh8RCleKEl8SileKEd8Syl8MCxCfDApfDA7Qj1EZChCfDAsQ3wwLCh4XnUpJnJeeHwwLCh5XnYpJnNeeXwwKXwwO0s9QztHPUdkKEF8MCxifDAsMjgpfDA7Sj1DO0k9SGQoQXwwLGJ8MCwzNil8MDtKPUp8QztEPUdkKEF8MCxifDAsMzQpfDA7SD1DO0U9SGQoQXwwLGJ8MCwzMCl8MDtIPUpeKEh8Qyk7Sj1HZChBfDAsYnwwLDM5KXwwO009QztGPUhkKEF8MCxifDAsMjUpfDA7TT1EZCgobHxmKSZBfGwmZnwwLChtfGopJmJ8bSZqfDAsKEd8SSleKER8RSleKEp8Ril8MCxIXihNfEMpfDApfDA7SD1DO289RGQocHwwLG98MCxCfDAsS3wwKXwwO3A9QztLPURkKE18MCxIfDAsQnwwLEt8MCl8MDtCPUM7SD1HZChvfDAscHwwLDE0KXwwO009QztGPUhkKG98MCxwfDAsNTApfDA7TT1NfEM7Sj1HZChvfDAscHwwLDE4KXwwO0U9QztEPUhkKG98MCxwfDAsNDYpfDA7RT1NXihFfEMpO009R2Qob3wwLHB8MCw0MSl8MDtJPUM7Rz1IZChvfDAscHwwLDIzKXwwO0k9RV4oSXxDKTtFPWcrODh8MDtMPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO3k9RGQoeHwwLHl8MCwtNzA0NjYyMzAyLDE0MjY4ODE5ODcpfDA7RT1EZCh5fDAsQ3wwLEx8MCxFfDApfDA7ST1EZChFfDAsQ3wwLChIfEYpXihKfEQpXihNfEcpfDAsSXwwKXwwO0k9RGQoSXwwLEN8MCwodV5yKSZvXnV8MCwodl5zKSZwXnZ8MCl8MDtHPUM7TT1HZChLfDAsQnwwLDI4KXwwO0Q9QztKPUhkKEt8MCxCfDAsMzYpfDA7RD1EfEM7Rj1HZChLfDAsQnwwLDM0KXwwO0g9QztFPUhkKEt8MCxCfDAsMzApfDA7SD1EXihIfEMpO0Q9R2QoS3wwLEJ8MCwzOSl8MDtMPUM7eT1IZChLfDAsQnwwLDI1KXwwO0w9RGQoKGZ8QSkmS3xmJkF8MCwoanxiKSZCfGomYnwwLChNfEopXihGfEUpXihEfHkpfDAsSF4oTHxDKXwwKXwwO0g9QzttPURkKGx8MCxtfDAsSXwwLEd8MCl8MDtsPUM7Rz1EZChMfDAsSHwwLEl8MCxHfDApfDA7ST1DO0g9R2QobXwwLGx8MCwxNCl8MDtMPUM7eT1IZChtfDAsbHwwLDUwKXwwO0w9THxDO0Q9R2QobXwwLGx8MCwxOCl8MDtFPUM7Rj1IZChtfDAsbHwwLDQ2KXwwO0U9TF4oRXxDKTtMPUdkKG18MCxsfDAsNDEpfDA7Sj1DO009SGQobXwwLGx8MCwyMyl8MDtKPUVeKEp8Qyk7RT1nKzk2fDA7eD1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDt2PURkKHV8MCx2fDAsLTIyNjc4NDkxMywxOTI1MDc4Mzg4KXwwO0U9RGQodnwwLEN8MCx4fDAsRXwwKXwwO0o9RGQoRXwwLEN8MCwoSHx5KV4oRHxGKV4oTHxNKXwwLEp8MCl8MDtKPURkKEp8MCxDfDAsKHJebykmbV5yfDAsKHNecCkmbF5zfDApfDA7TT1DO0w9R2QoR3wwLEl8MCwyOCl8MDtGPUM7RD1IZChHfDAsSXwwLDM2KXwwO0Y9RnxDO3k9R2QoR3wwLEl8MCwzNCl8MDtIPUM7RT1IZChHfDAsSXwwLDMwKXwwO0g9Rl4oSHxDKTtGPUdkKEd8MCxJfDAsMzkpfDA7eD1DO3Y9SGQoR3wwLEl8MCwyNSl8MDt4PURkKChBfEspJkd8QSZLfDAsKGJ8QikmSXxiJkJ8MCwoTHxEKV4oeXxFKV4oRnx2KXwwLEheKHh8Qyl8MCl8MDtIPUM7aj1EZChmfDAsanwwLEp8MCxNfDApfDA7Zj1DO009RGQoeHwwLEh8MCxKfDAsTXwwKXwwO0o9QztIPUdkKGp8MCxmfDAsMTQpfDA7eD1DO3Y9SGQoanwwLGZ8MCw1MCl8MDt4PXh8QztGPUdkKGp8MCxmfDAsMTgpfDA7RT1DO3k9SGQoanwwLGZ8MCw0Nil8MDtFPXheKEV8Qyk7eD1HZChqfDAsZnwwLDQxKXwwO0Q9QztMPUhkKGp8MCxmfDAsMjMpfDA7RD1FXihEfEMpO0U9ZysxMDR8MDt1PWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO3M9RGQocnwwLHN8MCw5OTEzMzYxMTMsLTIxMzI4ODkwOTApfDA7RT1EZChzfDAsQ3wwLHV8MCxFfDApfDA7RD1EZChFfDAsQ3wwLChIfHYpXihGfHkpXih4fEwpfDAsRHwwKXwwO0Q9RGQoRHwwLEN8MCwob15tKSZqXm98MCwocF5sKSZmXnB8MCl8MDtMPUM7eD1HZChNfDAsSnwwLDI4KXwwO3k9QztGPUhkKE18MCxKfDAsMzYpfDA7eT15fEM7dj1HZChNfDAsSnwwLDM0KXwwO0g9QztFPUhkKE18MCxKfDAsMzApfDA7SD15XihIfEMpO3k9R2QoTXwwLEp8MCwzOSl8MDt1PUM7cz1IZChNfDAsSnwwLDI1KXwwO3U9RGQoKEt8RykmTXxLJkd8MCwoQnxJKSZKfEImSXwwLCh4fEYpXih2fEUpXih5fHMpfDAsSF4odXxDKXwwKXwwO0g9QztiPURkKEF8MCxifDAsRHwwLEx8MCl8MDtBPUM7TD1EZCh1fDAsSHwwLER8MCxMfDApfDA7RD1DO0g9R2QoYnwwLEF8MCwxNCl8MDt1PUM7cz1IZChifDAsQXwwLDUwKXwwO3U9dXxDO3k9R2QoYnwwLEF8MCwxOCl8MDtFPUM7dj1IZChifDAsQXwwLDQ2KXwwO0U9dV4oRXxDKTt1PUdkKGJ8MCxBfDAsNDEpfDA7Rj1DO3g9SGQoYnwwLEF8MCwyMyl8MDtGPUVeKEZ8Qyk7RT1nKzExMnwwO3I9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7cD1EZChvfDAscHwwLDYzMzgwMzMxNywtMTY4MDA3OTE5Myl8MDtFPURkKHB8MCxDfDAscnwwLEV8MCl8MDtGPURkKEV8MCxDfDAsKEh8cyleKHl8dileKHV8eCl8MCxGfDApfDA7Rj1EZChGfDAsQ3wwLChtXmopJmJebXwwLChsXmYpJkFebHwwKXwwO3g9Qzt1PUdkKEx8MCxEfDAsMjgpfDA7dj1DO3k9SGQoTHwwLER8MCwzNil8MDt2PXZ8QztzPUdkKEx8MCxEfDAsMzQpfDA7SD1DO0U9SGQoTHwwLER8MCwzMCl8MDtIPXZeKEh8Qyk7dj1HZChMfDAsRHwwLDM5KXwwO3I9QztwPUhkKEx8MCxEfDAsMjUpfDA7cj1EZCgoR3xNKSZMfEcmTXwwLChJfEopJkR8SSZKfDAsKHV8eSleKHN8RSleKHZ8cCl8MCxIXihyfEMpfDApfDA7SD1DO0I9RGQoS3wwLEJ8MCxGfDAseHwwKXwwO0s9Qzt4PURkKHJ8MCxIfDAsRnwwLHh8MCl8MDtGPUM7SD1HZChCfDAsS3wwLDE0KXwwO3I9QztwPUhkKEJ8MCxLfDAsNTApfDA7cj1yfEM7dj1HZChCfDAsS3wwLDE4KXwwO0U9QztzPUhkKEJ8MCxLfDAsNDYpfDA7RT1yXihFfEMpO3I9R2QoQnwwLEt8MCw0MSl8MDt5PUM7dT1IZChCfDAsS3wwLDIzKXwwO3k9RV4oeXxDKTtFPWcrMTIwfDA7bz1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtsPURkKG18MCxsfDAsLTgxNTE5MjQyOCwtMTA0Njc0NDcxNil8MDtFPURkKGx8MCxDfDAsb3wwLEV8MCl8MDt5PURkKEV8MCxDfDAsKEh8cCleKHZ8cyleKHJ8dSl8MCx5fDApfDA7eT1EZCh5fDAsQ3wwLChqXmIpJkJeanwwLChmXkEpJkteZnwwKXwwO3U9QztyPUdkKHh8MCxGfDAsMjgpfDA7cz1DO3Y9SGQoeHwwLEZ8MCwzNil8MDtzPXN8QztwPUdkKHh8MCxGfDAsMzQpfDA7SD1DO0U9SGQoeHwwLEZ8MCwzMCl8MDtIPXNeKEh8Qyk7cz1HZCh4fDAsRnwwLDM5KXwwO289QztsPUhkKHh8MCxGfDAsMjUpfDA7bz1EZCgoTXxMKSZ4fE0mTHwwLChKfEQpJkZ8SiZEfDAsKHJ8dileKHB8RSleKHN8bCl8MCxIXihvfEMpfDApfDA7SD1DO0k9RGQoR3wwLEl8MCx5fDAsdXwwKXwwO0c9Qzt1PURkKG98MCxIfDAseXwwLHV8MCl8MDt5PUM7SD1HZChJfDAsR3wwLDE0KXwwO289QztsPUhkKEl8MCxHfDAsNTApfDA7bz1vfEM7cz1HZChJfDAsR3wwLDE4KXwwO0U9QztwPUhkKEl8MCxHfDAsNDYpfDA7RT1vXihFfEMpO289R2QoSXwwLEd8MCw0MSl8MDt2PUM7cj1IZChJfDAsR3wwLDIzKXwwO3Y9RV4odnxDKTtFPWcrMTI4fDA7bT1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtmPURkKGp8MCxmfDAsLTE2MjgzNTM4MzgsLTQ1OTU3Njg5NSl8MDtFPURkKGZ8MCxDfDAsbXwwLEV8MCl8MDt2PURkKEV8MCxDfDAsKEh8bCleKHN8cCleKG98cil8MCx2fDApfDA7dj1EZCh2fDAsQ3wwLChiXkIpJkleYnwwLChBXkspJkdeQXwwKXwwO3I9QztvPUdkKHV8MCx5fDAsMjgpfDA7cD1DO3M9SGQodXwwLHl8MCwzNil8MDtwPXB8QztsPUdkKHV8MCx5fDAsMzQpfDA7SD1DO0U9SGQodXwwLHl8MCwzMCl8MDtIPXBeKEh8Qyk7cD1HZCh1fDAseXwwLDM5KXwwO209QztmPUhkKHV8MCx5fDAsMjUpfDA7bT1EZCgoTHx4KSZ1fEwmeHwwLChEfEYpJnl8RCZGfDAsKG98cyleKGx8RSleKHB8Zil8MCxIXihtfEMpfDApfDA7SD1DO0o9RGQoTXwwLEp8MCx2fDAscnwwKXwwO009QztyPURkKG18MCxIfDAsdnwwLHJ8MCl8MDt2PUM7SD1HZChKfDAsTXwwLDE0KXwwO209QztmPUhkKEp8MCxNfDAsNTApfDA7bT1tfEM7cD1HZChKfDAsTXwwLDE4KXwwO0U9QztsPUhkKEp8MCxNfDAsNDYpfDA7RT1tXihFfEMpO209R2QoSnwwLE18MCw0MSl8MDtzPUM7bz1IZChKfDAsTXwwLDIzKXwwO3M9RV4oc3xDKTtFPWcrMTM2fDA7aj1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtBPURkKGJ8MCxBfDAsOTQ0NzExMTM5LC0yNzI3NDI1MjIpfDA7RT1EZChBfDAsQ3wwLGp8MCxFfDApfDA7cz1EZChFfDAsQ3wwLChIfGYpXihwfGwpXihtfG8pfDAsc3wwKXwwO3M9RGQoc3wwLEN8MCwoQl5JKSZKXkJ8MCwoS15HKSZNXkt8MCl8MDtvPUM7bT1HZChyfDAsdnwwLDI4KXwwO2w9QztwPUhkKHJ8MCx2fDAsMzYpfDA7bD1sfEM7Zj1HZChyfDAsdnwwLDM0KXwwO0g9QztFPUhkKHJ8MCx2fDAsMzApfDA7SD1sXihIfEMpO2w9R2QocnwwLHZ8MCwzOSl8MDtqPUM7QT1IZChyfDAsdnwwLDI1KXwwO2o9RGQoKHh8dSkmcnx4JnV8MCwoRnx5KSZ2fEYmeXwwLChtfHApXihmfEUpXihsfEEpfDAsSF4oanxDKXwwKXwwO0g9QztEPURkKEx8MCxEfDAsc3wwLG98MCl8MDtMPUM7bz1EZChqfDAsSHwwLHN8MCxvfDApfDA7cz1DO0g9R2QoRHwwLEx8MCwxNCl8MDtqPUM7QT1IZChEfDAsTHwwLDUwKXwwO2o9anxDO2w9R2QoRHwwLEx8MCwxOCl8MDtFPUM7Zj1IZChEfDAsTHwwLDQ2KXwwO0U9al4oRXxDKTtqPUdkKER8MCxMfDAsNDEpfDA7cD1DO209SGQoRHwwLEx8MCwyMyl8MDtwPUVeKHB8Qyk7RT1nKzE0NHwwO2I9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7Sz1EZChCfDAsS3wwLC0xOTUzNzA0NTIzLDI2NDM0NzA3OCl8MDtFPURkKEt8MCxDfDAsYnwwLEV8MCl8MDtwPURkKEV8MCxDfDAsKEh8QSleKGx8ZileKGp8bSl8MCxwfDApfDA7cD1EZChwfDAsQ3wwLChJXkopJkReSXwwLChHXk0pJkxeR3wwKXwwO209QztqPUdkKG98MCxzfDAsMjgpfDA7Zj1DO2w9SGQob3wwLHN8MCwzNil8MDtmPWZ8QztBPUdkKG98MCxzfDAsMzQpfDA7SD1DO0U9SGQob3wwLHN8MCwzMCl8MDtIPWZeKEh8Qyk7Zj1HZChvfDAsc3wwLDM5KXwwO2I9QztLPUhkKG98MCxzfDAsMjUpfDA7Yj1EZCgodXxyKSZvfHUmcnwwLCh5fHYpJnN8eSZ2fDAsKGp8bCleKEF8RSleKGZ8Syl8MCxIXihifEMpfDApfDA7SD1DO0Y9RGQoeHwwLEZ8MCxwfDAsbXwwKXwwO3g9QzttPURkKGJ8MCxIfDAscHwwLG18MCl8MDtwPUM7SD1HZChGfDAseHwwLDE0KXwwO2I9QztLPUhkKEZ8MCx4fDAsNTApfDA7Yj1ifEM7Zj1HZChGfDAseHwwLDE4KXwwO0U9QztBPUhkKEZ8MCx4fDAsNDYpfDA7RT1iXihFfEMpO2I9R2QoRnwwLHh8MCw0MSl8MDtsPUM7aj1IZChGfDAseHwwLDIzKXwwO2w9RV4obHxDKTtFPWcrMTUyfDA7Qj1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtHPURkKEl8MCxHfDAsMjAwNzgwMDkzMyw2MDQ4MDc2MjgpfDA7RT1EZChHfDAsQ3wwLEJ8MCxFfDApfDA7bD1EZChFfDAsQ3wwLChIfEspXihmfEEpXihifGopfDAsbHwwKXwwO2w9RGQobHwwLEN8MCwoSl5EKSZGXkp8MCwoTV5MKSZ4Xk18MCl8MDtqPUM7Yj1HZChtfDAscHwwLDI4KXwwO0E9QztmPUhkKG18MCxwfDAsMzYpfDA7QT1BfEM7Sz1HZChtfDAscHwwLDM0KXwwO0g9QztFPUhkKG18MCxwfDAsMzApfDA7SD1BXihIfEMpO0E9R2QobXwwLHB8MCwzOSl8MDtCPUM7Rz1IZChtfDAscHwwLDI1KXwwO0I9RGQoKHJ8bykmbXxyJm98MCwodnxzKSZwfHYmc3wwLChifGYpXihLfEUpXihBfEcpfDAsSF4oQnxDKXwwKXwwO0g9Qzt5PURkKHV8MCx5fDAsbHwwLGp8MCl8MDt1PUM7aj1EZChCfDAsSHwwLGx8MCxqfDApfDA7bD1DO0g9R2QoeXwwLHV8MCwxNCl8MDtCPUM7Rz1IZCh5fDAsdXwwLDUwKXwwO0I9QnxDO0E9R2QoeXwwLHV8MCwxOCl8MDtFPUM7Sz1IZCh5fDAsdXwwLDQ2KXwwO0U9Ql4oRXxDKTtCPUdkKHl8MCx1fDAsNDEpfDA7Zj1DO2I9SGQoeXwwLHV8MCwyMyl8MDtmPUVeKGZ8Qyk7RT1nKzE2MHwwO0k9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7TT1EZChKfDAsTXwwLDE0OTU5OTA5MDEsNzcwMjU1OTgzKXwwO0U9RGQoTXwwLEN8MCxJfDAsRXwwKXwwO2Y9RGQoRXwwLEN8MCwoSHxHKV4oQXxLKV4oQnxiKXwwLGZ8MCl8MDtmPURkKGZ8MCxDfDAsKEReRikmeV5EfDAsKExeeCkmdV5MfDApfDA7Yj1DO0I9R2QoanwwLGx8MCwyOCl8MDtLPUM7QT1IZChqfDAsbHwwLDM2KXwwO0s9S3xDO0c9R2QoanwwLGx8MCwzNCl8MDtIPUM7RT1IZChqfDAsbHwwLDMwKXwwO0g9S14oSHxDKTtLPUdkKGp8MCxsfDAsMzkpfDA7ST1DO009SGQoanwwLGx8MCwyNSl8MDtJPURkKChvfG0pJmp8byZtfDAsKHN8cCkmbHxzJnB8MCwoQnxBKV4oR3xFKV4oS3xNKXwwLEheKEl8Qyl8MCl8MDtIPUM7dj1EZChyfDAsdnwwLGZ8MCxifDApfDA7cj1DO2I9RGQoSXwwLEh8MCxmfDAsYnwwKXwwO2Y9QztIPUdkKHZ8MCxyfDAsMTQpfDA7ST1DO009SGQodnwwLHJ8MCw1MCl8MDtJPUl8QztLPUdkKHZ8MCxyfDAsMTgpfDA7RT1DO0c9SGQodnwwLHJ8MCw0Nil8MDtFPUleKEV8Qyk7ST1HZCh2fDAscnwwLDQxKXwwO0E9QztCPUhkKHZ8MCxyfDAsMjMpfDA7QT1FXihBfEMpO0U9ZysxNjh8MDtKPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO0w9RGQoRHwwLEx8MCwxODU2NDMxMjM1LDEyNDkxNTAxMjIpfDA7RT1EZChMfDAsQ3wwLEp8MCxFfDApfDA7QT1EZChFfDAsQ3wwLChIfE0pXihLfEcpXihJfEIpfDAsQXwwKXwwO0E9RGQoQXwwLEN8MCwoRl55KSZ2XkZ8MCwoeF51KSZyXnh8MCl8MDtCPUM7ST1HZChifDAsZnwwLDI4KXwwO0c9QztLPUhkKGJ8MCxmfDAsMzYpfDA7Rz1HfEM7TT1HZChifDAsZnwwLDM0KXwwO0g9QztFPUhkKGJ8MCxmfDAsMzApfDA7SD1HXihIfEMpO0c9R2QoYnwwLGZ8MCwzOSl8MDtKPUM7TD1IZChifDAsZnwwLDI1KXwwO0o9RGQoKG18aikmYnxtJmp8MCwocHxsKSZmfHAmbHwwLChJfEspXihNfEUpXihHfEwpfDAsSF4oSnxDKXwwKXwwO0g9QztzPURkKG98MCxzfDAsQXwwLEJ8MCl8MDtvPUM7Qj1EZChKfDAsSHwwLEF8MCxCfDApfDA7QT1DO0g9R2Qoc3wwLG98MCwxNCl8MDtKPUM7TD1IZChzfDAsb3wwLDUwKXwwO0o9SnxDO0c9R2Qoc3wwLG98MCwxOCl8MDtFPUM7TT1IZChzfDAsb3wwLDQ2KXwwO0U9Sl4oRXxDKTtKPUdkKHN8MCxvfDAsNDEpfDA7Sz1DO0k9SGQoc3wwLG98MCwyMyl8MDtLPUVeKEt8Qyk7RT1nKzE3NnwwO0Q9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7eD1EZChGfDAseHwwLC0xMTE5NzQ5MTY0LDE1NTUwODE2OTIpfDA7RT1EZCh4fDAsQ3wwLER8MCxFfDApfDA7Sz1EZChFfDAsQ3wwLChIfEwpXihHfE0pXihKfEkpfDAsS3wwKXwwO0s9RGQoS3wwLEN8MCwoeV52KSZzXnl8MCwodV5yKSZvXnV8MCl8MDtJPUM7Sj1HZChCfDAsQXwwLDI4KXwwO009QztHPUhkKEJ8MCxBfDAsMzYpfDA7TT1NfEM7TD1HZChCfDAsQXwwLDM0KXwwO0g9QztFPUhkKEJ8MCxBfDAsMzApfDA7SD1NXihIfEMpO009R2QoQnwwLEF8MCwzOSl8MDtEPUM7eD1IZChCfDAsQXwwLDI1KXwwO0Q9RGQoKGp8YikmQnxqJmJ8MCwobHxmKSZBfGwmZnwwLChKfEcpXihMfEUpXihNfHgpfDAsSF4oRHxDKXwwKXwwO0g9QztwPURkKG18MCxwfDAsS3wwLEl8MCl8MDttPUM7ST1EZChEfDAsSHwwLEt8MCxJfDApfDA7Sz1DO0g9R2QocHwwLG18MCwxNCl8MDtEPUM7eD1IZChwfDAsbXwwLDUwKXwwO0Q9RHxDO009R2QocHwwLG18MCwxOCl8MDtFPUM7TD1IZChwfDAsbXwwLDQ2KXwwO0U9RF4oRXxDKTtEPUdkKHB8MCxtfDAsNDEpfDA7Rz1DO0o9SGQocHwwLG18MCwyMyl8MDtHPUVeKEd8Qyk7RT1nKzE4NHwwO0Y9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7dT1EZCh5fDAsdXwwLC0yMDk2MDE2NDU5LDE5OTYwNjQ5ODYpfDA7RT1EZCh1fDAsQ3wwLEZ8MCxFfDApfDA7Rz1EZChFfDAsQ3wwLChIfHgpXihNfEwpXihEfEopfDAsR3wwKXwwO0c9RGQoR3wwLEN8MCwodl5zKSZwXnZ8MCwocl5vKSZtXnJ8MCl8MDtKPUM7RD1HZChJfDAsS3wwLDI4KXwwO0w9QztNPUhkKEl8MCxLfDAsMzYpfDA7TD1MfEM7eD1HZChJfDAsS3wwLDM0KXwwO0g9QztFPUhkKEl8MCxLfDAsMzApfDA7SD1MXihIfEMpO0w9R2QoSXwwLEt8MCwzOSl8MDtGPUM7dT1IZChJfDAsS3wwLDI1KXwwO0Y9RGQoKGJ8QikmSXxiJkJ8MCwoZnxBKSZLfGYmQXwwLChEfE0pXih4fEUpXihMfHUpfDAsSF4oRnxDKXwwKXwwO0g9QztsPURkKGp8MCxsfDAsR3wwLEp8MCl8MDtqPUM7Sj1EZChGfDAsSHwwLEd8MCxKfDApfDA7Rz1DO0g9R2QobHwwLGp8MCwxNCl8MDtGPUM7dT1IZChsfDAsanwwLDUwKXwwO0Y9RnxDO0w9R2QobHwwLGp8MCwxOCl8MDtFPUM7eD1IZChsfDAsanwwLDQ2KXwwO0U9Rl4oRXxDKTtGPUdkKGx8MCxqfDAsNDEpfDA7TT1DO0Q9SGQobHwwLGp8MCwyMyl8MDtNPUVeKE18Qyk7RT1nKzE5MnwwO3k9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7cj1EZCh2fDAscnwwLC0yOTUyNDc5NTcsLTE3NDA3NDY0MTQpfDA7RT1EZChyfDAsQ3wwLHl8MCxFfDApfDA7TT1EZChFfDAsQ3wwLChIfHUpXihMfHgpXihGfEQpfDAsTXwwKXwwO009RGQoTXwwLEN8MCwoc15wKSZsXnN8MCwob15tKSZqXm98MCl8MDtEPUM7Rj1HZChKfDAsR3wwLDI4KXwwO3g9QztMPUhkKEp8MCxHfDAsMzYpfDA7eD14fEM7dT1HZChKfDAsR3wwLDM0KXwwO0g9QztFPUhkKEp8MCxHfDAsMzApfDA7SD14XihIfEMpO3g9R2QoSnwwLEd8MCwzOSl8MDt5PUM7cj1IZChKfDAsR3wwLDI1KXwwO3k9RGQoKEJ8SSkmSnxCJkl8MCwoQXxLKSZHfEEmS3wwLChGfEwpXih1fEUpXih4fHIpfDAsSF4oeXxDKXwwKXwwO0g9QztmPURkKGJ8MCxmfDAsTXwwLER8MCl8MDtiPUM7RD1EZCh5fDAsSHwwLE18MCxEfDApfDA7TT1DO0g9R2QoZnwwLGJ8MCwxNCl8MDt5PUM7cj1IZChmfDAsYnwwLDUwKXwwO3k9eXxDO3g9R2QoZnwwLGJ8MCwxOCl8MDtFPUM7dT1IZChmfDAsYnwwLDQ2KXwwO0U9eV4oRXxDKTt5PUdkKGZ8MCxifDAsNDEpfDA7TD1DO0Y9SGQoZnwwLGJ8MCwyMyl8MDtMPUVeKEx8Qyk7RT1nKzIwMHwwO3Y9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7bz1EZChzfDAsb3wwLDc2Njc4NDAxNiwtMTQ3MzEzMjk0Nyl8MDtFPURkKG98MCxDfDAsdnwwLEV8MCl8MDtMPURkKEV8MCxDfDAsKEh8cileKHh8dSleKHl8Ril8MCxMfDApfDA7TD1EZChMfDAsQ3wwLChwXmwpJmZecHwwLChtXmopJmJebXwwKXwwO0Y9Qzt5PUdkKER8MCxNfDAsMjgpfDA7dT1DO3g9SGQoRHwwLE18MCwzNil8MDt1PXV8QztyPUdkKER8MCxNfDAsMzQpfDA7SD1DO0U9SGQoRHwwLE18MCwzMCl8MDtIPXVeKEh8Qyk7dT1HZChEfDAsTXwwLDM5KXwwO3Y9QztvPUhkKER8MCxNfDAsMjUpfDA7dj1EZCgoSXxKKSZEfEkmSnwwLChLfEcpJk18SyZHfDAsKHl8eCleKHJ8RSleKHV8byl8MCxIXih2fEMpfDApfDA7SD1DO0E9RGQoQnwwLEF8MCxMfDAsRnwwKXwwO0I9QztGPURkKHZ8MCxIfDAsTHwwLEZ8MCl8MDtMPUM7SD1HZChBfDAsQnwwLDE0KXwwO3Y9QztvPUhkKEF8MCxCfDAsNTApfDA7dj12fEM7dT1HZChBfDAsQnwwLDE4KXwwO0U9QztyPUhkKEF8MCxCfDAsNDYpfDA7RT12XihFfEMpO3Y9R2QoQXwwLEJ8MCw0MSl8MDt4PUM7eT1IZChBfDAsQnwwLDIzKXwwO3g9RV4oeHxDKTtFPWcrMjA4fDA7cz1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDttPURkKHB8MCxtfDAsLTE3MjgzNzI0MTcsLTEzNDE5NzA0ODgpfDA7RT1EZChtfDAsQ3wwLHN8MCxFfDApfDA7eD1EZChFfDAsQ3wwLChIfG8pXih1fHIpXih2fHkpfDAseHwwKXwwO3g9RGQoeHwwLEN8MCwobF5mKSZBXmx8MCwoal5iKSZCXmp8MCl8MDt5PUM7dj1HZChGfDAsTHwwLDI4KXwwO3I9Qzt1PUhkKEZ8MCxMfDAsMzYpfDA7cj1yfEM7bz1HZChGfDAsTHwwLDM0KXwwO0g9QztFPUhkKEZ8MCxMfDAsMzApfDA7SD1yXihIfEMpO3I9R2QoRnwwLEx8MCwzOSl8MDtzPUM7bT1IZChGfDAsTHwwLDI1KXwwO3M9RGQoKEp8RCkmRnxKJkR8MCwoR3xNKSZMfEcmTXwwLCh2fHUpXihvfEUpXihyfG0pfDAsSF4oc3xDKXwwKXwwO0g9QztLPURkKEl8MCxLfDAseHwwLHl8MCl8MDtJPUM7eT1EZChzfDAsSHwwLHh8MCx5fDApfDA7eD1DO0g9R2QoS3wwLEl8MCwxNCl8MDtzPUM7bT1IZChLfDAsSXwwLDUwKXwwO3M9c3xDO3I9R2QoS3wwLEl8MCwxOCl8MDtFPUM7bz1IZChLfDAsSXwwLDQ2KXwwO0U9c14oRXxDKTtzPUdkKEt8MCxJfDAsNDEpfDA7dT1DO3Y9SGQoS3wwLEl8MCwyMyl8MDt1PUVeKHV8Qyk7RT1nKzIxNnwwO3A9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7aj1EZChsfDAsanwwLC0xMDkxNjI5MzQwLC0xMDg0NjUzNjI1KXwwO0U9RGQoanwwLEN8MCxwfDAsRXwwKXwwO3U9RGQoRXwwLEN8MCwoSHxtKV4ocnxvKV4oc3x2KXwwLHV8MCl8MDt1PURkKHV8MCxDfDAsKGZeQSkmS15mfDAsKGJeQikmSV5ifDApfDA7dj1DO3M9R2QoeXwwLHh8MCwyOCl8MDtvPUM7cj1IZCh5fDAseHwwLDM2KXwwO289b3xDO209R2QoeXwwLHh8MCwzNCl8MDtIPUM7RT1IZCh5fDAseHwwLDMwKXwwO0g9b14oSHxDKTtvPUdkKHl8MCx4fDAsMzkpfDA7cD1DO2o9SGQoeXwwLHh8MCwyNSl8MDtwPURkKChEfEYpJnl8RCZGfDAsKE18TCkmeHxNJkx8MCwoc3xyKV4obXxFKV4ob3xqKXwwLEheKHB8Qyl8MCl8MDtIPUM7Rz1EZChKfDAsR3wwLHV8MCx2fDApfDA7Sj1DO3Y9RGQocHwwLEh8MCx1fDAsdnwwKXwwO3U9QztIPUdkKEd8MCxKfDAsMTQpfDA7cD1DO2o9SGQoR3wwLEp8MCw1MCl8MDtwPXB8QztvPUdkKEd8MCxKfDAsMTgpfDA7RT1DO209SGQoR3wwLEp8MCw0Nil8MDtFPXBeKEV8Qyk7cD1HZChHfDAsSnwwLDQxKXwwO3I9QztzPUhkKEd8MCxKfDAsMjMpfDA7cj1FXihyfEMpO0U9ZysyMjR8MDtsPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO2I9RGQoZnwwLGJ8MCwxMDM0NDU3MDI2LC05NTgzOTU0MDUpfDA7RT1EZChifDAsQ3wwLGx8MCxFfDApfDA7cj1EZChFfDAsQ3wwLChIfGopXihvfG0pXihwfHMpfDAscnwwKXwwO3I9RGQocnwwLEN8MCwoQV5LKSZHXkF8MCwoQl5JKSZKXkJ8MCl8MDtzPUM7cD1HZCh2fDAsdXwwLDI4KXwwO209QztvPUhkKHZ8MCx1fDAsMzYpfDA7bT1tfEM7aj1HZCh2fDAsdXwwLDM0KXwwO0g9QztFPUhkKHZ8MCx1fDAsMzApfDA7SD1tXihIfEMpO209R2QodnwwLHV8MCwzOSl8MDtsPUM7Yj1IZCh2fDAsdXwwLDI1KXwwO2w9RGQoKEZ8eSkmdnxGJnl8MCwoTHx4KSZ1fEwmeHwwLChwfG8pXihqfEUpXihtfGIpfDAsSF4obHxDKXwwKXwwO0g9QztNPURkKER8MCxNfDAscnwwLHN8MCl8MDtEPUM7cz1EZChsfDAsSHwwLHJ8MCxzfDApfDA7cj1DO0g9R2QoTXwwLER8MCwxNCl8MDtsPUM7Yj1IZChNfDAsRHwwLDUwKXwwO2w9bHxDO209R2QoTXwwLER8MCwxOCl8MDtFPUM7aj1IZChNfDAsRHwwLDQ2KXwwO0U9bF4oRXxDKTtsPUdkKE18MCxEfDAsNDEpfDA7bz1DO3A9SGQoTXwwLER8MCwyMyl8MDtvPUVeKG98Qyk7RT1nKzIzMnwwO2Y9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7Qj1EZChBfDAsQnwwLC0xODI4MDE4Mzk1LC03MTA0Mzg1ODUpfDA7RT1EZChCfDAsQ3wwLGZ8MCxFfDApfDA7bz1EZChFfDAsQ3wwLChIfGIpXihtfGopXihsfHApfDAsb3wwKXwwO289RGQob3wwLEN8MCwoS15HKSZNXkt8MCwoSV5KKSZEXkl8MCl8MDtwPUM7bD1HZChzfDAscnwwLDI4KXwwO2o9QzttPUhkKHN8MCxyfDAsMzYpfDA7aj1qfEM7Yj1HZChzfDAscnwwLDM0KXwwO0g9QztFPUhkKHN8MCxyfDAsMzApfDA7SD1qXihIfEMpO2o9R2Qoc3wwLHJ8MCwzOSl8MDtmPUM7Qj1IZChzfDAscnwwLDI1KXwwO2Y9RGQoKHl8dikmc3x5JnZ8MCwoeHx1KSZyfHgmdXwwLChsfG0pXihifEUpXihqfEIpfDAsSF4oZnxDKXwwKXwwO0g9QztMPURkKEZ8MCxMfDAsb3wwLHB8MCl8MDtGPUM7cD1EZChmfDAsSHwwLG98MCxwfDApfDA7bz1DO0g9R2QoTHwwLEZ8MCwxNCl8MDtmPUM7Qj1IZChMfDAsRnwwLDUwKXwwO2Y9ZnxDO2o9R2QoTHwwLEZ8MCwxOCl8MDtFPUM7Yj1IZChMfDAsRnwwLDQ2KXwwO0U9Zl4oRXxDKTtmPUdkKEx8MCxGfDAsNDEpfDA7bT1DO2w9SGQoTHwwLEZ8MCwyMyl8MDttPUVeKG18Qyk7RT1nKzI0MHwwO0E9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7ST1EZChLfDAsSXwwLC01MzY2NDA5MTMsMTEzOTI2OTkzKXwwO0U9RGQoSXwwLEN8MCxBfDAsRXwwKXwwO209RGQoRXwwLEN8MCwoSHxCKV4oanxiKV4oZnxsKXwwLG18MCl8MDttPURkKG18MCxDfDAsKEdeTSkmTF5HfDAsKEpeRCkmRl5KfDApfDA7bD1DO2Y9R2QocHwwLG98MCwyOCl8MDtiPUM7aj1IZChwfDAsb3wwLDM2KXwwO2I9YnxDO0I9R2QocHwwLG98MCwzNCl8MDtIPUM7RT1IZChwfDAsb3wwLDMwKXwwO0g9Yl4oSHxDKTtiPUdkKHB8MCxvfDAsMzkpfDA7QT1DO0k9SGQocHwwLG98MCwyNSl8MDtBPURkKCh2fHMpJnB8diZzfDAsKHV8cikmb3x1JnJ8MCwoZnxqKV4oQnxFKV4oYnxJKXwwLEheKEF8Qyl8MCl8MDtIPUM7eD1EZCh5fDAseHwwLG18MCxsfDApfDA7eT1DO2w9RGQoQXwwLEh8MCxtfDAsbHwwKXwwO209QztIPUdkKHh8MCx5fDAsMTQpfDA7QT1DO0k9SGQoeHwwLHl8MCw1MCl8MDtBPUF8QztiPUdkKHh8MCx5fDAsMTgpfDA7RT1DO0I9SGQoeHwwLHl8MCw0Nil8MDtFPUFeKEV8Qyk7QT1HZCh4fDAseXwwLDQxKXwwO2o9QztmPUhkKHh8MCx5fDAsMjMpfDA7aj1FXihqfEMpO0U9ZysyNDh8MDtLPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO0o9RGQoR3wwLEp8MCwxNjg3MTc5MzYsMzM4MjQxODk1KXwwO0U9RGQoSnwwLEN8MCxLfDAsRXwwKXwwO2o9RGQoRXwwLEN8MCwoSHxJKV4oYnxCKV4oQXxmKXwwLGp8MCl8MDtqPURkKGp8MCxDfDAsKE1eTCkmeF5NfDAsKEReRikmeV5EfDApfDA7Zj1DO0E9R2QobHwwLG18MCwyOCl8MDtCPUM7Yj1IZChsfDAsbXwwLDM2KXwwO0I9QnxDO0k9R2QobHwwLG18MCwzNCl8MDtIPUM7RT1IZChsfDAsbXwwLDMwKXwwO0g9Ql4oSHxDKTtCPUdkKGx8MCxtfDAsMzkpfDA7Sz1DO0o9SGQobHwwLG18MCwyNSl8MDtLPURkKChzfHApJmx8cyZwfDAsKHJ8bykmbXxyJm98MCwoQXxiKV4oSXxFKV4oQnxKKXwwLEheKEt8Qyl8MCl8MDtIPUM7dT1EZCh2fDAsdXwwLGp8MCxmfDApfDA7dj1DO2Y9RGQoS3wwLEh8MCxqfDAsZnwwKXwwO2o9QztIPUdkKHV8MCx2fDAsMTQpfDA7Sz1DO0o9SGQodXwwLHZ8MCw1MCl8MDtLPUt8QztCPUdkKHV8MCx2fDAsMTgpfDA7RT1DO0k9SGQodXwwLHZ8MCw0Nil8MDtFPUteKEV8Qyk7Sz1HZCh1fDAsdnwwLDQxKXwwO2I9QztBPUhkKHV8MCx2fDAsMjMpfDA7Yj1FXihifEMpO0U9ZysyNTZ8MDtHPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO0Q9RGQoTXwwLER8MCwxMTg4MTc5OTY0LDY2NjMwNzIwNSl8MDtFPURkKER8MCxDfDAsR3wwLEV8MCl8MDtiPURkKEV8MCxDfDAsKEh8SileKEJ8SSleKEt8QSl8MCxifDApfDA7Yj1EZChifDAsQ3wwLChMXngpJnVeTHwwLChGXnkpJnZeRnwwKXwwO0E9QztLPUdkKGZ8MCxqfDAsMjgpfDA7ST1DO0I9SGQoZnwwLGp8MCwzNil8MDtJPUl8QztKPUdkKGZ8MCxqfDAsMzQpfDA7SD1DO0U9SGQoZnwwLGp8MCwzMCl8MDtIPUleKEh8Qyk7ST1HZChmfDAsanwwLDM5KXwwO0c9QztEPUhkKGZ8MCxqfDAsMjUpfDA7Rz1EZCgocHxsKSZmfHAmbHwwLChvfG0pJmp8byZtfDAsKEt8QileKEp8RSleKEl8RCl8MCxIXihHfEMpfDApfDA7SD1DO3I9RGQoc3wwLHJ8MCxifDAsQXwwKXwwO3M9QztBPURkKEd8MCxIfDAsYnwwLEF8MCl8MDtiPUM7SD1HZChyfDAsc3wwLDE0KXwwO0c9QztEPUhkKHJ8MCxzfDAsNTApfDA7Rz1HfEM7ST1HZChyfDAsc3wwLDE4KXwwO0U9QztKPUhkKHJ8MCxzfDAsNDYpfDA7RT1HXihFfEMpO0c9R2QocnwwLHN8MCw0MSl8MDtCPUM7Sz1IZChyfDAsc3wwLDIzKXwwO0I9RV4oQnxDKTtFPWcrMjY0fDA7TT1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtGPURkKEx8MCxGfDAsMTU0NjA0NTczNCw3NzM1Mjk5MTIpfDA7RT1EZChGfDAsQ3wwLE18MCxFfDApfDA7Qj1EZChFfDAsQ3wwLChIfEQpXihJfEopXihHfEspfDAsQnwwKXwwO0I9RGQoQnwwLEN8MCwoeF51KSZyXnh8MCwoeV52KSZzXnl8MCl8MDtLPUM7Rz1HZChBfDAsYnwwLDI4KXwwO0o9QztJPUhkKEF8MCxifDAsMzYpfDA7Sj1KfEM7RD1HZChBfDAsYnwwLDM0KXwwO0g9QztFPUhkKEF8MCxifDAsMzApfDA7SD1KXihIfEMpO0o9R2QoQXwwLGJ8MCwzOSl8MDtNPUM7Rj1IZChBfDAsYnwwLDI1KXwwO009RGQoKGx8ZikmQXxsJmZ8MCwobXxqKSZifG0manwwLChHfEkpXihEfEUpXihKfEYpfDAsSF4oTXxDKXwwKXwwO0g9QztvPURkKHB8MCxvfDAsQnwwLEt8MCl8MDtwPUM7Sz1EZChNfDAsSHwwLEJ8MCxLfDApfDA7Qj1DO0g9R2Qob3wwLHB8MCwxNCl8MDtNPUM7Rj1IZChvfDAscHwwLDUwKXwwO009TXxDO0o9R2Qob3wwLHB8MCwxOCl8MDtFPUM7RD1IZChvfDAscHwwLDQ2KXwwO0U9TV4oRXxDKTtNPUdkKG98MCxwfDAsNDEpfDA7ST1DO0c9SGQob3wwLHB8MCwyMyl8MDtJPUVeKEl8Qyk7RT1nKzI3MnwwO0w9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7eT1EZCh4fDAseXwwLDE1MjI4MDU0ODUsMTI5NDc1NzM3Mil8MDtFPURkKHl8MCxDfDAsTHwwLEV8MCl8MDtJPURkKEV8MCxDfDAsKEh8RileKEp8RCleKE18Ryl8MCxJfDApfDA7ST1EZChJfDAsQ3wwLCh1XnIpJm9edXwwLCh2XnMpJnBednwwKXwwO0c9QztNPUdkKEt8MCxCfDAsMjgpfDA7RD1DO0o9SGQoS3wwLEJ8MCwzNil8MDtEPUR8QztGPUdkKEt8MCxCfDAsMzQpfDA7SD1DO0U9SGQoS3wwLEJ8MCwzMCl8MDtIPUReKEh8Qyk7RD1HZChLfDAsQnwwLDM5KXwwO0w9Qzt5PUhkKEt8MCxCfDAsMjUpfDA7TD1EZCgoZnxBKSZLfGYmQXwwLChqfGIpJkJ8aiZifDAsKE18SileKEZ8RSleKER8eSl8MCxIXihMfEMpfDApfDA7SD1DO209RGQobHwwLG18MCxJfDAsR3wwKXwwO2w9QztHPURkKEx8MCxIfDAsSXwwLEd8MCl8MDtJPUM7SD1HZChtfDAsbHwwLDE0KXwwO0w9Qzt5PUhkKG18MCxsfDAsNTApfDA7TD1MfEM7RD1HZChtfDAsbHwwLDE4KXwwO0U9QztGPUhkKG18MCxsfDAsNDYpfDA7RT1MXihFfEMpO0w9R2QobXwwLGx8MCw0MSl8MDtKPUM7TT1IZChtfDAsbHwwLDIzKXwwO0o9RV4oSnxDKTtFPWcrMjgwfDA7eD1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDt2PURkKHV8MCx2fDAsLTE2NTExMzM0NzMsMTM5NjE4MjI5MSl8MDtFPURkKHZ8MCxDfDAseHwwLEV8MCl8MDtKPURkKEV8MCxDfDAsKEh8eSleKER8RileKEx8TSl8MCxKfDApfDA7Sj1EZChKfDAsQ3wwLChyXm8pJm1ecnwwLChzXnApJmxec3wwKXwwO009QztMPUdkKEd8MCxJfDAsMjgpfDA7Rj1DO0Q9SGQoR3wwLEl8MCwzNil8MDtGPUZ8Qzt5PUdkKEd8MCxJfDAsMzQpfDA7SD1DO0U9SGQoR3wwLEl8MCwzMCl8MDtIPUZeKEh8Qyk7Rj1HZChHfDAsSXwwLDM5KXwwO3g9Qzt2PUhkKEd8MCxJfDAsMjUpfDA7eD1EZCgoQXxLKSZHfEEmS3wwLChifEIpJkl8YiZCfDAsKEx8RCleKHl8RSleKEZ8dil8MCxIXih4fEMpfDApfDA7SD1DO2o9RGQoZnwwLGp8MCxKfDAsTXwwKXwwO2Y9QztNPURkKHh8MCxIfDAsSnwwLE18MCl8MDtKPUM7SD1HZChqfDAsZnwwLDE0KXwwO3g9Qzt2PUhkKGp8MCxmfDAsNTApfDA7eD14fEM7Rj1HZChqfDAsZnwwLDE4KXwwO0U9Qzt5PUhkKGp8MCxmfDAsNDYpfDA7RT14XihFfEMpO3g9R2QoanwwLGZ8MCw0MSl8MDtEPUM7TD1IZChqfDAsZnwwLDIzKXwwO0Q9RV4oRHxDKTtFPWcrMjg4fDA7dT1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtzPURkKHJ8MCxzfDAsLTE5NTE0Mzk5MDYsMTY5NTE4MzcwMCl8MDtFPURkKHN8MCxDfDAsdXwwLEV8MCl8MDtEPURkKEV8MCxDfDAsKEh8dileKEZ8eSleKHh8TCl8MCxEfDApfDA7RD1EZChEfDAsQ3wwLChvXm0pJmpeb3wwLChwXmwpJmZecHwwKXwwO0w9Qzt4PUdkKE18MCxKfDAsMjgpfDA7eT1DO0Y9SGQoTXwwLEp8MCwzNil8MDt5PXl8Qzt2PUdkKE18MCxKfDAsMzQpfDA7SD1DO0U9SGQoTXwwLEp8MCwzMCl8MDtIPXleKEh8Qyk7eT1HZChNfDAsSnwwLDM5KXwwO3U9QztzPUhkKE18MCxKfDAsMjUpfDA7dT1EZCgoS3xHKSZNfEsmR3wwLChCfEkpJkp8QiZJfDAsKHh8RileKHZ8RSleKHl8cyl8MCxIXih1fEMpfDApfDA7SD1DO2I9RGQoQXwwLGJ8MCxEfDAsTHwwKXwwO0E9QztMPURkKHV8MCxIfDAsRHwwLEx8MCl8MDtEPUM7SD1HZChifDAsQXwwLDE0KXwwO3U9QztzPUhkKGJ8MCxBfDAsNTApfDA7dT11fEM7eT1HZChifDAsQXwwLDE4KXwwO0U9Qzt2PUhkKGJ8MCxBfDAsNDYpfDA7RT11XihFfEMpO3U9R2QoYnwwLEF8MCw0MSl8MDtGPUM7eD1IZChifDAsQXwwLDIzKXwwO0Y9RV4oRnxDKTtFPWcrMjk2fDA7cj1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtwPURkKG98MCxwfDAsMTAxNDQ3NzQ4MCwxOTg2NjYxMDUxKXwwO0U9RGQocHwwLEN8MCxyfDAsRXwwKXwwO0Y9RGQoRXwwLEN8MCwoSHxzKV4oeXx2KV4odXx4KXwwLEZ8MCl8MDtGPURkKEZ8MCxDfDAsKG1eaikmYl5tfDAsKGxeZikmQV5sfDApfDA7eD1DO3U9R2QoTHwwLER8MCwyOCl8MDt2PUM7eT1IZChMfDAsRHwwLDM2KXwwO3Y9dnxDO3M9R2QoTHwwLER8MCwzNCl8MDtIPUM7RT1IZChMfDAsRHwwLDMwKXwwO0g9dl4oSHxDKTt2PUdkKEx8MCxEfDAsMzkpfDA7cj1DO3A9SGQoTHwwLER8MCwyNSl8MDtyPURkKChHfE0pJkx8RyZNfDAsKEl8SikmRHxJJkp8MCwodXx5KV4oc3xFKV4odnxwKXwwLEheKHJ8Qyl8MCl8MDtIPUM7Qj1EZChLfDAsQnwwLEZ8MCx4fDApfDA7Sz1DO3g9RGQocnwwLEh8MCxGfDAseHwwKXwwO0Y9QztIPUdkKEJ8MCxLfDAsMTQpfDA7cj1DO3A9SGQoQnwwLEt8MCw1MCl8MDtyPXJ8Qzt2PUdkKEJ8MCxLfDAsMTgpfDA7RT1DO3M9SGQoQnwwLEt8MCw0Nil8MDtFPXJeKEV8Qyk7cj1HZChCfDAsS3wwLDQxKXwwO3k9Qzt1PUhkKEJ8MCxLfDAsMjMpfDA7eT1FXih5fEMpO0U9ZyszMDR8MDtvPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO2w9RGQobXwwLGx8MCwxMjA2NzU5MTQyLC0yMTE3OTQwOTQ2KXwwO0U9RGQobHwwLEN8MCxvfDAsRXwwKXwwO3k9RGQoRXwwLEN8MCwoSHxwKV4odnxzKV4ocnx1KXwwLHl8MCl8MDt5PURkKHl8MCxDfDAsKGpeYikmQl5qfDAsKGZeQSkmS15mfDApfDA7dT1DO3I9R2QoeHwwLEZ8MCwyOCl8MDtzPUM7dj1IZCh4fDAsRnwwLDM2KXwwO3M9c3xDO3A9R2QoeHwwLEZ8MCwzNCl8MDtIPUM7RT1IZCh4fDAsRnwwLDMwKXwwO0g9c14oSHxDKTtzPUdkKHh8MCxGfDAsMzkpfDA7bz1DO2w9SGQoeHwwLEZ8MCwyNSl8MDtvPURkKChNfEwpJnh8TSZMfDAsKEp8RCkmRnxKJkR8MCwocnx2KV4ocHxFKV4oc3xsKXwwLEheKG98Qyl8MCl8MDtIPUM7ST1EZChHfDAsSXwwLHl8MCx1fDApfDA7Rz1DO3U9RGQob3wwLEh8MCx5fDAsdXwwKXwwO3k9QztIPUdkKEl8MCxHfDAsMTQpfDA7bz1DO2w9SGQoSXwwLEd8MCw1MCl8MDtvPW98QztzPUdkKEl8MCxHfDAsMTgpfDA7RT1DO3A9SGQoSXwwLEd8MCw0Nil8MDtFPW9eKEV8Qyk7bz1HZChJfDAsR3wwLDQxKXwwO3Y9QztyPUhkKEl8MCxHfDAsMjMpfDA7dj1FXih2fEMpO0U9ZyszMTJ8MDttPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO2Y9RGQoanwwLGZ8MCwzNDQwNzc2MjcsLTE4MzgwMTEyNTkpfDA7RT1EZChmfDAsQ3wwLG18MCxFfDApfDA7dj1EZChFfDAsQ3wwLChIfGwpXihzfHApXihvfHIpfDAsdnwwKXwwO3Y9RGQodnwwLEN8MCwoYl5CKSZJXmJ8MCwoQV5LKSZHXkF8MCl8MDtyPUM7bz1HZCh1fDAseXwwLDI4KXwwO3A9QztzPUhkKHV8MCx5fDAsMzYpfDA7cD1wfEM7bD1HZCh1fDAseXwwLDM0KXwwO0g9QztFPUhkKHV8MCx5fDAsMzApfDA7SD1wXihIfEMpO3A9R2QodXwwLHl8MCwzOSl8MDttPUM7Zj1IZCh1fDAseXwwLDI1KXwwO209RGQoKEx8eCkmdXxMJnh8MCwoRHxGKSZ5fEQmRnwwLChvfHMpXihsfEUpXihwfGYpfDAsSF4obXxDKXwwKXwwO0g9QztKPURkKE18MCxKfDAsdnwwLHJ8MCl8MDtNPUM7cj1EZChtfDAsSHwwLHZ8MCxyfDApfDA7dj1DO0g9R2QoSnwwLE18MCwxNCl8MDttPUM7Zj1IZChKfDAsTXwwLDUwKXwwO209bXxDO3A9R2QoSnwwLE18MCwxOCl8MDtFPUM7bD1IZChKfDAsTXwwLDQ2KXwwO0U9bV4oRXxDKTttPUdkKEp8MCxNfDAsNDEpfDA7cz1DO289SGQoSnwwLE18MCwyMyl8MDtzPUVeKHN8Qyk7RT1nKzMyMHwwO2o9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7QT1EZChifDAsQXwwLDEyOTA4NjM0NjAsLTE1NjQ0ODEzNzUpfDA7RT1EZChBfDAsQ3wwLGp8MCxFfDApfDA7cz1EZChFfDAsQ3wwLChIfGYpXihwfGwpXihtfG8pfDAsc3wwKXwwO3M9RGQoc3wwLEN8MCwoQl5JKSZKXkJ8MCwoS15HKSZNXkt8MCl8MDtvPUM7bT1HZChyfDAsdnwwLDI4KXwwO2w9QztwPUhkKHJ8MCx2fDAsMzYpfDA7bD1sfEM7Zj1HZChyfDAsdnwwLDM0KXwwO0g9QztFPUhkKHJ8MCx2fDAsMzApfDA7SD1sXihIfEMpO2w9R2QocnwwLHZ8MCwzOSl8MDtqPUM7QT1IZChyfDAsdnwwLDI1KXwwO2o9RGQoKHh8dSkmcnx4JnV8MCwoRnx5KSZ2fEYmeXwwLChtfHApXihmfEUpXihsfEEpfDAsSF4oanxDKXwwKXwwO0g9QztEPURkKEx8MCxEfDAsc3wwLG98MCl8MDtMPUM7bz1EZChqfDAsSHwwLHN8MCxvfDApfDA7cz1DO0g9R2QoRHwwLEx8MCwxNCl8MDtqPUM7QT1IZChEfDAsTHwwLDUwKXwwO2o9anxDO2w9R2QoRHwwLEx8MCwxOCl8MDtFPUM7Zj1IZChEfDAsTHwwLDQ2KXwwO0U9al4oRXxDKTtqPUdkKER8MCxMfDAsNDEpfDA7cD1DO209SGQoRHwwLEx8MCwyMyl8MDtwPUVeKHB8Qyk7RT1nKzMyOHwwO2I9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7Sz1EZChCfDAsS3wwLC0xMTM2NTEzMDIzLC0xNDc0NjY0ODg1KXwwO0U9RGQoS3wwLEN8MCxifDAsRXwwKXwwO3A9RGQoRXwwLEN8MCwoSHxBKV4obHxmKV4oanxtKXwwLHB8MCl8MDtwPURkKHB8MCxDfDAsKEleSikmRF5JfDAsKEdeTSkmTF5HfDApfDA7bT1DO2o9R2Qob3wwLHN8MCwyOCl8MDtmPUM7bD1IZChvfDAsc3wwLDM2KXwwO2Y9ZnxDO0E9R2Qob3wwLHN8MCwzNCl8MDtIPUM7RT1IZChvfDAsc3wwLDMwKXwwO0g9Zl4oSHxDKTtmPUdkKG98MCxzfDAsMzkpfDA7Yj1DO0s9SGQob3wwLHN8MCwyNSl8MDtiPURkKCh1fHIpJm98dSZyfDAsKHl8dikmc3x5JnZ8MCwoanxsKV4oQXxFKV4oZnxLKXwwLEheKGJ8Qyl8MCl8MDtIPUM7Rj1EZCh4fDAsRnwwLHB8MCxtfDApfDA7eD1DO209RGQoYnwwLEh8MCxwfDAsbXwwKXwwO3A9QztIPUdkKEZ8MCx4fDAsMTQpfDA7Yj1DO0s9SGQoRnwwLHh8MCw1MCl8MDtiPWJ8QztmPUdkKEZ8MCx4fDAsMTgpfDA7RT1DO0E9SGQoRnwwLHh8MCw0Nil8MDtFPWJeKEV8Qyk7Yj1HZChGfDAseHwwLDQxKXwwO2w9QztqPUhkKEZ8MCx4fDAsMjMpfDA7bD1FXihsfEMpO0U9ZyszMzZ8MDtCPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO0c9RGQoSXwwLEd8MCwtNzg5MDE0NjM5LC0xMDM1MjM2NDk2KXwwO0U9RGQoR3wwLEN8MCxCfDAsRXwwKXwwO2w9RGQoRXwwLEN8MCwoSHxLKV4oZnxBKV4oYnxqKXwwLGx8MCl8MDtsPURkKGx8MCxDfDAsKEpeRCkmRl5KfDAsKE1eTCkmeF5NfDApfDA7aj1DO2I9R2QobXwwLHB8MCwyOCl8MDtBPUM7Zj1IZChtfDAscHwwLDM2KXwwO0E9QXxDO0s9R2QobXwwLHB8MCwzNCl8MDtIPUM7RT1IZChtfDAscHwwLDMwKXwwO0g9QV4oSHxDKTtBPUdkKG18MCxwfDAsMzkpfDA7Qj1DO0c9SGQobXwwLHB8MCwyNSl8MDtCPURkKChyfG8pJm18ciZvfDAsKHZ8cykmcHx2JnN8MCwoYnxmKV4oS3xFKV4oQXxHKXwwLEheKEJ8Qyl8MCl8MDtIPUM7eT1EZCh1fDAseXwwLGx8MCxqfDApfDA7dT1DO2o9RGQoQnwwLEh8MCxsfDAsanwwKXwwO2w9QztIPUdkKHl8MCx1fDAsMTQpfDA7Qj1DO0c9SGQoeXwwLHV8MCw1MCl8MDtCPUJ8QztBPUdkKHl8MCx1fDAsMTgpfDA7RT1DO0s9SGQoeXwwLHV8MCw0Nil8MDtFPUJeKEV8Qyk7Qj1HZCh5fDAsdXwwLDQxKXwwO2Y9QztiPUhkKHl8MCx1fDAsMjMpfDA7Zj1FXihmfEMpO0U9ZyszNDR8MDtJPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO009RGQoSnwwLE18MCwxMDYyMTcwMDgsLTk0OTIwMjUyNSl8MDtFPURkKE18MCxDfDAsSXwwLEV8MCl8MDtmPURkKEV8MCxDfDAsKEh8RyleKEF8SyleKEJ8Yil8MCxmfDApfDA7Zj1EZChmfDAsQ3wwLChEXkYpJnleRHwwLChMXngpJnVeTHwwKXwwO2I9QztCPUdkKGp8MCxsfDAsMjgpfDA7Sz1DO0E9SGQoanwwLGx8MCwzNil8MDtLPUt8QztHPUdkKGp8MCxsfDAsMzQpfDA7SD1DO0U9SGQoanwwLGx8MCwzMCl8MDtIPUteKEh8Qyk7Sz1HZChqfDAsbHwwLDM5KXwwO0k9QztNPUhkKGp8MCxsfDAsMjUpfDA7ST1EZCgob3xtKSZqfG8mbXwwLChzfHApJmx8cyZwfDAsKEJ8QSleKEd8RSleKEt8TSl8MCxIXihJfEMpfDApfDA7SD1DO3Y9RGQocnwwLHZ8MCxmfDAsYnwwKXwwO3I9QztiPURkKEl8MCxIfDAsZnwwLGJ8MCl8MDtmPUM7SD1HZCh2fDAscnwwLDE0KXwwO0k9QztNPUhkKHZ8MCxyfDAsNTApfDA7ST1JfEM7Sz1HZCh2fDAscnwwLDE4KXwwO0U9QztHPUhkKHZ8MCxyfDAsNDYpfDA7RT1JXihFfEMpO0k9R2QodnwwLHJ8MCw0MSl8MDtBPUM7Qj1IZCh2fDAscnwwLDIzKXwwO0E9RV4oQXxDKTtFPWcrMzUyfDA7Sj1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtMPURkKER8MCxMfDAsLTY4ODk1ODk1MiwtNzc4OTAxNDc5KXwwO0U9RGQoTHwwLEN8MCxKfDAsRXwwKXwwO0E9RGQoRXwwLEN8MCwoSHxNKV4oS3xHKV4oSXxCKXwwLEF8MCl8MDtBPURkKEF8MCxDfDAsKEZeeSkmdl5GfDAsKHhedSkmcl54fDApfDA7Qj1DO0k9R2QoYnwwLGZ8MCwyOCl8MDtHPUM7Sz1IZChifDAsZnwwLDM2KXwwO0c9R3xDO009R2QoYnwwLGZ8MCwzNCl8MDtIPUM7RT1IZChifDAsZnwwLDMwKXwwO0g9R14oSHxDKTtHPUdkKGJ8MCxmfDAsMzkpfDA7Sj1DO0w9SGQoYnwwLGZ8MCwyNSl8MDtKPURkKChtfGopJmJ8bSZqfDAsKHB8bCkmZnxwJmx8MCwoSXxLKV4oTXxFKV4oR3xMKXwwLEheKEp8Qyl8MCl8MDtIPUM7cz1EZChvfDAsc3wwLEF8MCxCfDApfDA7bz1DO0I9RGQoSnwwLEh8MCxBfDAsQnwwKXwwO0E9QztIPUdkKHN8MCxvfDAsMTQpfDA7Sj1DO0w9SGQoc3wwLG98MCw1MCl8MDtKPUp8QztHPUdkKHN8MCxvfDAsMTgpfDA7RT1DO009SGQoc3wwLG98MCw0Nil8MDtFPUpeKEV8Qyk7Sj1HZChzfDAsb3wwLDQxKXwwO0s9QztJPUhkKHN8MCxvfDAsMjMpfDA7Sz1FXihLfEMpO0U9ZyszNjB8MDtEPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO3g9RGQoRnwwLHh8MCwxNDMyNzI1Nzc2LC02OTQ2MTQ0OTIpfDA7RT1EZCh4fDAsQ3wwLER8MCxFfDApfDA7Sz1EZChFfDAsQ3wwLChIfEwpXihHfE0pXihKfEkpfDAsS3wwKXwwO0s9RGQoS3wwLEN8MCwoeV52KSZzXnl8MCwodV5yKSZvXnV8MCl8MDtJPUM7Sj1HZChCfDAsQXwwLDI4KXwwO009QztHPUhkKEJ8MCxBfDAsMzYpfDA7TT1NfEM7TD1HZChCfDAsQXwwLDM0KXwwO0g9QztFPUhkKEJ8MCxBfDAsMzApfDA7SD1NXihIfEMpO009R2QoQnwwLEF8MCwzOSl8MDtEPUM7eD1IZChCfDAsQXwwLDI1KXwwO0Q9RGQoKGp8YikmQnxqJmJ8MCwobHxmKSZBfGwmZnwwLChKfEcpXihMfEUpXihNfHgpfDAsSF4oRHxDKXwwKXwwO0g9QztwPURkKG18MCxwfDAsS3wwLEl8MCl8MDttPUM7ST1EZChEfDAsSHwwLEt8MCxJfDApfDA7Sz1DO0g9R2QocHwwLG18MCwxNCl8MDtEPUM7eD1IZChwfDAsbXwwLDUwKXwwO0Q9RHxDO009R2QocHwwLG18MCwxOCl8MDtFPUM7TD1IZChwfDAsbXwwLDQ2KXwwO0U9RF4oRXxDKTtEPUdkKHB8MCxtfDAsNDEpfDA7Rz1DO0o9SGQocHwwLG18MCwyMyl8MDtHPUVeKEd8Qyk7RT1nKzM2OHwwO0Y9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7dT1EZCh5fDAsdXwwLDE0NjcwMzE1OTQsLTIwMDM5NTM4Nyl8MDtFPURkKHV8MCxDfDAsRnwwLEV8MCl8MDtHPURkKEV8MCxDfDAsKEh8eCleKE18TCleKER8Sil8MCxHfDApfDA7Rz1EZChHfDAsQ3wwLCh2XnMpJnBednwwLChyXm8pJm1ecnwwKXwwO0o9QztEPUdkKEl8MCxLfDAsMjgpfDA7TD1DO009SGQoSXwwLEt8MCwzNil8MDtMPUx8Qzt4PUdkKEl8MCxLfDAsMzQpfDA7SD1DO0U9SGQoSXwwLEt8MCwzMCl8MDtIPUxeKEh8Qyk7TD1HZChJfDAsS3wwLDM5KXwwO0Y9Qzt1PUhkKEl8MCxLfDAsMjUpfDA7Rj1EZCgoYnxCKSZJfGImQnwwLChmfEEpJkt8ZiZBfDAsKER8TSleKHh8RSleKEx8dSl8MCxIXihGfEMpfDApfDA7SD1DO2w9RGQoanwwLGx8MCxHfDAsSnwwKXwwO2o9QztKPURkKEZ8MCxIfDAsR3wwLEp8MCl8MDtHPUM7SD1HZChsfDAsanwwLDE0KXwwO0Y9Qzt1PUhkKGx8MCxqfDAsNTApfDA7Rj1GfEM7TD1HZChsfDAsanwwLDE4KXwwO0U9Qzt4PUhkKGx8MCxqfDAsNDYpfDA7RT1GXihFfEMpO0Y9R2QobHwwLGp8MCw0MSl8MDtNPUM7RD1IZChsfDAsanwwLDIzKXwwO009RV4oTXxDKTtFPWcrMzc2fDA7eT1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtyPURkKHZ8MCxyfDAsODUxMTY5NzIwLDI3NTQyMzM0NCl8MDtFPURkKHJ8MCxDfDAseXwwLEV8MCl8MDtNPURkKEV8MCxDfDAsKEh8dSleKEx8eCleKEZ8RCl8MCxNfDApfDA7TT1EZChNfDAsQ3wwLChzXnApJmxec3wwLChvXm0pJmpeb3wwKXwwO0Q9QztGPUdkKEp8MCxHfDAsMjgpfDA7eD1DO0w9SGQoSnwwLEd8MCwzNil8MDt4PXh8Qzt1PUdkKEp8MCxHfDAsMzQpfDA7SD1DO0U9SGQoSnwwLEd8MCwzMCl8MDtIPXheKEh8Qyk7eD1HZChKfDAsR3wwLDM5KXwwO3k9QztyPUhkKEp8MCxHfDAsMjUpfDA7eT1EZCgoQnxJKSZKfEImSXwwLChBfEspJkd8QSZLfDAsKEZ8TCleKHV8RSleKHh8cil8MCxIXih5fEMpfDApfDA7SD1DO2Y9RGQoYnwwLGZ8MCxNfDAsRHwwKXwwO2I9QztEPURkKHl8MCxIfDAsTXwwLER8MCl8MDtNPUM7SD1HZChmfDAsYnwwLDE0KXwwO3k9QztyPUhkKGZ8MCxifDAsNTApfDA7eT15fEM7eD1HZChmfDAsYnwwLDE4KXwwO0U9Qzt1PUhkKGZ8MCxifDAsNDYpfDA7RT15XihFfEMpO3k9R2QoZnwwLGJ8MCw0MSl8MDtMPUM7Rj1IZChmfDAsYnwwLDIzKXwwO0w9RV4oTHxDKTtFPWcrMzg0fDA7dj1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtvPURkKHN8MCxvfDAsLTExOTQxNDM1NDQsNDMwMjI3NzM0KXwwO0U9RGQob3wwLEN8MCx2fDAsRXwwKXwwO0w9RGQoRXwwLEN8MCwoSHxyKV4oeHx1KV4oeXxGKXwwLEx8MCl8MDtMPURkKEx8MCxDfDAsKHBebCkmZl5wfDAsKG1eaikmYl5tfDApfDA7Rj1DO3k9R2QoRHwwLE18MCwyOCl8MDt1PUM7eD1IZChEfDAsTXwwLDM2KXwwO3U9dXxDO3I9R2QoRHwwLE18MCwzNCl8MDtIPUM7RT1IZChEfDAsTXwwLDMwKXwwO0g9dV4oSHxDKTt1PUdkKER8MCxNfDAsMzkpfDA7dj1DO289SGQoRHwwLE18MCwyNSl8MDt2PURkKChJfEopJkR8SSZKfDAsKEt8RykmTXxLJkd8MCwoeXx4KV4ocnxFKV4odXxvKXwwLEheKHZ8Qyl8MCl8MDtIPUM7QT1EZChCfDAsQXwwLEx8MCxGfDApfDA7Qj1DO0Y9RGQodnwwLEh8MCxMfDAsRnwwKXwwO0w9QztIPUdkKEF8MCxCfDAsMTQpfDA7dj1DO289SGQoQXwwLEJ8MCw1MCl8MDt2PXZ8Qzt1PUdkKEF8MCxCfDAsMTgpfDA7RT1DO3I9SGQoQXwwLEJ8MCw0Nil8MDtFPXZeKEV8Qyk7dj1HZChBfDAsQnwwLDQxKXwwO3g9Qzt5PUhkKEF8MCxCfDAsMjMpfDA7eD1FXih4fEMpO0U9ZyszOTJ8MDtzPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO209RGQocHwwLG18MCwxMzYzMjU4MTk1LDUwNjk0ODYxNil8MDtFPURkKG18MCxDfDAsc3wwLEV8MCl8MDt4PURkKEV8MCxDfDAsKEh8byleKHV8cileKHZ8eSl8MCx4fDApfDA7eD1EZCh4fDAsQ3wwLChsXmYpJkFebHwwLChqXmIpJkJeanwwKXwwO3k9Qzt2PUdkKEZ8MCxMfDAsMjgpfDA7cj1DO3U9SGQoRnwwLEx8MCwzNil8MDtyPXJ8QztvPUdkKEZ8MCxMfDAsMzQpfDA7SD1DO0U9SGQoRnwwLEx8MCwzMCl8MDtIPXJeKEh8Qyk7cj1HZChGfDAsTHwwLDM5KXwwO3M9QzttPUhkKEZ8MCxMfDAsMjUpfDA7cz1EZCgoSnxEKSZGfEomRHwwLChHfE0pJkx8RyZNfDAsKHZ8dSleKG98RSleKHJ8bSl8MCxIXihzfEMpfDApfDA7SD1DO0s9RGQoSXwwLEt8MCx4fDAseXwwKXwwO0k9Qzt5PURkKHN8MCxIfDAseHwwLHl8MCl8MDt4PUM7SD1HZChLfDAsSXwwLDE0KXwwO3M9QzttPUhkKEt8MCxJfDAsNTApfDA7cz1zfEM7cj1HZChLfDAsSXwwLDE4KXwwO0U9QztvPUhkKEt8MCxJfDAsNDYpfDA7RT1zXihFfEMpO3M9R2QoS3wwLEl8MCw0MSl8MDt1PUM7dj1IZChLfDAsSXwwLDIzKXwwO3U9RV4odXxDKTtFPWcrNDAwfDA7cD1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtqPURkKGx8MCxqfDAsLTU0NDI4MTcwMyw2NTkwNjA1NTYpfDA7RT1EZChqfDAsQ3wwLHB8MCxFfDApfDA7dT1EZChFfDAsQ3wwLChIfG0pXihyfG8pXihzfHYpfDAsdXwwKXwwO3U9RGQodXwwLEN8MCwoZl5BKSZLXmZ8MCwoYl5CKSZJXmJ8MCl8MDt2PUM7cz1HZCh5fDAseHwwLDI4KXwwO289QztyPUhkKHl8MCx4fDAsMzYpfDA7bz1vfEM7bT1HZCh5fDAseHwwLDM0KXwwO0g9QztFPUhkKHl8MCx4fDAsMzApfDA7SD1vXihIfEMpO289R2QoeXwwLHh8MCwzOSl8MDtwPUM7aj1IZCh5fDAseHwwLDI1KXwwO3A9RGQoKER8RikmeXxEJkZ8MCwoTXxMKSZ4fE0mTHwwLChzfHIpXihtfEUpXihvfGopfDAsSF4ocHxDKXwwKXwwO0g9QztHPURkKEp8MCxHfDAsdXwwLHZ8MCl8MDtKPUM7dj1EZChwfDAsSHwwLHV8MCx2fDApfDA7dT1DO0g9R2QoR3wwLEp8MCwxNCl8MDtwPUM7aj1IZChHfDAsSnwwLDUwKXwwO3A9cHxDO289R2QoR3wwLEp8MCwxOCl8MDtFPUM7bT1IZChHfDAsSnwwLDQ2KXwwO0U9cF4oRXxDKTtwPUdkKEd8MCxKfDAsNDEpfDA7cj1DO3M9SGQoR3wwLEp8MCwyMyl8MDtyPUVeKHJ8Qyk7RT1nKzQwOHwwO2w9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7Yj1EZChmfDAsYnwwLC01MDk5MTcwMTYsODgzOTk3ODc3KXwwO0U9RGQoYnwwLEN8MCxsfDAsRXwwKXwwO3I9RGQoRXwwLEN8MCwoSHxqKV4ob3xtKV4ocHxzKXwwLHJ8MCl8MDtyPURkKHJ8MCxDfDAsKEFeSykmR15BfDAsKEJeSSkmSl5CfDApfDA7cz1DO3A9R2QodnwwLHV8MCwyOCl8MDttPUM7bz1IZCh2fDAsdXwwLDM2KXwwO209bXxDO2o9R2QodnwwLHV8MCwzNCl8MDtIPUM7RT1IZCh2fDAsdXwwLDMwKXwwO0g9bV4oSHxDKTttPUdkKHZ8MCx1fDAsMzkpfDA7bD1DO2I9SGQodnwwLHV8MCwyNSl8MDtsPURkKChGfHkpJnZ8RiZ5fDAsKEx8eCkmdXxMJnh8MCwocHxvKV4oanxFKV4obXxiKXwwLEheKGx8Qyl8MCl8MDtIPUM7TT1EZChEfDAsTXwwLHJ8MCxzfDApfDA7RD1DO3M9RGQobHwwLEh8MCxyfDAsc3wwKXwwO3I9QztIPUdkKE18MCxEfDAsMTQpfDA7bD1DO2I9SGQoTXwwLER8MCw1MCl8MDtsPWx8QzttPUdkKE18MCxEfDAsMTgpfDA7RT1DO2o9SGQoTXwwLER8MCw0Nil8MDtFPWxeKEV8Qyk7bD1HZChNfDAsRHwwLDQxKXwwO289QztwPUhkKE18MCxEfDAsMjMpfDA7bz1FXihvfEMpO0U9Zys0MTZ8MDtmPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO0I9RGQoQXwwLEJ8MCwtOTc2NjU5ODY5LDk1ODEzOTU3MSl8MDtFPURkKEJ8MCxDfDAsZnwwLEV8MCl8MDtvPURkKEV8MCxDfDAsKEh8YileKG18aileKGx8cCl8MCxvfDApfDA7bz1EZChvfDAsQ3wwLChLXkcpJk1eS3wwLChJXkopJkReSXwwKXwwO3A9QztsPUdkKHN8MCxyfDAsMjgpfDA7aj1DO209SGQoc3wwLHJ8MCwzNil8MDtqPWp8QztiPUdkKHN8MCxyfDAsMzQpfDA7SD1DO0U9SGQoc3wwLHJ8MCwzMCl8MDtIPWpeKEh8Qyk7aj1HZChzfDAscnwwLDM5KXwwO2Y9QztCPUhkKHN8MCxyfDAsMjUpfDA7Zj1EZCgoeXx2KSZzfHkmdnwwLCh4fHUpJnJ8eCZ1fDAsKGx8bSleKGJ8RSleKGp8Qil8MCxIXihmfEMpfDApfDA7SD1DO0w9RGQoRnwwLEx8MCxvfDAscHwwKXwwO0Y9QztwPURkKGZ8MCxIfDAsb3wwLHB8MCl8MDtvPUM7SD1HZChMfDAsRnwwLDE0KXwwO2Y9QztCPUhkKEx8MCxGfDAsNTApfDA7Zj1mfEM7aj1HZChMfDAsRnwwLDE4KXwwO0U9QztiPUhkKEx8MCxGfDAsNDYpfDA7RT1mXihFfEMpO2Y9R2QoTHwwLEZ8MCw0MSl8MDttPUM7bD1IZChMfDAsRnwwLDIzKXwwO209RV4obXxDKTtFPWcrNDI0fDA7QT1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtJPURkKEt8MCxJfDAsLTQ4MjI0Mzg5MywxMzIyODIyMjE4KXwwO0U9RGQoSXwwLEN8MCxBfDAsRXwwKXwwO209RGQoRXwwLEN8MCwoSHxCKV4oanxiKV4oZnxsKXwwLG18MCl8MDttPURkKG18MCxDfDAsKEdeTSkmTF5HfDAsKEpeRCkmRl5KfDApfDA7bD1DO2Y9R2QocHwwLG98MCwyOCl8MDtiPUM7aj1IZChwfDAsb3wwLDM2KXwwO2I9YnxDO0I9R2QocHwwLG98MCwzNCl8MDtIPUM7RT1IZChwfDAsb3wwLDMwKXwwO0g9Yl4oSHxDKTtiPUdkKHB8MCxvfDAsMzkpfDA7QT1DO0k9SGQocHwwLG98MCwyNSl8MDtBPURkKCh2fHMpJnB8diZzfDAsKHV8cikmb3x1JnJ8MCwoZnxqKV4oQnxFKV4oYnxJKXwwLEheKEF8Qyl8MCl8MDtIPUM7eD1EZCh5fDAseHwwLG18MCxsfDApfDA7eT1DO2w9RGQoQXwwLEh8MCxtfDAsbHwwKXwwO209QztIPUdkKHh8MCx5fDAsMTQpfDA7QT1DO0k9SGQoeHwwLHl8MCw1MCl8MDtBPUF8QztiPUdkKHh8MCx5fDAsMTgpfDA7RT1DO0I9SGQoeHwwLHl8MCw0Nil8MDtFPUFeKEV8Qyk7QT1HZCh4fDAseXwwLDQxKXwwO2o9QztmPUhkKHh8MCx5fDAsMjMpfDA7aj1FXihqfEMpO0U9Zys0MzJ8MDtLPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO0o9RGQoR3wwLEp8MCwyMDAzMDM0OTk1LDE1MzcwMDIwNjMpfDA7RT1EZChKfDAsQ3wwLEt8MCxFfDApfDA7aj1EZChFfDAsQ3wwLChIfEkpXihifEIpXihBfGYpfDAsanwwKXwwO2o9RGQoanwwLEN8MCwoTV5MKSZ4Xk18MCwoRF5GKSZ5XkR8MCl8MDtmPUM7QT1HZChsfDAsbXwwLDI4KXwwO0I9QztiPUhkKGx8MCxtfDAsMzYpfDA7Qj1CfEM7ST1HZChsfDAsbXwwLDM0KXwwO0g9QztFPUhkKGx8MCxtfDAsMzApfDA7SD1CXihIfEMpO0I9R2QobHwwLG18MCwzOSl8MDtLPUM7Sj1IZChsfDAsbXwwLDI1KXwwO0s9RGQoKHN8cCkmbHxzJnB8MCwocnxvKSZtfHImb3wwLChBfGIpXihJfEUpXihCfEopfDAsSF4oS3xDKXwwKXwwO0g9Qzt1PURkKHZ8MCx1fDAsanwwLGZ8MCl8MDt2PUM7Zj1EZChLfDAsSHwwLGp8MCxmfDApfDA7aj1DO0g9R2QodXwwLHZ8MCwxNCl8MDtLPUM7Sj1IZCh1fDAsdnwwLDUwKXwwO0s9S3xDO0I9R2QodXwwLHZ8MCwxOCl8MDtFPUM7ST1IZCh1fDAsdnwwLDQ2KXwwO0U9S14oRXxDKTtLPUdkKHV8MCx2fDAsNDEpfDA7Yj1DO0E9SGQodXwwLHZ8MCwyMyl8MDtiPUVeKGJ8Qyk7RT1nKzQ0MHwwO0c9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7RD1EZChNfDAsRHwwLC02OTI5MzAzOTcsMTc0Nzg3Mzc3OSl8MDtFPURkKER8MCxDfDAsR3wwLEV8MCl8MDtiPURkKEV8MCxDfDAsKEh8SileKEJ8SSleKEt8QSl8MCxifDApfDA7Yj1EZChifDAsQ3wwLChMXngpJnVeTHwwLChGXnkpJnZeRnwwKXwwO0E9QztLPUdkKGZ8MCxqfDAsMjgpfDA7ST1DO0I9SGQoZnwwLGp8MCwzNil8MDtJPUl8QztKPUdkKGZ8MCxqfDAsMzQpfDA7SD1DO0U9SGQoZnwwLGp8MCwzMCl8MDtIPUleKEh8Qyk7ST1HZChmfDAsanwwLDM5KXwwO0c9QztEPUhkKGZ8MCxqfDAsMjUpfDA7Rz1EZCgocHxsKSZmfHAmbHwwLChvfG0pJmp8byZtfDAsKEt8QileKEp8RSleKEl8RCl8MCxIXihHfEMpfDApfDA7SD1DO3I9RGQoc3wwLHJ8MCxifDAsQXwwKXwwO3M9QztBPURkKEd8MCxIfDAsYnwwLEF8MCl8MDtiPUM7SD1HZChyfDAsc3wwLDE0KXwwO0c9QztEPUhkKHJ8MCxzfDAsNTApfDA7Rz1HfEM7ST1HZChyfDAsc3wwLDE4KXwwO0U9QztKPUhkKHJ8MCxzfDAsNDYpfDA7RT1HXihFfEMpO0c9R2QocnwwLHN8MCw0MSl8MDtCPUM7Sz1IZChyfDAsc3wwLDIzKXwwO0I9RV4oQnxDKTtFPWcrNDQ4fDA7TT1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtGPURkKEx8MCxGfDAsMTU3NTk5MDAxMiwxOTU1NTYyMjIyKXwwO0U9RGQoRnwwLEN8MCxNfDAsRXwwKXwwO0I9RGQoRXwwLEN8MCwoSHxEKV4oSXxKKV4oR3xLKXwwLEJ8MCl8MDtCPURkKEJ8MCxDfDAsKHhedSkmcl54fDAsKHledikmc155fDApfDA7Sz1DO0c9R2QoQXwwLGJ8MCwyOCl8MDtKPUM7ST1IZChBfDAsYnwwLDM2KXwwO0o9SnxDO0Q9R2QoQXwwLGJ8MCwzNCl8MDtIPUM7RT1IZChBfDAsYnwwLDMwKXwwO0g9Sl4oSHxDKTtKPUdkKEF8MCxifDAsMzkpfDA7TT1DO0Y9SGQoQXwwLGJ8MCwyNSl8MDtNPURkKChsfGYpJkF8bCZmfDAsKG18aikmYnxtJmp8MCwoR3xJKV4oRHxFKV4oSnxGKXwwLEheKE18Qyl8MCl8MDtIPUM7bz1EZChwfDAsb3wwLEJ8MCxLfDApfDA7cD1DO0s9RGQoTXwwLEh8MCxCfDAsS3wwKXwwO0I9QztIPUdkKG98MCxwfDAsMTQpfDA7TT1DO0Y9SGQob3wwLHB8MCw1MCl8MDtNPU18QztKPUdkKG98MCxwfDAsMTgpfDA7RT1DO0Q9SGQob3wwLHB8MCw0Nil8MDtFPU1eKEV8Qyk7TT1HZChvfDAscHwwLDQxKXwwO0k9QztHPUhkKG98MCxwfDAsMjMpfDA7ST1FXihJfEMpO0U9Zys0NTZ8MDtMPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO3k9RGQoeHwwLHl8MCwxMTI1NTkyOTI4LDIwMjQxMDQ4MTUpfDA7RT1EZCh5fDAsQ3wwLEx8MCxFfDApfDA7ST1EZChFfDAsQ3wwLChIfEYpXihKfEQpXihNfEcpfDAsSXwwKXwwO0k9RGQoSXwwLEN8MCwodV5yKSZvXnV8MCwodl5zKSZwXnZ8MCl8MDtHPUM7TT1HZChLfDAsQnwwLDI4KXwwO0Q9QztKPUhkKEt8MCxCfDAsMzYpfDA7RD1EfEM7Rj1HZChLfDAsQnwwLDM0KXwwO0g9QztFPUhkKEt8MCxCfDAsMzApfDA7SD1EXihIfEMpO0Q9R2QoS3wwLEJ8MCwzOSl8MDtMPUM7eT1IZChLfDAsQnwwLDI1KXwwO0w9RGQoKGZ8QSkmS3xmJkF8MCwoanxiKSZCfGomYnwwLChNfEopXihGfEUpXihEfHkpfDAsSF4oTHxDKXwwKXwwO0g9QzttPURkKGx8MCxtfDAsSXwwLEd8MCl8MDtsPUM7Rz1EZChMfDAsSHwwLEl8MCxHfDApfDA7ST1DO0g9R2QobXwwLGx8MCwxNCl8MDtMPUM7eT1IZChtfDAsbHwwLDUwKXwwO0w9THxDO0Q9R2QobXwwLGx8MCwxOCl8MDtFPUM7Rj1IZChtfDAsbHwwLDQ2KXwwO0U9TF4oRXxDKTtMPUdkKG18MCxsfDAsNDEpfDA7Sj1DO009SGQobXwwLGx8MCwyMyl8MDtKPUVeKEp8Qyk7RT1nKzQ2NHwwO3g9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7dj1EZCh1fDAsdnwwLC0xNTc4MDYyOTkwLC0yMDY3MjM2ODQ0KXwwO0U9RGQodnwwLEN8MCx4fDAsRXwwKXwwO0o9RGQoRXwwLEN8MCwoSHx5KV4oRHxGKV4oTHxNKXwwLEp8MCl8MDtKPURkKEp8MCxDfDAsKHJebykmbV5yfDAsKHNecCkmbF5zfDApfDA7TT1DO0w9R2QoR3wwLEl8MCwyOCl8MDtGPUM7RD1IZChHfDAsSXwwLDM2KXwwO0Y9RnxDO3k9R2QoR3wwLEl8MCwzNCl8MDtIPUM7RT1IZChHfDAsSXwwLDMwKXwwO0g9Rl4oSHxDKTtGPUdkKEd8MCxJfDAsMzkpfDA7eD1DO3Y9SGQoR3wwLEl8MCwyNSl8MDt4PURkKChBfEspJkd8QSZLfDAsKGJ8QikmSXxiJkJ8MCwoTHxEKV4oeXxFKV4oRnx2KXwwLEheKHh8Qyl8MCl8MDtIPUM7aj1EZChmfDAsanwwLEp8MCxNfDApfDA7Zj1DO009RGQoeHwwLEh8MCxKfDAsTXwwKXwwO0o9QztIPUdkKGp8MCxmfDAsMTQpfDA7eD1DO3Y9SGQoanwwLGZ8MCw1MCl8MDt4PXh8QztGPUdkKGp8MCxmfDAsMTgpfDA7RT1DO3k9SGQoanwwLGZ8MCw0Nil8MDtFPXheKEV8Qyk7eD1HZChqfDAsZnwwLDQxKXwwO0Q9QztMPUhkKGp8MCxmfDAsMjMpfDA7RD1FXihEfEMpO0U9Zys0NzJ8MDt1PWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO3M9RGQocnwwLHN8MCw0NDI3NzYwNDQsLTE5MzMxMTQ4NzIpfDA7RT1EZChzfDAsQ3wwLHV8MCxFfDApfDA7RD1EZChFfDAsQ3wwLChIfHYpXihGfHkpXih4fEwpfDAsRHwwKXwwO0Q9RGQoRHwwLEN8MCwob15tKSZqXm98MCwocF5sKSZmXnB8MCl8MDtMPUM7eD1HZChNfDAsSnwwLDI4KXwwO3k9QztGPUhkKE18MCxKfDAsMzYpfDA7eT15fEM7dj1HZChNfDAsSnwwLDM0KXwwO0g9QztFPUhkKE18MCxKfDAsMzApfDA7SD15XihIfEMpO3k9R2QoTXwwLEp8MCwzOSl8MDt1PUM7cz1IZChNfDAsSnwwLDI1KXwwO3U9RGQoKEt8RykmTXxLJkd8MCwoQnxJKSZKfEImSXwwLCh4fEYpXih2fEUpXih5fHMpfDAsSF4odXxDKXwwKXwwO0g9QztiPURkKEF8MCxifDAsRHwwLEx8MCl8MDtBPUM7TD1EZCh1fDAsSHwwLER8MCxMfDApfDA7RD1DO0g9R2QoYnwwLEF8MCwxNCl8MDt1PUM7cz1IZChifDAsQXwwLDUwKXwwO3U9dXxDO3k9R2QoYnwwLEF8MCwxOCl8MDtFPUM7dj1IZChifDAsQXwwLDQ2KXwwO0U9dV4oRXxDKTt1PUdkKGJ8MCxBfDAsNDEpfDA7Rj1DO3g9SGQoYnwwLEF8MCwyMyl8MDtGPUVeKEZ8Qyk7RT1nKzQ4MHwwO3I9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7cD1EZChvfDAscHwwLDU5MzY5ODM0NCwtMTg2NjUzMDgyMil8MDtFPURkKHB8MCxDfDAscnwwLEV8MCl8MDtGPURkKEV8MCxDfDAsKEh8cyleKHl8dileKHV8eCl8MCxGfDApfDA7Rj1EZChGfDAsQ3wwLChtXmopJmJebXwwLChsXmYpJkFebHwwKXwwO3g9Qzt1PUdkKEx8MCxEfDAsMjgpfDA7dj1DO3k9SGQoTHwwLER8MCwzNil8MDt2PXZ8QztzPUdkKEx8MCxEfDAsMzQpfDA7SD1DO0U9SGQoTHwwLER8MCwzMCl8MDtIPXZeKEh8Qyk7dj1HZChMfDAsRHwwLDM5KXwwO3I9QztwPUhkKEx8MCxEfDAsMjUpfDA7cj1EZCgoR3xNKSZMfEcmTXwwLChJfEopJkR8SSZKfDAsKHV8eSleKHN8RSleKHZ8cCl8MCxIXihyfEMpfDApfDA7SD1DO0I9RGQoS3wwLEJ8MCxGfDAseHwwKXwwO0s9Qzt4PURkKHJ8MCxIfDAsRnwwLHh8MCl8MDtGPUM7SD1HZChCfDAsS3wwLDE0KXwwO3I9QztwPUhkKEJ8MCxLfDAsNTApfDA7cj1yfEM7dj1HZChCfDAsS3wwLDE4KXwwO0U9QztzPUhkKEJ8MCxLfDAsNDYpfDA7RT1yXihFfEMpO3I9R2QoQnwwLEt8MCw0MSl8MDt5PUM7dT1IZChCfDAsS3wwLDIzKXwwO3k9RV4oeXxDKTtFPWcrNDg4fDA7bz1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtsPURkKG18MCxsfDAsLTU2MTg1NzA0NywtMTUzODIzMzEwOSl8MDtFPURkKGx8MCxDfDAsb3wwLEV8MCl8MDt5PURkKEV8MCxDfDAsKEh8cCleKHZ8cyleKHJ8dSl8MCx5fDApfDA7eT1EZCh5fDAsQ3wwLChqXmIpJkJeanwwLChmXkEpJkteZnwwKXwwO3U9QztyPUdkKHh8MCxGfDAsMjgpfDA7cz1DO3Y9SGQoeHwwLEZ8MCwzNil8MDtzPXN8QztwPUdkKHh8MCxGfDAsMzQpfDA7SD1DO0U9SGQoeHwwLEZ8MCwzMCl8MDtIPXNeKEh8Qyk7cz1HZCh4fDAsRnwwLDM5KXwwO289QztsPUhkKHh8MCxGfDAsMjUpfDA7bz1EZCgoTXxMKSZ4fE0mTHwwLChKfEQpJkZ8SiZEfDAsKHJ8dileKHB8RSleKHN8bCl8MCxIXihvfEMpfDApfDA7SD1DO0k9RGQoR3wwLEl8MCx5fDAsdXwwKXwwO0c9Qzt1PURkKG98MCxIfDAseXwwLHV8MCl8MDt5PUM7SD1HZChJfDAsR3wwLDE0KXwwO289QztsPUhkKEl8MCxHfDAsNTApfDA7bz1vfEM7cz1HZChJfDAsR3wwLDE4KXwwO0U9QztwPUhkKEl8MCxHfDAsNDYpfDA7RT1vXihFfEMpO289R2QoSXwwLEd8MCw0MSl8MDt2PUM7cj1IZChJfDAsR3wwLDIzKXwwO3Y9RV4odnxDKTtFPWcrNDk2fDA7bT1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtmPURkKGp8MCxmfDAsLTEyOTU2MTU3MjMsLTEwOTA5MzU4MTcpfDA7RT1EZChmfDAsQ3wwLG18MCxFfDApfDA7dj1EZChFfDAsQ3wwLChIfGwpXihzfHApXihvfHIpfDAsdnwwKXwwO3Y9RGQodnwwLEN8MCwoYl5CKSZJXmJ8MCwoQV5LKSZHXkF8MCl8MDtyPUM7bz1HZCh1fDAseXwwLDI4KXwwO3A9QztzPUhkKHV8MCx5fDAsMzYpfDA7cD1wfEM7bD1HZCh1fDAseXwwLDM0KXwwO0g9QztFPUhkKHV8MCx5fDAsMzApfDA7SD1wXihIfEMpO3A9R2QodXwwLHl8MCwzOSl8MDttPUM7Zj1IZCh1fDAseXwwLDI1KXwwO209RGQoKEx8eCkmdXxMJnh8MCwoRHxGKSZ5fEQmRnwwLChvfHMpXihsfEUpXihwfGYpfDAsSF4obXxDKXwwKXwwO0g9QztKPURkKE18MCxKfDAsdnwwLHJ8MCl8MDtNPUM7cj1EZChtfDAsSHwwLHZ8MCxyfDApfDA7dj1DO0g9R2QoSnwwLE18MCwxNCl8MDttPUM7Zj1IZChKfDAsTXwwLDUwKXwwO209bXxDO3A9R2QoSnwwLE18MCwxOCl8MDtFPUM7bD1IZChKfDAsTXwwLDQ2KXwwO0U9bV4oRXxDKTttPUdkKEp8MCxNfDAsNDEpfDA7cz1DO289SGQoSnwwLE18MCwyMyl8MDtzPUVeKHN8Qyk7RT1nKzUwNHwwO2o9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7QT1EZChifDAsQXwwLC00NzkwNDY4NjksLTk2NTY0MTk5OCl8MDtFPURkKEF8MCxDfDAsanwwLEV8MCl8MDtzPURkKEV8MCxDfDAsKEh8ZileKHB8bCleKG18byl8MCxzfDApfDA7cz1EZChzfDAsQ3wwLChCXkkpJkpeQnwwLChLXkcpJk1eS3wwKXwwO289QzttPUdkKHJ8MCx2fDAsMjgpfDA7bD1DO3A9SGQocnwwLHZ8MCwzNil8MDtsPWx8QztmPUdkKHJ8MCx2fDAsMzQpfDA7SD1DO0U9SGQocnwwLHZ8MCwzMCl8MDtIPWxeKEh8Qyk7bD1HZChyfDAsdnwwLDM5KXwwO2o9QztBPUhkKHJ8MCx2fDAsMjUpfDA7aj1EZCgoeHx1KSZyfHgmdXwwLChGfHkpJnZ8RiZ5fDAsKG18cCleKGZ8RSleKGx8QSl8MCxIXihqfEMpfDApfDA7SD1DO0Q9RGQoTHwwLER8MCxzfDAsb3wwKXwwO0w9QztvPURkKGp8MCxIfDAsc3wwLG98MCl8MDtzPUM7SD1HZChEfDAsTHwwLDE0KXwwO2o9QztBPUhkKER8MCxMfDAsNTApfDA7aj1qfEM7bD1HZChEfDAsTHwwLDE4KXwwO0U9QztmPUhkKER8MCxMfDAsNDYpfDA7RT1qXihFfEMpO2o9R2QoRHwwLEx8MCw0MSl8MDtwPUM7bT1IZChEfDAsTHwwLDIzKXwwO3A9RV4ocHxDKTtFPWcrNTEyfDA7Yj1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtLPURkKEJ8MCxLfDAsLTM2NjU4MzM5NiwtOTAzMzk3NjgyKXwwO0U9RGQoS3wwLEN8MCxifDAsRXwwKXwwO3A9RGQoRXwwLEN8MCwoSHxBKV4obHxmKV4oanxtKXwwLHB8MCl8MDtwPURkKHB8MCxDfDAsKEleSikmRF5JfDAsKEdeTSkmTF5HfDApfDA7bT1DO2o9R2Qob3wwLHN8MCwyOCl8MDtmPUM7bD1IZChvfDAsc3wwLDM2KXwwO2Y9ZnxDO0E9R2Qob3wwLHN8MCwzNCl8MDtIPUM7RT1IZChvfDAsc3wwLDMwKXwwO0g9Zl4oSHxDKTtmPUdkKG98MCxzfDAsMzkpfDA7Yj1DO0s9SGQob3wwLHN8MCwyNSl8MDtiPURkKCh1fHIpJm98dSZyfDAsKHl8dikmc3x5JnZ8MCwoanxsKV4oQXxFKV4oZnxLKXwwLEheKGJ8Qyl8MCl8MDtIPUM7Rj1EZCh4fDAsRnwwLHB8MCxtfDApfDA7eD1DO209RGQoYnwwLEh8MCxwfDAsbXwwKXwwO3A9QztIPUdkKEZ8MCx4fDAsMTQpfDA7Yj1DO0s9SGQoRnwwLHh8MCw1MCl8MDtiPWJ8QztmPUdkKEZ8MCx4fDAsMTgpfDA7RT1DO0E9SGQoRnwwLHh8MCw0Nil8MDtFPWJeKEV8Qyk7Yj1HZChGfDAseHwwLDQxKXwwO2w9QztqPUhkKEZ8MCx4fDAsMjMpfDA7bD1FXihsfEMpO0U9Zys1MjB8MDtCPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO0c9RGQoSXwwLEd8MCw1NjYyODA3MTEsLTc3OTcwMDAyNSl8MDtFPURkKEd8MCxDfDAsQnwwLEV8MCl8MDtsPURkKEV8MCxDfDAsKEh8SyleKGZ8QSleKGJ8ail8MCxsfDApfDA7bD1EZChsfDAsQ3wwLChKXkQpJkZeSnwwLChNXkwpJnheTXwwKXwwO2o9QztiPUdkKG18MCxwfDAsMjgpfDA7QT1DO2Y9SGQobXwwLHB8MCwzNil8MDtBPUF8QztLPUdkKG18MCxwfDAsMzQpfDA7SD1DO0U9SGQobXwwLHB8MCwzMCl8MDtIPUFeKEh8Qyk7QT1HZChtfDAscHwwLDM5KXwwO0I9QztHPUhkKG18MCxwfDAsMjUpfDA7Qj1EZCgocnxvKSZtfHImb3wwLCh2fHMpJnB8diZzfDAsKGJ8ZileKEt8RSleKEF8Ryl8MCxIXihCfEMpfDApfDA7SD1DO3k9RGQodXwwLHl8MCxsfDAsanwwKXwwO3U9QztqPURkKEJ8MCxIfDAsbHwwLGp8MCl8MDtsPUM7SD1HZCh5fDAsdXwwLDE0KXwwO0I9QztHPUhkKHl8MCx1fDAsNTApfDA7Qj1CfEM7QT1HZCh5fDAsdXwwLDE4KXwwO0U9QztLPUhkKHl8MCx1fDAsNDYpfDA7RT1CXihFfEMpO0I9R2QoeXwwLHV8MCw0MSl8MDtmPUM7Yj1IZCh5fDAsdXwwLDIzKXwwO2Y9RV4oZnxDKTtFPWcrNTI4fDA7ST1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtNPURkKEp8MCxNfDAsLTg0MDg5Nzc2MiwtMzU0Nzc5NjkwKXwwO0U9RGQoTXwwLEN8MCxJfDAsRXwwKXwwO2Y9RGQoRXwwLEN8MCwoSHxHKV4oQXxLKV4oQnxiKXwwLGZ8MCl8MDtmPURkKGZ8MCxDfDAsKEReRikmeV5EfDAsKExeeCkmdV5MfDApfDA7Yj1DO0I9R2QoanwwLGx8MCwyOCl8MDtLPUM7QT1IZChqfDAsbHwwLDM2KXwwO0s9S3xDO0c9R2QoanwwLGx8MCwzNCl8MDtIPUM7RT1IZChqfDAsbHwwLDMwKXwwO0g9S14oSHxDKTtLPUdkKGp8MCxsfDAsMzkpfDA7ST1DO009SGQoanwwLGx8MCwyNSl8MDtJPURkKChvfG0pJmp8byZtfDAsKHN8cCkmbHxzJnB8MCwoQnxBKV4oR3xFKV4oS3xNKXwwLEheKEl8Qyl8MCl8MDtIPUM7dj1EZChyfDAsdnwwLGZ8MCxifDApfDA7cj1DO2I9RGQoSXwwLEh8MCxmfDAsYnwwKXwwO2Y9QztIPUdkKHZ8MCxyfDAsMTQpfDA7ST1DO009SGQodnwwLHJ8MCw1MCl8MDtJPUl8QztLPUdkKHZ8MCxyfDAsMTgpfDA7RT1DO0c9SGQodnwwLHJ8MCw0Nil8MDtFPUleKEV8Qyk7ST1HZCh2fDAscnwwLDQxKXwwO0E9QztCPUhkKHZ8MCxyfDAsMjMpfDA7QT1FXihBfEMpO0U9Zys1MzZ8MDtKPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO0w9RGQoRHwwLEx8MCwtMjk0NzI3MzA0LC0xNzYzMzcwMjUpfDA7RT1EZChMfDAsQ3wwLEp8MCxFfDApfDA7QT1EZChFfDAsQ3wwLChIfE0pXihLfEcpXihJfEIpfDAsQXwwKXwwO0E9RGQoQXwwLEN8MCwoRl55KSZ2XkZ8MCwoeF51KSZyXnh8MCl8MDtCPUM7ST1HZChifDAsZnwwLDI4KXwwO0c9QztLPUhkKGJ8MCxmfDAsMzYpfDA7Rz1HfEM7TT1HZChifDAsZnwwLDM0KXwwO0g9QztFPUhkKGJ8MCxmfDAsMzApfDA7SD1HXihIfEMpO0c9R2QoYnwwLGZ8MCwzOSl8MDtKPUM7TD1IZChifDAsZnwwLDI1KXwwO0o9RGQoKG18aikmYnxtJmp8MCwocHxsKSZmfHAmbHwwLChJfEspXihNfEUpXihHfEwpfDAsSF4oSnxDKXwwKXwwO0g9QztzPURkKG98MCxzfDAsQXwwLEJ8MCl8MDtvPUM7Qj1EZChKfDAsSHwwLEF8MCxCfDApfDA7QT1DO0g9R2Qoc3wwLG98MCwxNCl8MDtKPUM7TD1IZChzfDAsb3wwLDUwKXwwO0o9SnxDO0c9R2Qoc3wwLG98MCwxOCl8MDtFPUM7TT1IZChzfDAsb3wwLDQ2KXwwO0U9Sl4oRXxDKTtKPUdkKHN8MCxvfDAsNDEpfDA7Sz1DO0k9SGQoc3wwLG98MCwyMyl8MDtLPUVeKEt8Qyk7RT1nKzU0NHwwO0Q9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7eD1EZChGfDAseHwwLDE5MTQxMzg1NTQsMTE2NDE4NDc0KXwwO0U9RGQoeHwwLEN8MCxEfDAsRXwwKXwwO0s9RGQoRXwwLEN8MCwoSHxMKV4oR3xNKV4oSnxJKXwwLEt8MCl8MDtLPURkKEt8MCxDfDAsKHledikmc155fDAsKHVecikmb151fDApfDA7ST1DO0o9R2QoQnwwLEF8MCwyOCl8MDtNPUM7Rz1IZChCfDAsQXwwLDM2KXwwO009TXxDO0w9R2QoQnwwLEF8MCwzNCl8MDtIPUM7RT1IZChCfDAsQXwwLDMwKXwwO0g9TV4oSHxDKTtNPUdkKEJ8MCxBfDAsMzkpfDA7RD1DO3g9SGQoQnwwLEF8MCwyNSl8MDtEPURkKChqfGIpJkJ8aiZifDAsKGx8ZikmQXxsJmZ8MCwoSnxHKV4oTHxFKV4oTXx4KXwwLEheKER8Qyl8MCl8MDtIPUM7cD1EZChtfDAscHwwLEt8MCxJfDApfDA7bT1DO0k9RGQoRHwwLEh8MCxLfDAsSXwwKXwwO0s9QztIPUdkKHB8MCxtfDAsMTQpfDA7RD1DO3g9SGQocHwwLG18MCw1MCl8MDtEPUR8QztNPUdkKHB8MCxtfDAsMTgpfDA7RT1DO0w9SGQocHwwLG18MCw0Nil8MDtFPUReKEV8Qyk7RD1HZChwfDAsbXwwLDQxKXwwO0c9QztKPUhkKHB8MCxtfDAsMjMpfDA7Rz1FXihHfEMpO0U9Zys1NTJ8MDtGPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO3U9RGQoeXwwLHV8MCwtMTU2MzkxMjAyNiwxNzQyOTI0MjEpfDA7RT1EZCh1fDAsQ3wwLEZ8MCxFfDApfDA7Rz1EZChFfDAsQ3wwLChIfHgpXihNfEwpXihEfEopfDAsR3wwKXwwO0c9RGQoR3wwLEN8MCwodl5zKSZwXnZ8MCwocl5vKSZtXnJ8MCl8MDtKPUM7RD1HZChJfDAsS3wwLDI4KXwwO0w9QztNPUhkKEl8MCxLfDAsMzYpfDA7TD1MfEM7eD1HZChJfDAsS3wwLDM0KXwwO0g9QztFPUhkKEl8MCxLfDAsMzApfDA7SD1MXihIfEMpO0w9R2QoSXwwLEt8MCwzOSl8MDtGPUM7dT1IZChJfDAsS3wwLDI1KXwwO0Y9RGQoKGJ8QikmSXxiJkJ8MCwoZnxBKSZLfGYmQXwwLChEfE0pXih4fEUpXihMfHUpfDAsSF4oRnxDKXwwKXwwO0g9QztsPURkKGp8MCxsfDAsR3wwLEp8MCl8MDtqPUM7Sj1EZChGfDAsSHwwLEd8MCxKfDApfDA7Rz1DO0g9R2QobHwwLGp8MCwxNCl8MDtGPUM7dT1IZChsfDAsanwwLDUwKXwwO0Y9RnxDO0w9R2QobHwwLGp8MCwxOCl8MDtFPUM7eD1IZChsfDAsanwwLDQ2KXwwO0U9Rl4oRXxDKTtGPUdkKGx8MCxqfDAsNDEpfDA7TT1DO0Q9SGQobHwwLGp8MCwyMyl8MDtNPUVeKE18Qyk7RT1nKzU2MHwwO3k9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7cj1EZCh2fDAscnwwLC0xMDkwOTc0MjkwLDI4OTM4MDM1Nil8MDtFPURkKHJ8MCxDfDAseXwwLEV8MCl8MDtNPURkKEV8MCxDfDAsKEh8dSleKEx8eCleKEZ8RCl8MCxNfDApfDA7TT1EZChNfDAsQ3wwLChzXnApJmxec3wwLChvXm0pJmpeb3wwKXwwO0Q9QztGPUdkKEp8MCxHfDAsMjgpfDA7eD1DO0w9SGQoSnwwLEd8MCwzNil8MDt4PXh8Qzt1PUdkKEp8MCxHfDAsMzQpfDA7SD1DO0U9SGQoSnwwLEd8MCwzMCl8MDtIPXheKEh8Qyk7eD1HZChKfDAsR3wwLDM5KXwwO3k9QztyPUhkKEp8MCxHfDAsMjUpfDA7eT1EZCgoQnxJKSZKfEImSXwwLChBfEspJkd8QSZLfDAsKEZ8TCleKHV8RSleKHh8cil8MCxIXih5fEMpfDApfDA7SD1DO2Y9RGQoYnwwLGZ8MCxNfDAsRHwwKXwwO2I9QztEPURkKHl8MCxIfDAsTXwwLER8MCl8MDtNPUM7SD1HZChmfDAsYnwwLDE0KXwwO3k9QztyPUhkKGZ8MCxifDAsNTApfDA7eT15fEM7eD1HZChmfDAsYnwwLDE4KXwwO0U9Qzt1PUhkKGZ8MCxifDAsNDYpfDA7RT15XihFfEMpO3k9R2QoZnwwLGJ8MCw0MSl8MDtMPUM7Rj1IZChmfDAsYnwwLDIzKXwwO0w9RV4oTHxDKTtFPWcrNTY4fDA7dj1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtvPURkKHN8MCxvfDAsMzIwNjIwMzE1LDQ2MDM5MzI2OSl8MDtFPURkKG98MCxDfDAsdnwwLEV8MCl8MDtMPURkKEV8MCxDfDAsKEh8cileKHh8dSleKHl8Ril8MCxMfDApfDA7TD1EZChMfDAsQ3wwLChwXmwpJmZecHwwLChtXmopJmJebXwwKXwwO0Y9Qzt5PUdkKER8MCxNfDAsMjgpfDA7dT1DO3g9SGQoRHwwLE18MCwzNil8MDt1PXV8QztyPUdkKER8MCxNfDAsMzQpfDA7SD1DO0U9SGQoRHwwLE18MCwzMCl8MDtIPXVeKEh8Qyk7dT1HZChEfDAsTXwwLDM5KXwwO3Y9QztvPUhkKER8MCxNfDAsMjUpfDA7dj1EZCgoSXxKKSZEfEkmSnwwLChLfEcpJk18SyZHfDAsKHl8eCleKHJ8RSleKHV8byl8MCxIXih2fEMpfDApfDA7SD1DO0E9RGQoQnwwLEF8MCxMfDAsRnwwKXwwO0I9QztGPURkKHZ8MCxIfDAsTHwwLEZ8MCl8MDtMPUM7SD1HZChBfDAsQnwwLDE0KXwwO3Y9QztvPUhkKEF8MCxCfDAsNTApfDA7dj12fEM7dT1HZChBfDAsQnwwLDE4KXwwO0U9QztyPUhkKEF8MCxCfDAsNDYpfDA7RT12XihFfEMpO3Y9R2QoQXwwLEJ8MCw0MSl8MDt4PUM7eT1IZChBfDAsQnwwLDIzKXwwO3g9RV4oeHxDKTtFPWcrNTc2fDA7cz1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDttPURkKHB8MCxtfDAsNTg3NDk2ODM2LDY4NTQ3MTczMyl8MDtFPURkKG18MCxDfDAsc3wwLEV8MCl8MDt4PURkKEV8MCxDfDAsKEh8byleKHV8cileKHZ8eSl8MCx4fDApfDA7eD1EZCh4fDAsQ3wwLChsXmYpJkFebHwwLChqXmIpJkJeanwwKXwwO3k9Qzt2PUdkKEZ8MCxMfDAsMjgpfDA7cj1DO3U9SGQoRnwwLEx8MCwzNil8MDtyPXJ8QztvPUdkKEZ8MCxMfDAsMzQpfDA7SD1DO0U9SGQoRnwwLEx8MCwzMCl8MDtIPXJeKEh8Qyk7cj1HZChGfDAsTHwwLDM5KXwwO3M9QzttPUhkKEZ8MCxMfDAsMjUpfDA7cz1EZCgoSnxEKSZGfEomRHwwLChHfE0pJkx8RyZNfDAsKHZ8dSleKG98RSleKHJ8bSl8MCxIXihzfEMpfDApfDA7SD1DO0s9RGQoSXwwLEt8MCx4fDAseXwwKXwwO0k9Qzt5PURkKHN8MCxIfDAseHwwLHl8MCl8MDt4PUM7SD1HZChLfDAsSXwwLDE0KXwwO3M9QzttPUhkKEt8MCxJfDAsNTApfDA7cz1zfEM7cj1HZChLfDAsSXwwLDE4KXwwO0U9QztvPUhkKEt8MCxJfDAsNDYpfDA7RT1zXihFfEMpO3M9R2QoS3wwLEl8MCw0MSl8MDt1PUM7dj1IZChLfDAsSXwwLDIzKXwwO3U9RV4odXxDKTtFPWcrNTg0fDA7cD1jW0U+PjJdfDA7RT1jW0UrND4+Ml18MDtqPURkKGx8MCxqfDAsMTA4Njc5Mjg1MSw4NTIxNDI5NzEpfDA7RT1EZChqfDAsQ3wwLHB8MCxFfDApfDA7dT1EZChFfDAsQ3wwLChIfG0pXihyfG8pXihzfHYpfDAsdXwwKXwwO3U9RGQodXwwLEN8MCwoZl5BKSZLXmZ8MCwoYl5CKSZJXmJ8MCl8MDt2PUM7cz1HZCh5fDAseHwwLDI4KXwwO289QztyPUhkKHl8MCx4fDAsMzYpfDA7bz1vfEM7bT1HZCh5fDAseHwwLDM0KXwwO0g9QztFPUhkKHl8MCx4fDAsMzApfDA7SD1vXihIfEMpO289R2QoeXwwLHh8MCwzOSl8MDtwPUM7aj1IZCh5fDAseHwwLDI1KXwwO3A9RGQoKER8RikmeXxEJkZ8MCwoTXxMKSZ4fE0mTHwwLChzfHIpXihtfEUpXihvfGopfDAsSF4ocHxDKXwwKXwwO0g9QztHPURkKEp8MCxHfDAsdXwwLHZ8MCl8MDtKPUM7dj1EZChwfDAsSHwwLHV8MCx2fDApfDA7dT1DO0g9R2QoR3wwLEp8MCwxNCl8MDtwPUM7aj1IZChHfDAsSnwwLDUwKXwwO3A9cHxDO289R2QoR3wwLEp8MCwxOCl8MDtFPUM7bT1IZChHfDAsSnwwLDQ2KXwwO0U9cF4oRXxDKTtwPUdkKEd8MCxKfDAsNDEpfDA7cj1DO3M9SGQoR3wwLEp8MCwyMyl8MDtyPUVeKHJ8Qyk7RT1nKzU5MnwwO2w9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7Yj1EZChmfDAsYnwwLDM2NTU0MzEwMCwxMDE3MDM2Mjk4KXwwO0U9RGQoYnwwLEN8MCxsfDAsRXwwKXwwO3I9RGQoRXwwLEN8MCwoSHxqKV4ob3xtKV4ocHxzKXwwLHJ8MCl8MDtyPURkKHJ8MCxDfDAsKEFeSykmR15BfDAsKEJeSSkmSl5CfDApfDA7cz1DO3A9R2QodnwwLHV8MCwyOCl8MDttPUM7bz1IZCh2fDAsdXwwLDM2KXwwO209bXxDO2o9R2QodnwwLHV8MCwzNCl8MDtIPUM7RT1IZCh2fDAsdXwwLDMwKXwwO0g9bV4oSHxDKTttPUdkKHZ8MCx1fDAsMzkpfDA7bD1DO2I9SGQodnwwLHV8MCwyNSl8MDtsPURkKChGfHkpJnZ8RiZ5fDAsKEx8eCkmdXxMJnh8MCwocHxvKV4oanxFKV4obXxiKXwwLEheKGx8Qyl8MCl8MDtIPUM7TT1EZChEfDAsTXwwLHJ8MCxzfDApfDA7RD1DO3M9RGQobHwwLEh8MCxyfDAsc3wwKXwwO3I9QztIPUdkKE18MCxEfDAsMTQpfDA7bD1DO2I9SGQoTXwwLER8MCw1MCl8MDtsPWx8QzttPUdkKE18MCxEfDAsMTgpfDA7RT1DO2o9SGQoTXwwLER8MCw0Nil8MDtFPWxeKEV8Qyk7bD1HZChNfDAsRHwwLDQxKXwwO289QztwPUhkKE18MCxEfDAsMjMpfDA7bz1FXihvfEMpO0U9Zys2MDB8MDtmPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO0I9RGQoQXwwLEJ8MCwtMTY3NjY2OTYyMCwxMTI2MDAwNTgwKXwwO0U9RGQoQnwwLEN8MCxmfDAsRXwwKXwwO289RGQoRXwwLEN8MCwoSHxiKV4obXxqKV4obHxwKXwwLG98MCl8MDtvPURkKG98MCxDfDAsKEteRykmTV5LfDAsKEleSikmRF5JfDApfDA7cD1DO2w9R2Qoc3wwLHJ8MCwyOCl8MDtqPUM7bT1IZChzfDAscnwwLDM2KXwwO2o9anxDO2I9R2Qoc3wwLHJ8MCwzNCl8MDtIPUM7RT1IZChzfDAscnwwLDMwKXwwO0g9al4oSHxDKTtqPUdkKHN8MCxyfDAsMzkpfDA7Zj1DO0I9SGQoc3wwLHJ8MCwyNSl8MDtmPURkKCh5fHYpJnN8eSZ2fDAsKHh8dSkmcnx4JnV8MCwobHxtKV4oYnxFKV4oanxCKXwwLEheKGZ8Qyl8MCl8MDtIPUM7TD1EZChGfDAsTHwwLG98MCxwfDApfDA7Rj1DO3A9RGQoZnwwLEh8MCxvfDAscHwwKXwwO289QztIPUdkKEx8MCxGfDAsMTQpfDA7Zj1DO0I9SGQoTHwwLEZ8MCw1MCl8MDtmPWZ8QztqPUdkKEx8MCxGfDAsMTgpfDA7RT1DO2I9SGQoTHwwLEZ8MCw0Nil8MDtFPWZeKEV8Qyk7Zj1HZChMfDAsRnwwLDQxKXwwO209QztsPUhkKEx8MCxGfDAsMjMpfDA7bT1FXihtfEMpO0U9Zys2MDh8MDtBPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO0k9RGQoS3wwLEl8MCwtODg1MTEyMTM4LDEyODgwMzM0NzApfDA7RT1EZChJfDAsQ3wwLEF8MCxFfDApfDA7bT1EZChFfDAsQ3wwLChIfEIpXihqfGIpXihmfGwpfDAsbXwwKXwwO209RGQobXwwLEN8MCwoR15NKSZMXkd8MCwoSl5EKSZGXkp8MCl8MDtsPUM7Zj1HZChwfDAsb3wwLDI4KXwwO2I9QztqPUhkKHB8MCxvfDAsMzYpfDA7Yj1ifEM7Qj1HZChwfDAsb3wwLDM0KXwwO0g9QztFPUhkKHB8MCxvfDAsMzApfDA7SD1iXihIfEMpO2I9R2QocHwwLG98MCwzOSl8MDtBPUM7ST1IZChwfDAsb3wwLDI1KXwwO0E9RGQoKHZ8cykmcHx2JnN8MCwodXxyKSZvfHUmcnwwLChmfGopXihCfEUpXihifEkpfDAsSF4oQXxDKXwwKXwwO0g9Qzt4PURkKHl8MCx4fDAsbXwwLGx8MCl8MDt5PUM7bD1EZChBfDAsSHwwLG18MCxsfDApfDA7bT1DO0g9R2QoeHwwLHl8MCwxNCl8MDtBPUM7ST1IZCh4fDAseXwwLDUwKXwwO0E9QXxDO2I9R2QoeHwwLHl8MCwxOCl8MDtFPUM7Qj1IZCh4fDAseXwwLDQ2KXwwO0U9QV4oRXxDKTtBPUdkKHh8MCx5fDAsNDEpfDA7aj1DO2Y9SGQoeHwwLHl8MCwyMyl8MDtqPUVeKGp8Qyk7RT1nKzYxNnwwO0s9Y1tFPj4yXXwwO0U9Y1tFKzQ+PjJdfDA7Sj1EZChHfDAsSnwwLC02MDQ1NzQzMCwxNTAxNTA1OTQ4KXwwO0U9RGQoSnwwLEN8MCxLfDAsRXwwKXwwO2o9RGQoRXwwLEN8MCwoSHxJKV4oYnxCKV4oQXxmKXwwLGp8MCl8MDtqPURkKGp8MCxDfDAsKE1eTCkmeF5NfDAsKEReRikmeV5EfDApfDA7Zj1DO0E9R2QobHwwLG18MCwyOCl8MDtCPUM7Yj1IZChsfDAsbXwwLDM2KXwwO0I9QnxDO0k9R2QobHwwLG18MCwzNCl8MDtIPUM7RT1IZChsfDAsbXwwLDMwKXwwO0g9Ql4oSHxDKTtCPUdkKGx8MCxtfDAsMzkpfDA7Sz1DO0o9SGQobHwwLG18MCwyNSl8MDtLPURkKChzfHApJmx8cyZwfDAsKHJ8bykmbXxyJm98MCwoQXxiKV4oSXxFKV4oQnxKKXwwLEheKEt8Qyl8MCl8MDtIPUM7dT1EZCh2fDAsdXwwLGp8MCxmfDApfDA7dj1DO2Y9RGQoS3wwLEh8MCxqfDAsZnwwKXwwO2o9QztIPUdkKHV8MCx2fDAsMTQpfDA7Sz1DO0o9SGQodXwwLHZ8MCw1MCl8MDtLPUt8QztCPUdkKHV8MCx2fDAsMTgpfDA7RT1DO0k9SGQodXwwLHZ8MCw0Nil8MDtFPUteKEV8Qyk7Sz1HZCh1fDAsdnwwLDQxKXwwO2I9QztBPUhkKHV8MCx2fDAsMjMpfDA7Yj1FXihifEMpO0U9Zys2MjR8MDtHPWNbRT4+Ml18MDtFPWNbRSs0Pj4yXXwwO0Q9RGQoTXwwLER8MCw5ODcxNjc0NjgsMTYwNzE2NzkxNSl8MDtFPURkKER8MCxDfDAsR3wwLEV8MCl8MDtiPURkKEV8MCxDfDAsKEh8SileKEJ8SSleKEt8QSl8MCxifDApfDA7Yj1EZChifDAsQ3wwLChMXngpJnVeTHwwLChGXnkpJnZeRnwwKXwwO0E9QztLPUdkKGZ8MCxqfDAsMjgpfDA7ST1DO0I9SGQoZnwwLGp8MCwzNil8MDtJPUl8QztKPUdkKGZ8MCxqfDAsMzQpfDA7SD1DO0U9SGQoZnwwLGp8MCwzMCl8MDtIPUleKEh8Qyk7ST1HZChmfDAsanwwLDM5KXwwO0c9QztEPUhkKGZ8MCxqfDAsMjUpfDA7Rz1EZCgocHxsKSZmfHAmbHwwLChvfG0pJmp8byZtfDAsKEt8QileKEp8RSleKEl8RCl8MCxIXihHfEMpfDApfDA7SD1DO3I9RGQoc3wwLHJ8MCxifDAsQXwwKXwwO3M9QztBPURkKEd8MCxIfDAsYnwwLEF8MCl8MDtiPUM7SD1HZChyfDAsc3wwLDE0KXwwO0c9QztEPUhkKHJ8MCxzfDAsNTApfDA7Rz1HfEM7ST1HZChyfDAsc3wwLDE4KXwwO0U9QztKPUhkKHJ8MCxzfDAsNDYpfDA7RT1HXihFfEMpO0c9R2QocnwwLHN8MCw0MSl8MDtCPUM7Sz1IZChyfDAsc3wwLDIzKXwwO0I9RV4oQnxDKTtnPWcrNjMyfDA7RT1jW2c+PjJdfDA7Zz1jW2crND4+Ml18MDtGPURkKEx8MCxGfDAsMTI0NjE4OTU5MSwxODE2NDAyMzE2KXwwO2c9RGQoRnwwLEN8MCxFfDAsZ3wwKXwwO2c9RGQoZ3wwLEN8MCwoSHxEKV4oSXxKKV4oR3xLKXwwLEJ8MCl8MDtnPURkKGd8MCxDfDAsKHhedSkmcl54fDAsKHledikmc155fDApfDA7Qj1DO0s9R2QoQXwwLGJ8MCwyOCl8MDtHPUM7Sj1IZChBfDAsYnwwLDM2KXwwO0c9R3xDO0k9R2QoQXwwLGJ8MCwzNCl8MDtEPUM7SD1IZChBfDAsYnwwLDMwKXwwO0Q9R14oRHxDKTtHPUdkKEF8MCxifDAsMzkpfDA7RT1DO0Y9SGQoQXwwLGJ8MCwyNSl8MDtFPURkKChsfGYpJkF8bCZmfDAsKG18aikmYnxtJmp8MCwoS3xKKV4oSXxIKV4oR3xGKXwwLEReKEV8Qyl8MCl8MDtEPUM7bz1EZChwfDAsb3wwLGd8MCxCfDApfDA7cD1DO0I9RGQoRXwwLER8MCxnfDAsQnwwKXwwO2c9YTtCPURkKGNbZz4+Ml18MCxjW2crND4+Ml18MCxCfDAsQ3wwKXwwO2c9YTtjW2c+PjJdPUI7Y1tnKzQ+PjJdPUM7Zz1lO2c9RGQoY1tnPj4yXXwwLGNbZys0Pj4yXXwwLEF8MCxifDApfDA7YT1lO2NbYT4+Ml09ZztjW2ErND4+Ml09QzthPWs7aj1EZChjW2E+PjJdfDAsY1thKzQ+PjJdfDAsZnwwLGp8MCl8MDtjW2s+PjJdPWo7Y1trKzQ+PjJdPUM7az1uO209RGQoY1trPj4yXXwwLGNbays0Pj4yXXwwLGx8MCxtfDApfDA7Y1tuPj4yXT1tO2Nbbis0Pj4yXT1DO249cTtwPURkKGNbbj4+Ml18MCxjW24rND4+Ml18MCxvfDAscHwwKXwwO2NbcT4+Ml09cDtjW3ErND4+Ml09QztxPXQ7cz1EZChjW3E+PjJdfDAsY1txKzQ+PjJdfDAscnwwLHN8MCl8MDtjW3Q+PjJdPXM7Y1t0KzQ+PjJdPUM7dD13O3Y9RGQoY1t0Pj4yXXwwLGNbdCs0Pj4yXXwwLHV8MCx2fDApfDA7Y1t3Pj4yXT12O2Nbdys0Pj4yXT1DO3c9ejt5PURkKGNbdz4+Ml18MCxjW3crND4+Ml18MCx4fDAseXwwKXwwO2Nbej4+Ml09eTtjW3orND4+Ml09QztpPWg7cmV0dXJufWZ1bmN0aW9uIEliKCl7cmV0dXJuIDE0NH1mdW5jdGlvbiBKYigpe3JldHVybiAxNn1mdW5jdGlvbiBLYigpe3JldHVybiAzMn1mdW5jdGlvbiBMYihhLGIsYyxkLGUpe2E9YXwwO2I9YnwwO2M9Y3wwO2Q9ZHwwO2U9ZXwwO3ZhciBmPTAsZz0wO2Y9aTtnPWk9aSs2MyYtNjQ7aT1pKzE0NHwwO1ViKGcsZSk7VGIoZyxiLGMsZCk7UmIoZyxhKTtpPWY7cmV0dXJuIDB9ZnVuY3Rpb24gTWIoYSxiLGMsZCxlKXthPWF8MDtiPWJ8MDtjPWN8MDtkPWR8MDtlPWV8MDtyZXR1cm4gUWIoYSxiLGMsZCxlKXwwfWZ1bmN0aW9uIE5iKGEsYil7YT1hfDA7Yj1ifDA7VWIoYSxiKTtyZXR1cm4gMH1mdW5jdGlvbiBPYihhLGIsYyxkKXthPWF8MDtiPWJ8MDtjPWN8MDtkPWR8MDtUYihhLGIsYyxkKTtyZXR1cm4gMH1mdW5jdGlvbiBQYihhLGIpe2E9YXwwO2I9YnwwO1JiKGEsYik7cmV0dXJuIDB9ZnVuY3Rpb24gUWIoYixjLGQsZSxmKXtiPWJ8MDtjPWN8MDtkPWR8MDtlPWV8MDtmPWZ8MDt2YXIgZz0wLGg9MCxqPTA7aD1pO2c9aT1pKzYzJi02NDtpPWkrMTYwfDA7aj1nO2c9ZysxNDR8MDtVYihqLGYpO1RiKGosYyxkLGUpO1JiKGosZyk7aT1oO3JldHVybiAoKCgoYVtnKzE+PjBdXmFbYisxPj4wXXxhW2c+PjBdXmFbYj4+MF18YVtnKzI+PjBdXmFbYisyPj4wXXxhW2crMz4+MF1eYVtiKzM+PjBdfGFbZys0Pj4wXV5hW2IrND4+MF18YVtnKzU+PjBdXmFbYis1Pj4wXXxhW2crNj4+MF1eYVtiKzY+PjBdfGFbZys3Pj4wXV5hW2IrNz4+MF18YVtnKzg+PjBdXmFbYis4Pj4wXXxhW2crOT4+MF1eYVtiKzk+PjBdfGFbZysxMD4+MF1eYVtiKzEwPj4wXXxhW2crMTE+PjBdXmFbYisxMT4+MF18YVtnKzEyPj4wXV5hW2IrMTI+PjBdfGFbZysxMz4+MF1eYVtiKzEzPj4wXXxhW2crMTQ+PjBdXmFbYisxND4+MF18YVtnKzE1Pj4wXV5hW2IrMTU+PjBdKSYyNTUpKzUxMXwwKT4+PjgmMSkrLTF8MH1mdW5jdGlvbiBSYihiLGQpe2I9YnwwO2Q9ZHwwO3ZhciBlPTAsZj0wLGc9MCxoPTAsaT0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wO2g9Yis1NnwwO2c9Y1toPj4yXXwwO2g9Y1toKzQ+PjJdfDA7aWYoISgoZ3wwKT09MCYoaHwwKT09MCkpe2U9Yis2NHwwO2FbZStnPj4wXT0xO2Y9RGQoZ3wwLGh8MCwxLDApfDA7aT1DO2lmKGk+Pj4wPDB8KGl8MCk9PTAmZj4+PjA8MTYpe2k9Q2QoMTQsMCxnfDAsaHwwKXwwO0ZkKGIrKGYrNjQpfDAsMCxpKzF8MCl8MH1hW2IrODA+PjBdPTE7U2IoYixlLDE2LDApfWk9Y1tiKzI0Pj4yXXwwO3A9KGNbYisyOD4+Ml18MCkrKGk+Pj4yNil8MDtlPXAmNjcxMDg4NjM7bj0ocD4+PjI2KSsoY1tiKzMyPj4yXXwwKXwwO209biY2NzEwODg2MztmPShuPj4+MjYpKyhjW2IrMzY+PjJdfDApfDA7aD0oKGY+Pj4yNikqNXwwKSsoY1tiKzIwPj4yXXwwKXwwO2c9aCY2NzEwODg2MztpPShoPj4+MjYpKyhpJjY3MTA4ODYzKXwwO3I9KChnKzV8MCk+Pj4yNikraXwwO3E9cj4+PjI2O289KHErZXwwKT4+PjI2O2s9KGZ8LTY3MTA4ODY0KSsoKG8rbXwwKT4+PjI2KXwwO2w9KGs+Pj4zMSkrLTF8MDtqPWs+PjMxO2k9ciY2NzEwODg2MyZsfGomaTtlPXErcCY2NzEwODg2MyZsfGomZTttPW8rbiY2NzEwODg2MyZsfGombTtnPURkKGgrNSY2NzEwODg2MyZsfGomZ3xpPDwyNnwwLDAsY1tiKzQwPj4yXXwwLDApfDA7aD1DO2k9RGQoaT4+PjZ8ZTw8MjB8MCwwLGNbYis0ND4+Ml18MCwwKXwwO2g9RGQoaXwwLEN8MCxofDAsMCl8MDtpPUM7ZT1EZChlPj4+MTJ8bTw8MTR8MCwwLGNbYis0OD4+Ml18MCwwKXwwO2k9RGQoZXwwLEN8MCxpfDAsMCl8MDtlPUM7Zj1EZChtPj4+MTh8KGwma3xqJmYpPDw4fDAsMCxjW2IrNTI+PjJdfDAsMCl8MDtlPURkKGZ8MCxDfDAsZXwwLDApfDA7YVtkPj4wXT1nO2FbZCsxPj4wXT1nPj4+ODthW2QrMj4+MF09Zz4+PjE2O2FbZCszPj4wXT1nPj4+MjQ7YVtkKzQ+PjBdPWg7YVtkKzU+PjBdPWg+Pj44O2FbZCs2Pj4wXT1oPj4+MTY7YVtkKzc+PjBdPWg+Pj4yNDthW2QrOD4+MF09aTthW2QrOT4+MF09aT4+Pjg7YVtkKzEwPj4wXT1pPj4+MTY7YVtkKzExPj4wXT1pPj4+MjQ7YVtkKzEyPj4wXT1lO2FbZCsxMz4+MF09ZT4+Pjg7YVtkKzE0Pj4wXT1lPj4+MTY7YVtkKzE1Pj4wXT1lPj4+MjQ7ZT1iKzg4fDA7ZG97YVtiPj4wXT0wO2I9YisxfDB9d2hpbGUoKGJ8MCk8KGV8MCkpO3JldHVybn1mdW5jdGlvbiBTYihiLGUsZixnKXtiPWJ8MDtlPWV8MDtmPWZ8MDtnPWd8MDt2YXIgaD0wLGk9MCxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTAsdD0wLHU9MCx2PTAsdz0wLHg9MCx5PTAsej0wLEE9MCxCPTAsRD0wLEU9MCxGPTAsRz0wLEg9MCxJPTAsSj0wO3M9KGFbYis4MD4+MF18MCkhPTA/MDoxNjc3NzIxNjt0PWNbYis0Pj4yXXwwO3U9Y1tiKzg+PjJdfDA7bT1jW2IrMTI+PjJdfDA7bj1jW2IrMTY+PjJdfDA7dj1iKzIwfDA7bD1jW3Y+PjJdfDA7dz1iKzI0fDA7az1jW3c+PjJdfDA7eD1iKzI4fDA7aj1jW3g+PjJdfDA7eT1iKzMyfDA7aT1jW3k+PjJdfDA7ej1iKzM2fDA7aD1jW3o+PjJdfDA7aWYoIShnPj4+MD4wfChnfDApPT0wJmY+Pj4wPjE1KSl7cT1sO3I9aztzPWo7dD1pO3U9aDtjW3Y+PjJdPXE7Y1t3Pj4yXT1yO2NbeD4+Ml09cztjW3k+PjJdPXQ7Y1t6Pj4yXT11O3JldHVybn1vPW4qNXwwO3A9bSo1fDA7cT11KjV8MDtyPXQqNXwwO2I9Y1tiPj4yXXwwO3doaWxlKDEpe0o9ZFtlKzM+PjBdfDA7Qj0oZFtlKzE+PjBdPDw4fGRbZT4+MF18ZFtlKzI+PjBdPDwxNnxKPDwyNCY1MDMzMTY0OCkrbHwwO0g9ZFtlKzY+PjBdfDA7Sj0oKGRbZSs0Pj4wXTw8OHxKfGRbZSs1Pj4wXTw8MTZ8SDw8MjQpPj4+MiY2NzEwODg2Mykra3wwO0c9ZFtlKzk+PjBdfDA7SD0oKGRbZSs3Pj4wXTw8OHxIfGRbZSs4Pj4wXTw8MTZ8Rzw8MjQpPj4+NCY2NzEwODg2MykranwwO0c9KChkW2UrMTA+PjBdPDw4fEd8ZFtlKzExPj4wXTw8MTZ8ZFtlKzEyPj4wXTw8MjQpPj4+NikraXwwO2w9KGRbZSsxMz4+MF18c3xkW2UrMTQ+PjBdPDw4fGRbZSsxNT4+MF08PDE2KStofDA7az1PZChCfDAsMCxifDAsMCl8MDtqPUM7QT1PZChKfDAsMCxvfDAsMCl8MDtqPURkKEF8MCxDfDAsa3wwLGp8MCl8MDtrPUM7QT1PZChIfDAsMCxwfDAsMCl8MDtBPURkKGp8MCxrfDAsQXwwLEN8MCl8MDtrPUM7aj1PZChHfDAsMCxxfDAsMCl8MDtqPURkKEF8MCxrfDAsanwwLEN8MCl8MDtrPUM7QT1PZChsfDAsMCxyfDAsMCl8MDtBPURkKGp8MCxrfDAsQXwwLEN8MCl8MDtrPUM7aj1PZChCfDAsMCx0fDAsMCl8MDtpPUM7Rj1PZChKfDAsMCxifDAsMCl8MDtpPURkKEZ8MCxDfDAsanwwLGl8MCl8MDtqPUM7Rj1PZChIfDAsMCxvfDAsMCl8MDtGPURkKGl8MCxqfDAsRnwwLEN8MCl8MDtqPUM7aT1PZChHfDAsMCxwfDAsMCl8MDtpPURkKEZ8MCxqfDAsaXwwLEN8MCl8MDtqPUM7Rj1PZChsfDAsMCxxfDAsMCl8MDtGPURkKGl8MCxqfDAsRnwwLEN8MCl8MDtqPUM7aT1PZChCfDAsMCx1fDAsMCl8MDtoPUM7RT1PZChKfDAsMCx0fDAsMCl8MDtoPURkKEV8MCxDfDAsaXwwLGh8MCl8MDtpPUM7RT1PZChIfDAsMCxifDAsMCl8MDtFPURkKGh8MCxpfDAsRXwwLEN8MCl8MDtpPUM7aD1PZChHfDAsMCxvfDAsMCl8MDtoPURkKEV8MCxpfDAsaHwwLEN8MCl8MDtpPUM7RT1PZChsfDAsMCxwfDAsMCl8MDtFPURkKGh8MCxpfDAsRXwwLEN8MCl8MDtpPUM7aD1PZChCfDAsMCxtfDAsMCl8MDtJPUM7RD1PZChKfDAsMCx1fDAsMCl8MDtJPURkKER8MCxDfDAsaHwwLEl8MCl8MDtoPUM7RD1PZChIfDAsMCx0fDAsMCl8MDtEPURkKEl8MCxofDAsRHwwLEN8MCl8MDtoPUM7ST1PZChHfDAsMCxifDAsMCl8MDtJPURkKER8MCxofDAsSXwwLEN8MCl8MDtoPUM7RD1PZChsfDAsMCxvfDAsMCl8MDtEPURkKEl8MCxofDAsRHwwLEN8MCl8MDtoPUM7Qj1PZChCfDAsMCxufDAsMCl8MDtJPUM7Sj1PZChKfDAsMCxtfDAsMCl8MDtJPURkKEp8MCxDfDAsQnwwLEl8MCl8MDtCPUM7SD1PZChIfDAsMCx1fDAsMCl8MDtIPURkKEl8MCxCfDAsSHwwLEN8MCl8MDtCPUM7Rz1PZChHfDAsMCx0fDAsMCl8MDtHPURkKEh8MCxCfDAsR3wwLEN8MCl8MDtCPUM7bD1PZChsfDAsMCxifDAsMCl8MDtsPURkKEd8MCxCfDAsbHwwLEN8MCl8MDtCPUM7az1HZChBfDAsa3wwLDI2KXwwO2s9RGQoRnwwLGp8MCxrfDAsMCl8MDtqPUdkKGt8MCxDfDAsMjYpfDA7aj1EZChFfDAsaXwwLGp8MCwwKXwwO2k9R2QoanwwLEN8MCwyNil8MDtqPWomNjcxMDg4NjM7aT1EZChEfDAsaHwwLGl8MCwwKXwwO2g9R2QoaXwwLEN8MCwyNil8MDtpPWkmNjcxMDg4NjM7aD1EZChsfDAsQnwwLGh8MCwwKXwwO0I9R2QoaHwwLEN8MCwyNil8MDtoPWgmNjcxMDg4NjM7Qj1CKjV8MDtsPUIrQSY2NzEwODg2MztrPSgoQisoQSY2NzEwODg2Myl8MCk+Pj4yNikrKGsmNjcxMDg4NjMpfDA7Zj1EZChmfDAsZ3wwLC0xNiwtMSl8MDtnPUM7aWYoIShnPj4+MD4wfChnfDApPT0wJmY+Pj4wPjE1KSlicmVhaztlbHNlIGU9ZSsxNnwwfWNbdj4+Ml09bDtjW3c+PjJdPWs7Y1t4Pj4yXT1qO2NbeT4+Ml09aTtjW3o+PjJdPWg7cmV0dXJufWZ1bmN0aW9uIFRiKGIsZCxlLGYpe2I9YnwwO2Q9ZHwwO2U9ZXwwO2Y9ZnwwO3ZhciBnPTAsaD0wLGk9MCxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MDtuPWIrNTZ8MDtnPW47aD1jW2c+PjJdfDA7Zz1jW2crND4+Ml18MDtkbyBpZighKChofDApPT0wJihnfDApPT0wKSl7bD1DZCgxNiwwLGh8MCxnfDApfDA7bT1DO2s9bT4+PjA+Zj4+PjB8KG18MCk9PShmfDApJmw+Pj4wPmU+Pj4wO2w9az9lOmw7bT1rP2Y6bTtpZighKChsfDApPT0wJihtfDApPT0wKSl7aj1iKzY0fDA7az0wO2k9MDtkb3tvPWFbZCtrPj4wXXwwO2c9RGQoaHwwLGd8MCxrfDAsaXwwKXwwO2FbaitnPj4wXT1vO2s9RGQoa3wwLGl8MCwxLDApfDA7aT1DO2c9bjtoPWNbZz4+Ml18MDtnPWNbZys0Pj4yXXwwfXdoaWxlKGk+Pj4wPG0+Pj4wfChpfDApPT0obXwwKSZrPj4+MDxsPj4+MCl9bz1EZChofDAsZ3wwLGx8MCxtfDApfDA7az1DO2o9bjtjW2o+PjJdPW87Y1tqKzQ+PjJdPWs7aWYoaz4+PjA8MHwoa3wwKT09MCZvPj4+MDwxNilyZXR1cm47ZWxzZXtlPUNkKGV8MCxmfDAsbHwwLG18MCl8MDtmPUM7U2IoYixiKzY0fDAsMTYsMCk7bz1uO2Nbbz4+Ml09MDtjW28rND4+Ml09MDtkPWQrbHwwO2JyZWFrfX13aGlsZSgwKTtpZihmPj4+MD4wfChmfDApPT0wJmU+Pj4wPjE1KXtpPWUmLTE2O1NiKGIsZCxpLGYpO2U9Q2QoZXwwLGZ8MCxpfDAsZnwwKXwwO2Q9ZCtpfDA7aT1DfWVsc2UgaT1mO2lmKChlfDApPT0wJihpfDApPT0wKXJldHVybjtmPWIrNjR8MDtnPTA7aD0wO2Rve2I9YVtkK2c+PjBdfDA7bz1uO289RGQoY1tvPj4yXXwwLGNbbys0Pj4yXXwwLGd8MCxofDApfDA7YVtmK28+PjBdPWI7Zz1EZChnfDAsaHwwLDEsMCl8MDtoPUN9d2hpbGUoaD4+PjA8aT4+PjB8KGh8MCk9PShpfDApJmc+Pj4wPGU+Pj4wKTtiPW47Yj1EZChjW2I+PjJdfDAsY1tiKzQ+PjJdfDAsZXwwLGl8MCl8MDtvPW47Y1tvPj4yXT1iO2Nbbys0Pj4yXT1DO3JldHVybn1mdW5jdGlvbiBVYihiLGUpe2I9YnwwO2U9ZXwwO3ZhciBmPTAsZz0wO2Y9ZSszfDA7Y1tiPj4yXT0oZFtlKzE+PjBdfDApPDw4fChkW2U+PjBdfDApfChkW2UrMj4+MF18MCk8PDE2fChkW2Y+PjBdfDApPDwyNCY1MDMzMTY0ODtnPWUrNnwwO2NbYis0Pj4yXT0oKGRbZSs0Pj4wXXwwKTw8OHwoZFtmPj4wXXwwKXwoZFtlKzU+PjBdfDApPDwxNnwoZFtnPj4wXXwwKTw8MjQpPj4+MiY2NzEwODYxMTtmPWUrOXwwO2NbYis4Pj4yXT0oKGRbZSs3Pj4wXXwwKTw8OHwoZFtnPj4wXXwwKXwoZFtlKzg+PjBdfDApPDwxNnwoZFtmPj4wXXwwKTw8MjQpPj4+NCY2NzA5MjczNTtjW2IrMTI+PjJdPSgoZFtlKzEwPj4wXXwwKTw8OHwoZFtmPj4wXXwwKXwoZFtlKzExPj4wXXwwKTw8MTZ8KGRbZSsxMj4+MF18MCk8PDI0KT4+PjYmNjYwNzY2NzE7Y1tiKzE2Pj4yXT0oZFtlKzE0Pj4wXXwwKTw8OHwoZFtlKzEzPj4wXXwwKXwoZFtlKzE1Pj4wXXwwKTw8MTYmOTgzMDQwO2Y9YisyMHwwO2NbZj4+Ml09MDtjW2YrND4+Ml09MDtjW2YrOD4+Ml09MDtjW2YrMTI+PjJdPTA7Y1tmKzE2Pj4yXT0wO2NbYis0MD4+Ml09KGRbZSsxNz4+MF18MCk8PDh8KGRbZSsxNj4+MF18MCl8KGRbZSsxOD4+MF18MCk8PDE2fChkW2UrMTk+PjBdfDApPDwyNDtjW2IrNDQ+PjJdPShkW2UrMjE+PjBdfDApPDw4fChkW2UrMjA+PjBdfDApfChkW2UrMjI+PjBdfDApPDwxNnwoZFtlKzIzPj4wXXwwKTw8MjQ7Y1tiKzQ4Pj4yXT0oZFtlKzI1Pj4wXXwwKTw8OHwoZFtlKzI0Pj4wXXwwKXwoZFtlKzI2Pj4wXXwwKTw8MTZ8KGRbZSsyNz4+MF18MCk8PDI0O2NbYis1Mj4+Ml09KGRbZSsyOT4+MF18MCk8PDh8KGRbZSsyOD4+MF18MCl8KGRbZSszMD4+MF18MCk8PDE2fChkW2UrMzE+PjBdfDApPDwyNDtlPWIrNTZ8MDtjW2U+PjJdPTA7Y1tlKzQ+PjJdPTA7YVtiKzgwPj4wXT0wO3JldHVybn1mdW5jdGlvbiBWYihiLGUsZixnLGgpe2I9YnwwO2U9ZXwwO2Y9ZnwwO2c9Z3wwO2g9aHwwO3ZhciBqPTAsaz0wLGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTAsdD0wLHU9MCx2PTAsdz0wO3c9aTt0PWk9aSs2MyYtNjQ7aT1pKzQ4fDA7aj10Kzh8MDt1PXQrNHwwO2lmKChhW2c+PjBdfDApIT0zNil7aD0wO2k9dztyZXR1cm4gaHwwfWlmKChhW2crMT4+MF18MCkhPTU1KXtoPTA7aT13O3JldHVybiBofDB9aWYoKGFbZysyPj4wXXwwKSE9MzYpe2g9MDtpPXc7cmV0dXJuIGh8MH1vPWFbZyszPj4wXXwwO249byYyNTU7YTpkbyBpZigxKXtsPTY1O2s9MzQ4ODE7ZG97aWYoKGFbaz4+MF18MCk9PW88PDI0Pj4yNClicmVhayBhO2s9aysxfDA7bD1sKy0xfDA7bT0obHwwKSE9MH13aGlsZShtJihrJjN8MCkhPTApO2lmKCFtKXtoPTA7aT13O3JldHVybiBofDB9fWVsc2V7bD02NTtrPTM0ODgxfXdoaWxlKDApO2I6ZG8gaWYoKGFbaz4+MF18MCkhPW88PDI0Pj4yNCl7bT1fKG4sMTY4NDMwMDkpfDA7YzpkbyBpZihsPj4+MD4zKXdoaWxlKDEpe3M9Y1trPj4yXV5tO2lmKChzJi0yMTM5MDYyMTQ0Xi0yMTM5MDYyMTQ0KSZzKy0xNjg0MzAwOSlicmVhayBjO2s9ays0fDA7bD1sKy00fDA7aWYobD4+PjA8PTMpe3Y9MTI7YnJlYWt9fWVsc2Ugdj0xMjt3aGlsZSgwKTtpZigodnwwKT09MTIpaWYoIWwpe2g9MDtpPXc7cmV0dXJuIGh8MH13aGlsZSgxKXtpZigoYVtrPj4wXXwwKT09bzw8MjQ+PjI0KWJyZWFrIGI7bD1sKy0xfDA7aWYoIWwpe2o9MDticmVha31lbHNlIGs9aysxfDB9aT13O3JldHVybiBqfDB9d2hpbGUoMCk7aWYoKGt8MCk9PTB8KGx8MCk9PTApe2g9MDtpPXc7cmV0dXJuIGh8MH1yPUhkKDEsMCxrLTM0ODgxfDApfDA7cz1DO2s9WGIodSxnKzR8MCl8MDtpZighayl7aD0wO2k9dztyZXR1cm4gaHwwfXE9WGIodCxrKXwwO2lmKCFxKXtoPTA7aT13O3JldHVybiBofDB9bz1xO3A9by1nfDA7bj0obyYzfDApPT0wO2Q6ZG8gaWYobil7az1xO3Y9MjJ9ZWxzZXtsPXE7az1vO3doaWxlKDEpe2lmKCEoYVtsPj4wXXwwKSlicmVhayBkO2w9bCsxfDA7az1sO2lmKCEoayYzKSl7az1sO3Y9MjI7YnJlYWt9fX13aGlsZSgwKTtpZigodnwwKT09MjIpe3doaWxlKDEpe2w9Y1trPj4yXXwwO2lmKCEoKGwmLTIxMzkwNjIxNDReLTIxMzkwNjIxNDQpJmwrLTE2ODQzMDA5KSlrPWsrNHwwO2Vsc2UgYnJlYWt9aWYoKGwmMjU1KTw8MjQ+PjI0KWRvIGs9aysxfDA7d2hpbGUoKGFbaz4+MF18MCkhPTApfWw9ay1vKzF8MDt3aGlsZSgxKXtrPWwrLTF8MDtpZighbCl7dj0zMjticmVha31tPXEra3wwO2lmKChhW20+PjBdfDApPT0zNil7dj0zMDticmVha31lbHNlIGw9a31pZigodnwwKT09MzApaWYoIW0pdj0zMjtlbHNlIGw9bCstMXwwO2lmKCh2fDApPT0zMil7ZTpkbyBpZihuKXtrPXE7dj0zNX1lbHNle2s9cTtsPW87d2hpbGUoMSl7aWYoIShhW2s+PjBdfDApKXtrPWw7YnJlYWsgZX1rPWsrMXwwO2w9aztpZighKGwmMykpe3Y9MzU7YnJlYWt9fX13aGlsZSgwKTtpZigodnwwKT09MzUpe3doaWxlKDEpe2w9Y1trPj4yXXwwO2lmKCEoKGwmLTIxMzkwNjIxNDReLTIxMzkwNjIxNDQpJmwrLTE2ODQzMDA5KSlrPWsrNHwwO2Vsc2UgYnJlYWt9aWYoKGwmMjU1KTw8MjQ+PjI0KWRvIGs9aysxfDA7d2hpbGUoKGFbaz4+MF18MCkhPTApfWw9ay1vfDB9az1sK3B8MDtwPWsrNDV8MDtpZihwPj4+MD4xMDJ8cD4+PjA8bD4+PjApe2g9MDtpPXc7cmV0dXJuIGh8MH1pZihoYyhiLGUsZixxLGwscixzLGNbdT4+Ml18MCxjW3Q+PjJdfDAsaiwzMil8MCl7aD0wO2k9dztyZXR1cm4gaHwwfUlkKGh8MCxnfDAsa3wwKXwwO3M9aCtrfDA7cj1zKzF8MDthW3M+PjBdPTM2O3M9cjtyPWgrMTAyLXJ8MDtrPTA7Zjp3aGlsZSgxKXtpZihrPj4+MDwzMil7cD0wO3E9aztrPTB9ZWxzZSBicmVhaztkb3tnPXE7cT1xKzF8MDtrPWRbaitnPj4wXTw8cHxrO3A9cCs4fDB9d2hpbGUocT4+PjA8MzImcD4+PjA8MjQpO2lmKCFwKWs9cztlbHNle2w9azttPXI7bj1zO289MDt3aGlsZSgxKXtpZighbSl7dj01MDticmVhayBmfWs9bisxfDA7YVtuPj4wXT1hWzM0ODgxKyhsJjYzKT4+MF18MDtvPW8rNnwwO2lmKG8+Pj4wPj1wPj4+MClicmVhaztlbHNle2w9bD4+PjY7bT1tKy0xfDA7bj1rfX19Zz0oa3wwKT09MDtyPShnPzA6cy1rfDApK3J8MDtpZihnKXt2PTUwO2JyZWFrfWVsc2V7cz1rO2s9cX19aWYoKHZ8MCk9PTUwKXtrPWorMzJ8MDtkb3thW2o+PjBdPTA7aj1qKzF8MH13aGlsZSgoanwwKTwoa3wwKSk7aD0wO2k9dztyZXR1cm4gaHwwfWs9aiszMnwwO2Rve2Fbaj4+MF09MDtqPWorMXwwfXdoaWxlKChqfDApPChrfDApKTtpZighKChzfDApIT0wJnM+Pj4wPChoKzEwMnwwKT4+PjApKXtoPTA7aT13O3JldHVybiBofDB9YVtzPj4wXT0wO2k9dztyZXR1cm4gaHwwfWZ1bmN0aW9uIFdiKGEsYixkLGUsZixnLGgsaixrLGwpe2E9YXwwO2I9YnwwO2Q9ZHwwO2U9ZXwwO2Y9ZnwwO2c9Z3wwO2g9aHwwO2o9anwwO2s9a3wwO2w9bHwwO3ZhciBtPTAsbj0wO209aTtuPWk9aSs2MyYtNjQ7aT1pKzE2fDA7Y1tuKzQ+PjJdPTA7Y1tuPj4yXT0wO2Nbbis4Pj4yXT0wO2Y9aGMobixhLGIsZCxlLGYsZyxoLGosayxsKXwwO2c9Y1tuPj4yXXwwO2lmKCFnKXtpPW07cmV0dXJuIGZ8MH16ZChnKTtpPW07cmV0dXJuIGZ8MH1mdW5jdGlvbiBYYihiLGQpe2I9YnwwO2Q9ZHwwO3ZhciBlPTAsZj0wLGc9MCxoPTAsaT0wLGo9MCxrPTAsbD0wLG09MCxuPTA7aT1hW2Q+PjBdfDA7aD1pJjI1NTthOmRvIGlmKDEpe2U9NjU7Zj0zNDg4MTtkb3tpZigoYVtmPj4wXXwwKT09aTw8MjQ+PjI0KWJyZWFrIGE7Zj1mKzF8MDtlPWUrLTF8MDtnPShlfDApIT0wfXdoaWxlKGcmKGYmM3wwKSE9MCk7aWYoIWcpe2Q9MDtuPTA7Y1tiPj4yXT1uO3JldHVybiBkfDB9fWVsc2V7ZT02NTtmPTM0ODgxfXdoaWxlKDApO2I6ZG8gaWYoKGFbZj4+MF18MCkhPWk8PDI0Pj4yNCl7Zz1fKGgsMTY4NDMwMDkpfDA7YzpkbyBpZihlPj4+MD4zKXdoaWxlKDEpe209Y1tmPj4yXV5nO2lmKChtJi0yMTM5MDYyMTQ0Xi0yMTM5MDYyMTQ0KSZtKy0xNjg0MzAwOSlicmVhayBjO2Y9Zis0fDA7ZT1lKy00fDA7aWYoZT4+PjA8PTMpe249OTticmVha319ZWxzZSBuPTk7d2hpbGUoMCk7aWYoKG58MCk9PTkpaWYoIWUpe2Q9MDtuPTA7Y1tiPj4yXT1uO3JldHVybiBkfDB9d2hpbGUoMSl7aWYoKGFbZj4+MF18MCk9PWk8PDI0Pj4yNClicmVhayBiO2U9ZSstMXwwO2lmKCFlKXtlPTA7Zj0wO2JyZWFrfWVsc2UgZj1mKzF8MH1jW2I+PjJdPWY7cmV0dXJuIGV8MH13aGlsZSgwKTtpZigoZnwwKT09MHwoZXwwKT09MCl7ZD0wO249MDtjW2I+PjJdPW47cmV0dXJuIGR8MH1qPWFbZCsxPj4wXXwwO2k9aiYyNTU7ZDpkbyBpZigxKXtlPTY1O2c9MzQ4ODE7ZG97aWYoKGFbZz4+MF18MCk9PWo8PDI0Pj4yNClicmVhayBkO2c9ZysxfDA7ZT1lKy0xfDA7aD0oZXwwKSE9MH13aGlsZShoJihnJjN8MCkhPTApO2lmKCFoKXtkPTA7bj0wO2NbYj4+Ml09bjtyZXR1cm4gZHwwfX1lbHNle2U9NjU7Zz0zNDg4MX13aGlsZSgwKTtlOmRvIGlmKChhW2c+PjBdfDApIT1qPDwyND4+MjQpe2g9XyhpLDE2ODQzMDA5KXwwO2Y6ZG8gaWYoZT4+PjA+Myl3aGlsZSgxKXttPWNbZz4+Ml1eaDtpZigobSYtMjEzOTA2MjE0NF4tMjEzOTA2MjE0NCkmbSstMTY4NDMwMDkpYnJlYWsgZjtnPWcrNHwwO2U9ZSstNHwwO2lmKGU+Pj4wPD0zKXtuPTIyO2JyZWFrfX1lbHNlIG49MjI7d2hpbGUoMCk7aWYoKG58MCk9PTIyKWlmKCFlKXtkPTA7bj0wO2NbYj4+Ml09bjtyZXR1cm4gZHwwfXdoaWxlKDEpe2lmKChhW2c+PjBdfDApPT1qPDwyND4+MjQpYnJlYWsgZTtlPWUrLTF8MDtpZighZSl7ZT0wO2Y9MDticmVha31lbHNlIGc9ZysxfDB9Y1tiPj4yXT1mO3JldHVybiBlfDB9d2hpbGUoMCk7aWYoKGd8MCk9PTB8KGV8MCk9PTApe2Q9MDtuPTA7Y1tiPj4yXT1uO3JldHVybiBkfDB9az1hW2QrMj4+MF18MDtqPWsmMjU1O2c6ZG8gaWYoMSl7ZT02NTtoPTM0ODgxO2Rve2lmKChhW2g+PjBdfDApPT1rPDwyND4+MjQpYnJlYWsgZztoPWgrMXwwO2U9ZSstMXwwO2k9KGV8MCkhPTB9d2hpbGUoaSYoaCYzfDApIT0wKTtpZighaSl7ZD0wO249MDtjW2I+PjJdPW47cmV0dXJuIGR8MH19ZWxzZXtlPTY1O2g9MzQ4ODF9d2hpbGUoMCk7aDpkbyBpZigoYVtoPj4wXXwwKSE9azw8MjQ+PjI0KXtpPV8oaiwxNjg0MzAwOSl8MDtpOmRvIGlmKGU+Pj4wPjMpd2hpbGUoMSl7bT1jW2g+PjJdXmk7aWYoKG0mLTIxMzkwNjIxNDReLTIxMzkwNjIxNDQpJm0rLTE2ODQzMDA5KWJyZWFrIGk7aD1oKzR8MDtlPWUrLTR8MDtpZihlPj4+MDw9Myl7bj0zNjticmVha319ZWxzZSBuPTM2O3doaWxlKDApO2lmKChufDApPT0zNilpZighZSl7ZD0wO249MDtjW2I+PjJdPW47cmV0dXJuIGR8MH13aGlsZSgxKXtpZigoYVtoPj4wXXwwKT09azw8MjQ+PjI0KWJyZWFrIGg7ZT1lKy0xfDA7aWYoIWUpe2U9MDtmPTA7YnJlYWt9ZWxzZSBoPWgrMXwwfWNbYj4+Ml09ZjtyZXR1cm4gZXwwfXdoaWxlKDApO2lmKChofDApPT0wfChlfDApPT0wKXtkPTA7bj0wO2NbYj4+Ml09bjtyZXR1cm4gZHwwfWw9YVtkKzM+PjBdfDA7az1sJjI1NTtqOmRvIGlmKDEpe2U9NjU7aT0zNDg4MTtkb3tpZigoYVtpPj4wXXwwKT09bDw8MjQ+PjI0KWJyZWFrIGo7aT1pKzF8MDtlPWUrLTF8MDtqPShlfDApIT0wfXdoaWxlKGomKGkmM3wwKSE9MCk7aWYoIWope2Q9MDtuPTA7Y1tiPj4yXT1uO3JldHVybiBkfDB9fWVsc2V7ZT02NTtpPTM0ODgxfXdoaWxlKDApO2s6ZG8gaWYoKGFbaT4+MF18MCk9PWw8PDI0Pj4yNCltPWk7ZWxzZXtqPV8oaywxNjg0MzAwOSl8MDtsOmRvIGlmKGU+Pj4wPjMpd2hpbGUoMSl7bT1jW2k+PjJdXmo7aWYoKG0mLTIxMzkwNjIxNDReLTIxMzkwNjIxNDQpJm0rLTE2ODQzMDA5KWJyZWFrIGw7aT1pKzR8MDtlPWUrLTR8MDtpZihlPj4+MDw9Myl7bj00OTticmVha319ZWxzZSBuPTQ5O3doaWxlKDApO2lmKChufDApPT00OSlpZighZSl7ZD0wO249MDtjW2I+PjJdPW47cmV0dXJuIGR8MH13aGlsZSgxKXtpZigoYVtpPj4wXXwwKT09bDw8MjQ+PjI0KXttPWk7YnJlYWsga31lPWUrLTF8MDtpZighZSl7ZT0wO2Y9MDticmVha31lbHNlIGk9aSsxfDB9Y1tiPj4yXT1mO3JldHVybiBlfDB9d2hpbGUoMCk7aWYoKG18MCk9PTB8KGV8MCk9PTApe2Q9MDtuPTA7Y1tiPj4yXT1uO3JldHVybiBkfDB9bD1hW2QrND4+MF18MDtrPWwmMjU1O206ZG8gaWYoMSl7aT02NTtlPTM0ODgxO2Rve2lmKChhW2U+PjBdfDApPT1sPDwyND4+MjQpYnJlYWsgbTtlPWUrMXwwO2k9aSstMXwwO2o9KGl8MCkhPTB9d2hpbGUoaiYoZSYzfDApIT0wKTtpZighail7ZD0wO249MDtjW2I+PjJdPW47cmV0dXJuIGR8MH19ZWxzZXtpPTY1O2U9MzQ4ODF9d2hpbGUoMCk7bjpkbyBpZigoYVtlPj4wXXwwKSE9bDw8MjQ+PjI0KXtqPV8oaywxNjg0MzAwOSl8MDtvOmRvIGlmKGk+Pj4wPjMpd2hpbGUoMSl7az1jW2U+PjJdXmo7aWYoKGsmLTIxMzkwNjIxNDReLTIxMzkwNjIxNDQpJmsrLTE2ODQzMDA5KWJyZWFrIG87ZT1lKzR8MDtpPWkrLTR8MDtpZihpPj4+MDw9Myl7bj02MjticmVha319ZWxzZSBuPTYyO3doaWxlKDApO2lmKChufDApPT02MilpZighaSl7ZD0wO249MDtjW2I+PjJdPW47cmV0dXJuIGR8MH13aGlsZSgxKXtpZigoYVtlPj4wXXwwKT09bDw8MjQ+PjI0KWJyZWFrIG47aT1pKy0xfDA7aWYoIWkpe2U9MDtmPTA7YnJlYWt9ZWxzZSBlPWUrMXwwfWNbYj4+Ml09ZjtyZXR1cm4gZXwwfXdoaWxlKDApO2lmKChlfDApPT0wfChpfDApPT0wKXtkPTA7bj0wO2NbYj4+Ml09bjtyZXR1cm4gZHwwfWQ9ZCs1fDA7bj1lLTM0ODgxPDwyNHwobS0zNDg4MTw8MTh8KGgtMzQ4ODE8PDEyfChnLTM0ODgxPDw2fGYtMzQ4ODEpKSk7Y1tiPj4yXT1uO3JldHVybiBkfDB9ZnVuY3Rpb24gWWIoYixkLGUsZixnLGgpe2I9YnwwO2Q9ZHwwO2U9ZXwwO2Y9ZnwwO2c9Z3wwO2g9aHwwO3ZhciBqPTAsaz0wLGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTAsdD0wLHU9MCx2PTAsdz0wLHg9MCx5PTAsej0wLEE9MDtBPWk7dz1pPWkrNjMmLTY0O2k9aSs1NjB8MDtyPXcrNDg4fDA7ej13KzQ1NnwwO3Y9dysyMDh8MDt4PXc7eT13KzQxNnwwO3c9dys0MjR8MDtuPXYrMzJ8MDtpZihkPj4+MDw9NjQpe3A9bjtjW3A+PjJdPTA7Y1twKzQ+PjJdPTA7Y1t2Pj4yXT1jWzE4XTtjW3YrND4+Ml09Y1sxOV07Y1t2Kzg+PjJdPWNbMjBdO2NbdisxMj4+Ml09Y1syMV07Y1t2KzE2Pj4yXT1jWzIyXTtjW3YrMjA+PjJdPWNbMjNdO2NbdisyND4+Ml09Y1syNF07Y1t2KzI4Pj4yXT1jWzI1XTtwPXI7cT1wKzY0fDA7ZG97YVtwPj4wXT01NDtwPXArMXwwfXdoaWxlKChwfDApPChxfDApKTtsPShkfDApPT0wO2lmKCFsKXtqPWQ7az1uO2Fbcj4+MF09YVtiPj4wXV41NDtpZigoanwwKT09MSlkPWo7ZWxzZXtkPWo7bT04fX1lbHNlIGs9bn1lbHNle2Nbdj4+Ml09Y1sxOF07Y1t2KzQ+PjJdPWNbMTldO2Nbdis4Pj4yXT1jWzIwXTtjW3YrMTI+PjJdPWNbMjFdO2NbdisxNj4+Ml09Y1syMl07Y1t2KzIwPj4yXT1jWzIzXTtjW3YrMjQ+PjJdPWNbMjRdO2NbdisyOD4+Ml09Y1syNV07cD1IZChkfDAsMCwzKXwwO2w9bjtjW2w+PjJdPXA7Y1tsKzQ+PjJdPUM7bD12KzQwfDA7cD1sO209YjtxPXArNjR8MDtkb3thW3A+PjBdPWFbbT4+MF18MDtwPXArMXwwO209bSsxfDB9d2hpbGUoKHB8MCk8KHF8MCkpO0ViKHYsbCk7aj1iKzY0fDA7az1EZChkfDAsMCwtNjQsLTEpfDA7Yj1DO2lmKGI+Pj4wPjB8KGJ8MCk9PTAmaz4+PjA+NjMpe2Rve0ViKHYsaik7aj1qKzY0fDA7az1EZChrfDAsYnwwLC02NCwtMSl8MDtiPUN9d2hpbGUoYj4+PjA+MHwoYnwwKT09MCZrPj4+MD42Myk7Yj1rfWVsc2UgYj1rO0lkKGx8MCxqfDAsYnwwKXwwO0RiKHYseik7cD1uO2NbcD4+Ml09MDtjW3ArND4+Ml09MDtjW3Y+PjJdPWNbMThdO2Nbdis0Pj4yXT1jWzE5XTtjW3YrOD4+Ml09Y1syMF07Y1t2KzEyPj4yXT1jWzIxXTtjW3YrMTY+PjJdPWNbMjJdO2NbdisyMD4+Ml09Y1syM107Y1t2KzI0Pj4yXT1jWzI0XTtjW3YrMjg+PjJdPWNbMjVdO3A9cjtxPXArNjR8MDtkb3thW3A+PjBdPTU0O3A9cCsxfDB9d2hpbGUoKHB8MCk8KHF8MCkpO2Fbcj4+MF09YVt6Pj4wXV41NDtkPTMyO2I9ejtrPW47bD0wO209OH1pZigobXwwKT09OCl7aj0xO2Rve3U9citqfDA7YVt1Pj4wXT1hW3U+PjBdXmFbYitqPj4wXTtqPWorMXwwfXdoaWxlKChqfDApIT0oZHwwKSl9bz1rO2Nbbz4+Ml09NTEyO2Nbbys0Pj4yXT0wO289dis0MHwwO3A9bzttPXI7cT1wKzY0fDA7ZG97YVtwPj4wXT1hW20+PjBdfDA7cD1wKzF8MDttPW0rMXwwfXdoaWxlKChwfDApPChxfDApKTtFYih2LG8pO249disxMDR8MDttPXYrMTM2fDA7cD1tO2NbcD4+Ml09MDtjW3ArND4+Ml09MDtjW24+PjJdPWNbMThdO2Nbbis0Pj4yXT1jWzE5XTtjW24rOD4+Ml09Y1syMF07Y1tuKzEyPj4yXT1jWzIxXTtjW24rMTY+PjJdPWNbMjJdO2NbbisyMD4+Ml09Y1syM107Y1tuKzI0Pj4yXT1jWzI0XTtjW24rMjg+PjJdPWNbMjVdO3A9cjtxPXArNjR8MDtkb3thW3A+PjBdPTkyO3A9cCsxfDB9d2hpbGUoKHB8MCk8KHF8MCkpO2lmKCFsPyhhW3I+PjBdPWFbYj4+MF1eOTIsKGR8MCkhPTEpOjApe2o9MTtkb3t1PXIranwwO2FbdT4+MF09YVt1Pj4wXV5hW2Iraj4+MF07aj1qKzF8MH13aGlsZSgoanwwKSE9KGR8MCkpfWo9bTtjW2o+PjJdPTUxMjtjW2orND4+Ml09MDtqPXYrMTQ0fDA7cD1qO209cjtxPXArNjR8MDtkb3thW3A+PjBdPWFbbT4+MF18MDtwPXArMXwwO209bSsxfDB9d2hpbGUoKHB8MCk8KHF8MCkpO0ViKG4saik7ZG8gaWYoZil7Yj1rO3Q9Y1tiPj4yXXwwO2I9Y1tiKzQ+PjJdfDA7aj1HZCh0fDAsYnwwLDMpfDA7aj1qJjYzO3U9SGQoZnwwLDAsMyl8MDt1PURkKHR8MCxifDAsdXwwLEN8MCl8MDtiPWs7Y1tiPj4yXT11O2NbYis0Pj4yXT1DO2I9NjQtanwwO2o9dis0MCtqfDA7aWYoYj4+PjA+Zj4+PjApe0lkKGp8MCxlfDAsZnwwKXwwO2JyZWFrfUlkKGp8MCxlfDAsYnwwKXwwO0ViKHYsbyk7aj1lK2J8MDtrPUNkKGZ8MCwwLGJ8MCwwKXwwO2I9QztpZihiPj4+MD4wfChifDApPT0wJms+Pj4wPjYzKXtkb3tFYih2LGopO2o9ais2NHwwO2s9RGQoa3wwLGJ8MCwtNjQsLTEpfDA7Yj1DfXdoaWxlKGI+Pj4wPjB8KGJ8MCk9PTAmaz4+PjA+NjMpO2I9a31lbHNlIGI9aztJZChvfDAsanwwLGJ8MCl8MH13aGlsZSgwKTtpZighaCl7aT1BO3JldHVybn1sPXkrM3wwO2Q9eSsyfDA7bj15KzF8MDtvPXgrMzJ8MDtyPXgrMTA0fDA7ZT14KzEzNnwwO2Y9eCsxNDR8MDtzPXgrNDB8MDt0PTA7dT0wO2Rve3U9dSsxfDA7YVtsPj4wXT11O2FbZD4+MF09dT4+Pjg7YVtuPj4wXT11Pj4+MTY7YVt5Pj4wXT11Pj4+MjQ7SWQoeHwwLHZ8MCwyMDgpfDA7cT1vO2I9Y1txPj4yXXwwO3E9Y1txKzQ+PjJdfDA7aj1HZChifDAscXwwLDMpfDA7aj1qJjYzO3E9RGQoYnwwLHF8MCwzMiwwKXwwO2I9bztjW2I+PjJdPXE7Y1tiKzQ+PjJdPUM7Yj02NC1qfDA7aj14KzQwK2p8MDtpZihiPj4+MD40KXtxPWNbeT4+Ml18MDthW2o+PjBdPXE7YVtqKzE+PjBdPXE+Pjg7YVtqKzI+PjBdPXE+PjE2O2FbaiszPj4wXT1xPj4yNH1lbHNle0lkKGp8MCx5fDAsYnwwKXwwO0ViKHgscyk7aj15K2J8MDtrPUNkKDQsMCxifDAsMCl8MDtiPUM7aWYoYj4+PjA+MHwoYnwwKT09MCZrPj4+MD42Myl7ZG97RWIoeCxqKTtqPWorNjR8MDtrPURkKGt8MCxifDAsLTY0LC0xKXwwO2I9Q313aGlsZShiPj4+MD4wfChifDApPT0wJms+Pj4wPjYzKTtiPWt9ZWxzZSBiPWs7SWQoc3wwLGp8MCxifDApfDB9RGIoeCx6KTtxPWU7Yj1jW3E+PjJdfDA7cT1jW3ErND4+Ml18MDtqPUdkKGJ8MCxxfDAsMyl8MDtqPWomNjM7cT1EZChifDAscXwwLDI1NiwwKXwwO2I9ZTtjW2I+PjJdPXE7Y1tiKzQ+PjJdPUM7Yj02NC1qfDA7aj14KzE0NCtqfDA7aWYoYj4+PjA+MzIpe3A9ajttPXo7cT1wKzMyfDA7ZG97YVtwPj4wXT1hW20+PjBdfDA7cD1wKzF8MDttPW0rMXwwfXdoaWxlKChwfDApPChxfDApKX1lbHNle0lkKGp8MCx6fDAsYnwwKXwwO0ViKHIsZik7aj16K2J8MDtrPUNkKDMyLDAsYnwwLDApfDA7Yj1DO2lmKGI+Pj4wPjB8KGJ8MCk9PTAmaz4+PjA+NjMpe2Rve0ViKHIsaik7aj1qKzY0fDA7az1EZChrfDAsYnwwLC02NCwtMSl8MDtiPUN9d2hpbGUoYj4+PjA+MHwoYnwwKT09MCZrPj4+MD42Myk7Yj1rfWVsc2UgYj1rO0lkKGZ8MCxqfDAsYnwwKXwwfURiKHIsdyk7cT1oLXR8MDtJZChnK3R8MCx3fDAsKHE+Pj4wPjMyPzMyOnEpfDApfDA7dD11PDw1fXdoaWxlKHQ+Pj4wPGg+Pj4wKTtpPUE7cmV0dXJufWZ1bmN0aW9uIFpiKCl7cmV0dXJuIDMyfWZ1bmN0aW9uIF9iKCl7cmV0dXJuIDEwMn1mdW5jdGlvbiAkYigpe3JldHVybiAzMjk4NH1mdW5jdGlvbiBhYygpe3JldHVybiA1MjQyODh9ZnVuY3Rpb24gYmMoKXtyZXR1cm4gMTY3NzcyMTZ9ZnVuY3Rpb24gY2MoKXtyZXR1cm4gMzM1NTQ0MzJ9ZnVuY3Rpb24gZGMoKXtyZXR1cm4gMTA3Mzc0MTgyNH1mdW5jdGlvbiBlYyhhLGIsZCxlLGYsZyxoLGosayxsKXthPWF8MDtiPWJ8MDtkPWR8MDtlPWV8MDtmPWZ8MDtnPWd8MDtoPWh8MDtqPWp8MDtrPWt8MDtsPWx8MDt2YXIgbT0wLG49MCxvPTAscD0wO289aTtuPWk9aSs2MyYtNjQ7aT1pKzE2fDA7RmQoYXwwLDAsYnwwKXwwO209Z3xkO2lmKG0+Pj4wPjB8KG18MCk9PTAmKGZ8Yik+Pj4wPjQyOTQ5NjcyOTUpe2lmKCEoY1s3OTc5XXwwKSlkPTMxOTY0O2Vsc2UgZD1jWyhvYSgpfDApKzYwPj4yXXwwO2NbZD4+Ml09Mjc7bj0tMTtpPW87cmV0dXJuIG58MH1nPWs+Pj4wPDB8KGt8MCk9PTAmaj4+PjA8MzI3Njg7bT1nPzMyNzY4Omo7az1nPzA6azthOmRvIGlmKGs+Pj4wPDB8KGt8MCk9PTAmbT4+PjA8bD4+PjU+Pj4wKXtnPUdkKG18MCxrfDAsNil8MDtqPUM7az0xO3doaWxlKDEpe209SGQoMSwwLGt8MCl8MDtsPUM7ZD1rKzF8MDtpZihsPj4+MD5qPj4+MHwobHwwKT09KGp8MCkmbT4+PjA+Zz4+PjApe2Q9aztnPTE7YnJlYWsgYX1pZihkPj4+MDw2MylrPWQ7ZWxzZXtnPTE7YnJlYWt9fX1lbHNle2c9bD4+PjExO2o9MTt3aGlsZSgxKXtsPUhkKDEsMCxqfDApfDA7cD1DO2Q9aisxfDA7aWYocD4+PjA+MHwocHwwKT09MCZsPj4+MD5nPj4+MCl7ZD1qO2JyZWFrfWlmKGQ+Pj4wPDYzKWo9ZDtlbHNlIGJyZWFrfWc9R2QobXwwLGt8MCwyKXwwO2c9R2QoZ3wwLEN8MCxkfDApfDA7cD1DO209cD4+PjA+MHwocHwwKT09MCZnPj4+MD4xMDczNzQxODIzO2c9bT8xMDczNzQxODIzOmc7Zz1nPj4+M313aGlsZSgwKTtkPUhkKDEsMCxkfDApfDA7Y1tuKzQ+PjJdPTA7Y1tuPj4yXT0wO2Nbbis4Pj4yXT0wO2c9aGMobixlLGYsaCwzMixkLEMsOCxnLGEsYil8MDtkPWNbbj4+Ml18MDtpZihkKXpkKGQpO3A9ZztpPW87cmV0dXJuIHB8MH1mdW5jdGlvbiBmYyhiLGUsZixnLGgsaixrKXtiPWJ8MDtlPWV8MDtmPWZ8MDtnPWd8MDtoPWh8MDtqPWp8MDtrPWt8MDt2YXIgbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wLHM9MCx0PTAsdT0wLHY9MCx3PTA7dz1pO3Y9aT1pKzYzJi02NDtpPWkrMTEyfDA7dD12KzcyfDA7dT12KzEyfDA7bD1iO209bCsxMDJ8MDtkb3thW2w+PjBdPTA7bD1sKzF8MH13aGlsZSgobHwwKTwobXwwKSk7aWYoZz4+PjA+MHwoZ3wwKT09MCZmPj4+MD40Mjk0OTY3Mjk1KXtpZighKGNbNzk3OV18MCkpZz0zMTk2NDtlbHNlIGc9Y1sob2EoKXwwKSs2MD4+Ml18MDtjW2c+PjJdPTI3O3Y9LTE7aT13O3JldHVybiB2fDB9bT1qPj4+MDwwfChqfDApPT0wJmg+Pj4wPDMyNzY4O249bT8zMjc2ODpoO209bT8wOmo7YTpkbyBpZihtPj4+MDwwfChtfDApPT0wJm4+Pj4wPGs+Pj41Pj4+MCl7aD1HZChufDAsbXwwLDYpfDA7bD1DO209MTt3aGlsZSgxKXtrPUhkKDEsMCxtfDApfDA7bj1DO2c9bSsxfDA7aWYobj4+PjA+bD4+PjB8KG58MCk9PShsfDApJms+Pj4wPmg+Pj4wKXtnPW07aD0xO2JyZWFrIGF9aWYoZz4+PjA8NjMpbT1nO2Vsc2V7aD0xO2JyZWFrfX19ZWxzZXtoPWs+Pj4xMTtsPTE7d2hpbGUoMSl7az1IZCgxLDAsbHwwKXwwO2o9QztnPWwrMXwwO2lmKGo+Pj4wPjB8KGp8MCk9PTAmaz4+PjA+aD4+PjApe2c9bDticmVha31pZihnPj4+MDw2MylsPWc7ZWxzZSBicmVha31oPUdkKG58MCxtfDAsMil8MDtoPUdkKGh8MCxDfDAsZ3wwKXwwO2s9QztuPWs+Pj4wPjB8KGt8MCk9PTAmaD4+PjA+MTA3Mzc0MTgyMztoPW4/MTA3Mzc0MTgyMzpoO2g9aD4+PjN9d2hpbGUoMCk7bD0wO2Rve2FbdCtsPj4wXT1CYSgwKXwwO2w9bCsxfDB9d2hpbGUoKGx8MCkhPTMyKTtiOmRvIGlmKCgoKCgoKChnPj4+MDw9NjM/KGs9SGQoaHwwLDAsMyl8MCxuPUMsIShuPj4+MD4wfChufDApPT0wJms+Pj4wPjEwNzM3NDE4MjMpKTowKT8oYVt1Pj4wXT0zNixhW3UrMT4+MF09NTUsYVt1KzI+PjBdPTM2LGFbdSszPj4wXT1hWzM0ODgxK2c+PjBdfDAsYVt1KzQ+PjBdPTU0LGs9dSs1fDAsbz11Kzl8MCxhW2s+PjBdPTQ2LGFbaysxPj4wXT00NixhW2srMj4+MF09NDYsYVtrKzM+PjBdPTQ2LChvfDApIT0wKTowKT8ocD1vLHI9dSs1OHwwLChyfDApIT0ocHwwKSk6MCk/KHE9ci1wfDAsYVtvPj4wXT1hWzM0ODgxKyhoJjYzKT4+MF18MCwocXwwKSE9MSk6MCk/KGFbdSsxMD4+MF09YVszNDg4MSsoaD4+PjYmNjMpPj4wXXwwLChxfDApIT0yKTowKT8oYVt1KzExPj4wXT1hWzM0ODgxKyhoPj4+MTImNjMpPj4wXXwwLChxfDApIT0zKTowKT8oYVt1KzEyPj4wXT1hWzM0ODgxKyhoPj4+MTgmNjMpPj4wXXwwLChxfDApIT00KTowKT8ocz11KzE0fDAsYVt1KzEzPj4wXT1hWzM0ODgxKyhoPj4+MjQpPj4wXXwwLChzfDApIT0wKTowKXtwPXM7bz1yLXN8MDtnPTA7d2hpbGUoMSl7aWYoZz4+PjA8MzIpe249MDtrPWc7Zz0wfWVsc2UgYnJlYWs7ZG97cz1rO2s9aysxfDA7Zz0oZFt0K3M+PjBdfDApPDxufGc7bj1uKzh8MH13aGlsZShrPj4+MDwzMiZuPj4+MDwyNCk7aWYoIW4pZz1wO2Vsc2V7aD1nO2w9bzttPXA7aj0wO3doaWxlKDEpe2lmKCFsKWJyZWFrIGI7Zz1tKzF8MDthW20+PjBdPWFbMzQ4ODErKGgmNjMpPj4wXXwwO2o9ais2fDA7aWYoaj4+PjA+PW4+Pj4wKWJyZWFrO2Vsc2V7aD1oPj4+NjtsPWwrLTF8MDttPWd9fX1zPShnfDApPT0wO289KHM/MDpwLWd8MCkrb3wwO2lmKHMpYnJlYWsgYjtlbHNle3A9ZztnPWt9fWlmKHA+Pj4wPCh1KzU4fDApPj4+MCl7YVtwPj4wXT0wO2w9dis0fDA7Y1tsPj4yXT0wO2Nbdj4+Ml09MDttPXYrOHwwO2NbbT4+Ml09MDtnPShWYih2LGUsZix1LGIpfDApPT0wO2g9Y1t2Pj4yXXwwO2lmKGgpemQoaCk7Y1tsPj4yXT0wO2Nbdj4+Ml09MDtjW20+PjJdPTA7aWYoIWcpe3Y9MDtpPXc7cmV0dXJuIHZ8MH1pZighKGNbNzk3OV18MCkpZz0zMTk2NDtlbHNlIGc9Y1sob2EoKXwwKSs2MD4+Ml18MDtjW2c+PjJdPTIyO3Y9LTE7aT13O3JldHVybiB2fDB9fXdoaWxlKDApO2lmKCEoY1s3OTc5XXwwKSlnPTMxOTY0O2Vsc2UgZz1jWyhvYSgpfDApKzYwPj4yXXwwO2NbZz4+Ml09MjI7dj0tMTtpPXc7cmV0dXJuIHZ8MH1mdW5jdGlvbiBnYyhiLGQsZSxmKXtiPWJ8MDtkPWR8MDtlPWV8MDtmPWZ8MDt2YXIgZz0wLGg9MCxqPTAsaz0wLGw9MCxtPTA7bT1pO2w9aT1pKzYzJi02NDtpPWkrMTI4fDA7Zj1sKzEyfDA7YTpkbyBpZihiJjMpe2c9MTAyO2g9Yjtkb3tpZighKGFbaD4+MF18MCkpe2s9NTticmVhayBhfWg9aCsxfDA7Zz1nKy0xfDA7aj0oZ3wwKSE9MH13aGlsZShqJihoJjN8MCkhPTApO2lmKGopaz01O2Vsc2UgZz0wfWVsc2V7Zz0xMDI7aD1iO2s9NX13aGlsZSgwKTtiOmRvIGlmKChrfDApPT01KWlmKGFbaD4+MF18MCl7YzpkbyBpZihnPj4+MD4zKXdoaWxlKDEpe2o9Y1toPj4yXXwwO2lmKChqJi0yMTM5MDYyMTQ0Xi0yMTM5MDYyMTQ0KSZqKy0xNjg0MzAwOSlicmVhaztoPWgrNHwwO2c9ZystNHwwO2lmKGc+Pj4wPD0zKXtrPTEwO2JyZWFrIGN9fWVsc2Ugaz0xMDt3aGlsZSgwKTtpZigoa3wwKT09MTApaWYoIWcpe2c9MDticmVha313aGlsZSgxKXtpZighKGFbaD4+MF18MCkpYnJlYWsgYjtoPWgrMXwwO2c9ZystMXwwO2lmKCFnKXtnPTA7YnJlYWt9fX13aGlsZSgwKTtpZigoKChnfDApIT0wP2g6MCl8MCkhPShiKzEwMXwwKSl7Yj0tMTtpPW07cmV0dXJuIGJ8MH1qPWwrNHwwO2Nbaj4+Ml09MDtjW2w+PjJdPTA7az1sKzh8MDtjW2s+PjJdPTA7Zz0oVmIobCxkLGUsYixmKXwwKT09MDtoPWNbbD4+Ml18MDtpZihoKXpkKGgpO2Nbaj4+Ml09MDtjW2w+PjJdPTA7Y1trPj4yXT0wO2lmKGcpe2I9LTE7aT1tO3JldHVybiBifDB9ZWxzZXtnPTA7aD0wfWRve2c9YVtiK2g+PjBdXmFbZitoPj4wXXxnO2g9aCsxfDB9d2hpbGUoKGh8MCkhPTEwMik7aD0oKChnJjI1NSkrNTExfDApPj4+OCYxKSstMXwwO2c9ZisxMDJ8MDtkb3thW2Y+PjBdPTA7Zj1mKzF8MH13aGlsZSgoZnwwKTwoZ3wwKSk7Yj1oO2k9bTtyZXR1cm4gYnwwfWZ1bmN0aW9uIGhjKGIsZSxmLGcsaCxpLGosayxsLG0sbil7Yj1ifDA7ZT1lfDA7Zj1mfDA7Zz1nfDA7aD1ofDA7aT1pfDA7aj1qfDA7az1rfDA7bD1sfDA7bT1tfDA7bj1ufDA7dmFyIG89MCxwPTAscT0wLHI9MCxzPTAsdD0wLHU9MCx2PTAsdz0wLHg9MCx5PTAsej0wLEE9MCxCPTAsRD0wLEU9MCxGPTAsRz0wLEg9MCxJPTAsSj0wLEs9MDtKPU9kKGx8MCwwLGt8MCwwKXwwO0k9QztpZihJPj4+MD4wfChJfDApPT0wJko+Pj4wPjEwNzM3NDE4MjMpe2lmKCEoY1s3OTc5XXwwKSlvPTMxOTY0O2Vsc2Ugbz1jWyhvYSgpfDApKzYwPj4yXXwwO2Nbbz4+Ml09Mjc7Zj0tMTtyZXR1cm4gZnwwfWlmKGo+Pj4wPjB8KGp8MCk9PTAmaT4+PjA+NDI5NDk2NzI5NSl7aWYoIShjWzc5NzldfDApKW89MzE5NjQ7ZWxzZSBvPWNbKG9hKCl8MCkrNjA+PjJdfDA7Y1tvPj4yXT0yNztmPS0xO3JldHVybiBmfDB9Rz1EZChpfDAsanwwLC0xLC0xKXwwO0g9QztpZihqPj4+MDwwfChqfDApPT0wJmk+Pj4wPDJ8KChHJml8MCkhPTB8KEgmanwwKSE9MCkpe2lmKCEoY1s3OTc5XXwwKSlvPTMxOTY0O2Vsc2Ugbz1jWyhvYSgpfDApKzYwPj4yXXwwO2Nbbz4+Ml09MjI7Zj0tMTtyZXR1cm4gZnwwfWlmKChrfDApPT0wfChsfDApPT0wKXtpZighKGNbNzk3OV18MCkpbz0zMTk2NDtlbHNlIG89Y1sob2EoKXwwKSs2MD4+Ml18MDtjW28+PjJdPTIyO2Y9LTE7cmV0dXJuIGZ8MH1pZighKGs+Pj4wPjE2Nzc3MjE1PzE6KDMzNTU0NDMxLyhsPj4+MCl8MCk+Pj4wPGs+Pj4wKT8hKDA8aj4+PjB8KDA9PShqfDApPygzMzU1NDQzMS8oaz4+PjApfDApPj4+MDxpPj4+MDowKSk6MCl7ST1rPDw3O0o9XyhJLGwpfDA7eT1PZChJfDAsMCxpfDAsanwwKXwwO289eStKfDA7aWYobz4+PjA8eT4+PjApe2lmKCEoY1s3OTc5XXwwKSlvPTMxOTY0O2Vsc2Ugbz1jWyhvYSgpfDApKzYwPj4yXXwwO2Nbbz4+Ml09MTI7Zj0tMTtyZXR1cm4gZnwwfUY9azw8OHw2NDt3PW8rRnwwO2lmKHc+Pj4wPEY+Pj4wKXtpZighKGNbNzk3OV18MCkpbz0zMTk2NDtlbHNlIG89Y1sob2EoKXwwKSs2MD4+Ml18MDtjW28+PjJdPTEyO2Y9LTE7cmV0dXJuIGZ8MH14PWIrOHwwO2RvIGlmKChjW3g+PjJdfDApPj4+MDx3Pj4+MCl7bz1jW2I+PjJdfDA7aWYobyl6ZChvKTt2PWIrNHwwO2Nbdj4+Ml09MDtjW2I+PjJdPTA7Y1t4Pj4yXT0wO2RvIGlmKHc+Pj4wPD00Mjk0OTY3MTY4KXtpZih3Pj4+MD49NDI5NDk2NzE2OCl7aWYoIShjWzc5NzldfDApKW89MzE5NjQ7ZWxzZSBvPWNbKG9hKCl8MCkrNjA+PjJdfDA7Y1tvPj4yXT0xMjtxPTEyO289MDticmVha310PXd8ODtvPXlkKHQrNzZ8MCl8MDtpZihvKXtzPW8rLTh8MDtkbyBpZihvJjYzKXtyPW8rNjMmLTY0O0Y9cistOHwwO3E9cztyPShGLXF8MCk+Pj4wPjE1P0Y6cis1NnwwO3E9ci1xfDA7bz1vKy00fDA7Rj1jW28+PjJdfDA7cD0oRiYtOCktcXwwO2lmKCEoRiYzKSl7Y1tyPj4yXT0oY1tzPj4yXXwwKStxO2Nbcis0Pj4yXT1wO2JyZWFrfWVsc2V7Rj1yKzR8MDtjW0Y+PjJdPXB8Y1tGPj4yXSYxfDI7RT1yK3ArNHwwO2NbRT4+Ml09Y1tFPj4yXXwxO2Nbbz4+Ml09cXxjW28+PjJdJjF8MjtjW0Y+PjJdPWNbRj4+Ml18MTtBZChzLHEpO2JyZWFrfX1lbHNlIHI9czt3aGlsZSgwKTtvPXIrNHwwO3A9Y1tvPj4yXXwwO2lmKChwJjN8MCkhPTA/KHU9cCYtOCx1Pj4+MD4odCsxNnwwKT4+PjApOjApe0Y9dS10fDA7RT1yK3R8MDtjW28+PjJdPXR8cCYxfDI7Y1tFKzQ+PjJdPUZ8MztEPUUrRis0fDA7Y1tEPj4yXT1jW0Q+PjJdfDE7QWQoRSxGKX1xPTA7bz1yKzh8MH1lbHNle3E9MTI7bz0wfX1lbHNle3E9MTI7bz0wfXdoaWxlKDApO2lmKCEoY1s3OTc5XXwwKSlwPTMxOTY0O2Vsc2UgcD1jWyhvYSgpfDApKzYwPj4yXXwwO2NbcD4+Ml09cTtpZighcSl7Y1tiPj4yXT1vO2Nbdj4+Ml09bztjW3g+PjJdPShvfDApIT0wP3c6MDtpZighbylvPS0xO2Vsc2UgYnJlYWs7cmV0dXJuIG98MH1lbHNle2NbYj4+Ml09MDtjW3Y+PjJdPTA7Y1t4Pj4yXT0wO2Y9LTE7cmV0dXJuIGZ8MH19ZWxzZSBvPWNbYis0Pj4yXXwwO3doaWxlKDApO0Y9bytKfDA7RT1GK3l8MDtZYihlLGYsZyxoLG8sSik7dD1rPDw1O3U9RSsodDw8Mil8MDt2PUUrKGs8PDY8PDIpfDA7dz0odHwwKT09MDt4PShpfDApPT0wJihqfDApPT0wO2I9dCYxMDczNzQxNzkyO3k9KGJ8MCk9PTA7aD1JKy02NHwwO2c9RStofDA7aD11K2h8MDt6PWgrNHwwO0E9Zys0fDA7RD0wO2Rve0I9bysoXyhJLEQpfDApfDA7aWYoIXcpe3A9MDtkb3tzPUIrKHA8PDIpfDA7Y1tFKyhwPDwyKT4+Ml09KGRbcysxPj4wXXwwKTw8OHwoZFtzPj4wXXwwKXwoZFtzKzI+PjBdfDApPDwxNnwoZFtzKzM+PjBdfDApPDwyNDtwPXArMXwwfXdoaWxlKChwfDApIT0odHwwKSl9YTpkbyBpZigheCl7aWYoeSl7cD0wO3E9MDtkb3tpYyhFLHUsdixrKTtpYyh1LEUsdixrKTtwPURkKHB8MCxxfDAsMiwwKXwwO3E9Q313aGlsZShxPj4+MDxqPj4+MHwocXwwKT09KGp8MCkmcD4+PjA8aT4+PjApfWVsc2V7cj0wO3M9MDtkb3twPU9kKHJ8MCxzfDAsdHwwLDApfDA7cD1GKyhwPDwyKXwwO3E9MDtkb3tjW3ArKHE8PDIpPj4yXT1jW0UrKHE8PDIpPj4yXTtxPXErMXwwfXdoaWxlKChxfDApIT0oYnwwKSk7aWMoRSx1LHYsayk7cD1PZChyfDF8MCxzfDAsdHwwLDApfDA7cD1GKyhwPDwyKXwwO3E9MDtkb3tjW3ArKHE8PDIpPj4yXT1jW3UrKHE8PDIpPj4yXTtxPXErMXwwfXdoaWxlKChxfDApIT0oYnwwKSk7aWModSxFLHYsayk7cj1EZChyfDAsc3wwLDIsMCl8MDtzPUN9d2hpbGUocz4+PjA8aj4+PjB8KHN8MCk9PShqfDApJnI+Pj4wPGk+Pj4wKX1pZih5KXtwPTA7cT0wO3doaWxlKDEpe2ljKEUsdSx2LGspO2ljKHUsRSx2LGspO3A9RGQocHwwLHF8MCwyLDApfDA7cT1DO2lmKCEocT4+PjA8aj4+PjB8KHF8MCk9PShqfDApJnA+Pj4wPGk+Pj4wKSlicmVhayBhfX1lbHNle3I9MDtzPTB9ZG97cD1PZChjW2c+PjJdJkd8MCxjW0E+PjJdJkh8MCx0fDAsMCl8MDtwPUYrKHA8PDIpfDA7cT0wO2Rve0s9RSsocTw8Mil8MDtjW0s+PjJdPWNbSz4+Ml1eY1twKyhxPDwyKT4+Ml07cT1xKzF8MH13aGlsZSgocXwwKSE9KGJ8MCkpO2ljKEUsdSx2LGspO3A9T2QoY1toPj4yXSZHfDAsY1t6Pj4yXSZIfDAsdHwwLDApfDA7cD1GKyhwPDwyKXwwO3E9MDtkb3tLPXUrKHE8PDIpfDA7Y1tLPj4yXT1jW0s+PjJdXmNbcCsocTw8Mik+PjJdO3E9cSsxfDB9d2hpbGUoKHF8MCkhPShifDApKTtpYyh1LEUsdixrKTtyPURkKHJ8MCxzfDAsMiwwKXwwO3M9Q313aGlsZShzPj4+MDxqPj4+MHwoc3wwKT09KGp8MCkmcj4+PjA8aT4+PjApfXdoaWxlKDApO2lmKCF3KXtwPTA7ZG97Sz1CKyhwPDwyKXwwO3M9Y1tFKyhwPDwyKT4+Ml18MDthW0s+PjBdPXM7YVtLKzE+PjBdPXM+Pj44O2FbSysyPj4wXT1zPj4+MTY7YVtLKzM+PjBdPXM+Pj4yNDtwPXArMXwwfXdoaWxlKChwfDApIT0odHwwKSl9RD1EKzF8MH13aGlsZSgoRHwwKSE9KGx8MCkpO1liKGUsZixvLEosbSxuKTtLPTA7cmV0dXJuIEt8MH1pZighKGNbNzk3OV18MCkpbz0zMTk2NDtlbHNlIG89Y1sob2EoKXwwKSs2MD4+Ml18MDtjW28+PjJdPTEyO0s9LTE7cmV0dXJuIEt8MH1mdW5jdGlvbiBpYyhhLGIsZCxlKXthPWF8MDtiPWJ8MDtkPWR8MDtlPWV8MDt2YXIgZj0wLGc9MCxoPTAsaT0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wLHM9MCx0PTAsdT0wLHY9MCx3PTAseD0wLHk9MCx6PTAsQT0wLEI9MCxDPTAsRD0wLEU9MCxGPTAsRz0wLEg9MCxJPTAsSj0wLEs9MCxMPTAsTT0wLE49MDt3PWU8PDE7bT1hKygoZTw8NSkrLTE2PDwyKXwwO289Y1ttPj4yXXwwO2NbZD4+Ml09bztxPWNbbSs0Pj4yXXwwO0w9ZCs0fDA7Y1tMPj4yXT1xO3Q9Y1ttKzg+PjJdfDA7eD1kKzh8MDtjW3g+PjJdPXQ7dT1jW20rMTI+PjJdfDA7eT1kKzEyfDA7Y1t5Pj4yXT11O3M9Y1ttKzE2Pj4yXXwwO3o9ZCsxNnwwO2Nbej4+Ml09cztyPWNbbSsyMD4+Ml18MDtBPWQrMjB8MDtjW0E+PjJdPXI7cD1jW20rMjQ+PjJdfDA7Qj1kKzI0fDA7Y1tCPj4yXT1wO249Y1ttKzI4Pj4yXXwwO0M9ZCsyOHwwO2NbQz4+Ml09bjtsPWNbbSszMj4+Ml18MDtEPWQrMzJ8MDtjW0Q+PjJdPWw7aj1jW20rMzY+PjJdfDA7RT1kKzM2fDA7Y1tFPj4yXT1qO2g9Y1ttKzQwPj4yXXwwO0Y9ZCs0MHwwO2NbRj4+Ml09aDtmPWNbbSs0ND4+Ml18MDtHPWQrNDR8MDtjW0c+PjJdPWY7Zz1jW20rNDg+PjJdfDA7SD1kKzQ4fDA7Y1tIPj4yXT1nO2k9Y1ttKzUyPj4yXXwwO0k9ZCs1MnwwO2NbST4+Ml09aTtrPWNbbSs1Nj4+Ml18MDtKPWQrNTZ8MDtjW0o+PjJdPWs7bT1jW20rNjA+PjJdfDA7Sz1kKzYwfDA7Y1tLPj4yXT1tO2lmKCF3KXJldHVybjt2PWU8PDQ7ZT0wO3doaWxlKDEpe009ZTw8NDtOPWErKE08PDIpfDA7Y1tkPj4yXT1vXmNbTj4+Ml07Y1tMPj4yXT1xXmNbTis0Pj4yXTtjW3g+PjJdPXReY1tOKzg+PjJdO2NbeT4+Ml09dV5jW04rMTI+PjJdO2Nbej4+Ml09c15jW04rMTY+PjJdO2NbQT4+Ml09cl5jW04rMjA+PjJdO2NbQj4+Ml09cF5jW04rMjQ+PjJdO2NbQz4+Ml09bl5jW04rMjg+PjJdO2NbRD4+Ml09bF5jW04rMzI+PjJdO2NbRT4+Ml09al5jW04rMzY+PjJdO2NbRj4+Ml09aF5jW04rNDA+PjJdO2NbRz4+Ml09Zl5jW04rNDQ+PjJdO2NbSD4+Ml09Z15jW04rNDg+PjJdO2NbST4+Ml09aV5jW04rNTI+PjJdO2NbSj4+Ml09a15jW04rNTY+PjJdO2NbSz4+Ml09bV5jW04rNjA+PjJdO2pjKGQpO3U9ZTw8Mzt0PWIrKHU8PDIpfDA7Y1t0Pj4yXT1jW2Q+PjJdO2NbdCs0Pj4yXT1jW0w+PjJdO2NbdCs4Pj4yXT1jW3g+PjJdO2NbdCsxMj4+Ml09Y1t5Pj4yXTtjW3QrMTY+PjJdPWNbej4+Ml07Y1t0KzIwPj4yXT1jW0E+PjJdO2NbdCsyND4+Ml09Y1tCPj4yXTtjW3QrMjg+PjJdPWNbQz4+Ml07Y1t0KzMyPj4yXT1jW0Q+PjJdO2NbdCszNj4+Ml09Y1tFPj4yXTtjW3QrNDA+PjJdPWNbRj4+Ml07Y1t0KzQ0Pj4yXT1jW0c+PjJdO2NbdCs0OD4+Ml09Y1tIPj4yXTtjW3QrNTI+PjJdPWNbST4+Ml07Y1t0KzU2Pj4yXT1jW0o+PjJdO2NbdCs2MD4+Ml09Y1tLPj4yXTt0PWErKChNfDE2KTw8Mil8MDtjW2Q+PjJdPWNbZD4+Ml1eY1t0Pj4yXTtjW0w+PjJdPWNbTD4+Ml1eY1t0KzQ+PjJdO2NbeD4+Ml09Y1t4Pj4yXV5jW3QrOD4+Ml07Y1t5Pj4yXT1jW3k+PjJdXmNbdCsxMj4+Ml07Y1t6Pj4yXT1jW3o+PjJdXmNbdCsxNj4+Ml07Y1tBPj4yXT1jW0E+PjJdXmNbdCsyMD4+Ml07Y1tCPj4yXT1jW0I+PjJdXmNbdCsyND4+Ml07Y1tDPj4yXT1jW0M+PjJdXmNbdCsyOD4+Ml07Y1tEPj4yXT1jW0Q+PjJdXmNbdCszMj4+Ml07Y1tFPj4yXT1jW0U+PjJdXmNbdCszNj4+Ml07Y1tGPj4yXT1jW0Y+PjJdXmNbdCs0MD4+Ml07Y1tHPj4yXT1jW0c+PjJdXmNbdCs0ND4+Ml07Y1tIPj4yXT1jW0g+PjJdXmNbdCs0OD4+Ml07Y1tJPj4yXT1jW0k+PjJdXmNbdCs1Mj4+Ml07Y1tKPj4yXT1jW0o+PjJdXmNbdCs1Nj4+Ml07Y1tLPj4yXT1jW0s+PjJdXmNbdCs2MD4+Ml07amMoZCk7dT1iKyh1K3Y8PDIpfDA7Y1t1Pj4yXT1jW2Q+PjJdO2NbdSs0Pj4yXT1jW0w+PjJdO2NbdSs4Pj4yXT1jW3g+PjJdO2NbdSsxMj4+Ml09Y1t5Pj4yXTtjW3UrMTY+PjJdPWNbej4+Ml07Y1t1KzIwPj4yXT1jW0E+PjJdO2NbdSsyND4+Ml09Y1tCPj4yXTtjW3UrMjg+PjJdPWNbQz4+Ml07Y1t1KzMyPj4yXT1jW0Q+PjJdO2NbdSszNj4+Ml09Y1tFPj4yXTtjW3UrNDA+PjJdPWNbRj4+Ml07Y1t1KzQ0Pj4yXT1jW0c+PjJdO2NbdSs0OD4+Ml09Y1tIPj4yXTtjW3UrNTI+PjJdPWNbST4+Ml07Y1t1KzU2Pj4yXT1jW0o+PjJdO2NbdSs2MD4+Ml09Y1tLPj4yXTtlPWUrMnwwO2lmKGU+Pj4wPj13Pj4+MClicmVhaztmPWNbRz4+Ml18MDtnPWNbSD4+Ml18MDtpPWNbST4+Ml18MDtrPWNbSj4+Ml18MDttPWNbSz4+Ml18MDtvPWNbZD4+Ml18MDtxPWNbTD4+Ml18MDt0PWNbeD4+Ml18MDt1PWNbeT4+Ml18MDtzPWNbej4+Ml18MDtyPWNbQT4+Ml18MDtwPWNbQj4+Ml18MDtuPWNbQz4+Ml18MDtsPWNbRD4+Ml18MDtqPWNbRT4+Ml18MDtoPWNbRj4+Ml18MH1yZXR1cm59ZnVuY3Rpb24gamMoYSl7YT1hfDA7dmFyIGI9MCxkPTAsZT0wLGY9MCxnPTAsaD0wLGk9MCxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTAsdD0wLHU9MCx2PTAsdz0wLHg9MCx5PTAsej0wLEE9MCxCPTAsQz0wLEQ9MCxFPTAsRj0wLEc9MCxIPTAsST0wLEo9MCxLPTAsTD0wLE09MCxOPTAsTz0wLFA9MCxRPTAsUj0wLFM9MCxUPTAsVT0wLFY9MCxXPTAsWD0wLFk9MDtiPWErNHwwO3o9YSs4fDA7QT1hKzEyfDA7Qj1hKzE2fDA7Rj1hKzIwfDA7Zj1hKzI0fDA7az1hKzI4fDA7bj1hKzMyfDA7cz1hKzM2fDA7dD1hKzQwfDA7dT1hKzQ0fDA7dj1hKzQ4fDA7dz1hKzUyfDA7eD1hKzU2fDA7eT1hKzYwfDA7ZD1jW2I+PjJdfDA7ZT1jW0Y+PjJdfDA7Zz1jW3M+PjJdfDA7aD1jW3c+PjJdfDA7aT1jW2Y+PjJdfDA7aj1jW3Q+PjJdfDA7bD1jW3g+PjJdfDA7bT1jW3o+PjJdfDA7bz1jW3U+PjJdfDA7cD1jW3k+PjJdfDA7cT1jW0E+PjJdfDA7cj1jW2s+PjJdfDA7Qz1jW3Y+PjJdfDA7RD1jW2E+PjJdfDA7RT1jW0I+PjJdfDA7Rz1jW24+PjJdfDA7SD0wO2Rve1I9QytEfDA7Uj0oUjw8N3xSPj4+MjUpXkU7Tz1SK0R8MDtPPShPPDw5fE8+Pj4yMyleRztMPU8rUnwwO0w9KEw8PDEzfEw+Pj4xOSleQztVPUwrT3wwO1U9KFU8PDE4fFU+Pj4xNCleRDtOPWQrZXwwO049KE48PDd8Tj4+PjI1KV5nO0s9TitlfDA7Sz0oSzw8OXxLPj4+MjMpXmg7WD1LK058MDtYPShYPDwxM3xYPj4+MTkpXmQ7UT1YK0t8MDtRPShRPDwxOHxRPj4+MTQpXmU7Sj1pK2p8MDtKPShKPDw3fEo+Pj4yNSlebDtXPUoranwwO1c9KFc8PDl8Vz4+PjIzKV5tO1Q9VytKfDA7VD0oVDw8MTN8VD4+PjE5KV5pO009VCtXfDA7TT0oTTw8MTh8TT4+PjE0KV5qO1Y9bytwfDA7Vj0oVjw8N3xWPj4+MjUpXnE7Uz1WK3B8MDtTPShTPDw5fFM+Pj4yMylecjtQPVMrVnwwO1A9KFA8PDEzfFA+Pj4xOSlebztJPVArU3wwO0k9KEk8PDE4fEk+Pj4xNClecDtZPVYrVXwwO2Q9KFk8PDd8WT4+PjI1KV5YO1g9ZCtVfDA7bT0oWDw8OXxYPj4+MjMpXlc7Vz1tK2R8MDtxPShXPDwxM3xXPj4+MTkpXlY7Vj1xK218MDtEPShWPDwxOHxWPj4+MTQpXlU7VT1SK1F8MDtpPShVPDw3fFU+Pj4yNSleVDtUPWkrUXwwO3I9KFQ8PDl8VD4+PjIzKV5TO1M9citpfDA7RT0oUzw8MTN8Uz4+PjE5KV5SO1I9RStyfDA7ZT0oUjw8MTh8Uj4+PjE0KV5RO1E9TitNfDA7bz0oUTw8N3xRPj4+MjUpXlA7UD1vK018MDtHPShQPDw5fFA+Pj4yMyleTztPPUcrb3wwO2c9KE88PDEzfE8+Pj4xOSleTjtOPWcrR3wwO2o9KE48PDE4fE4+Pj4xNCleTTtNPUorSXwwO0M9KE08PDd8TT4+PjI1KV5MO0w9QytJfDA7aD0oTDw8OXxMPj4+MjMpXks7Sz1oK0N8MDtsPShLPDwxM3xLPj4+MTkpXko7Sj1sK2h8MDtwPShKPDwxOHxKPj4+MTQpXkk7SD1IKzJ8MH13aGlsZShIPj4+MDw4KTtjW2E+PjJdPShjW2E+PjJdfDApK0Q7Y1tiPj4yXT0oY1tiPj4yXXwwKStkO2Nbej4+Ml09KGNbej4+Ml18MCkrbTtjW0E+PjJdPShjW0E+PjJdfDApK3E7Y1tCPj4yXT0oY1tCPj4yXXwwKStFO2NbRj4+Ml09KGNbRj4+Ml18MCkrZTtjW2Y+PjJdPShjW2Y+PjJdfDApK2k7Y1trPj4yXT0oY1trPj4yXXwwKStyO2Nbbj4+Ml09KGNbbj4+Ml18MCkrRztjW3M+PjJdPShjW3M+PjJdfDApK2c7Y1t0Pj4yXT0oY1t0Pj4yXXwwKStqO2NbdT4+Ml09KGNbdT4+Ml18MCkrbztjW3Y+PjJdPShjW3Y+PjJdfDApK0M7Y1t3Pj4yXT0oY1t3Pj4yXXwwKStoO2NbeD4+Ml09KGNbeD4+Ml18MCkrbDtjW3k+PjJdPShjW3k+PjJdfDApK3A7cmV0dXJufWZ1bmN0aW9uIGtjKCl7cmV0dXJuIDMyfWZ1bmN0aW9uIGxjKCl7cmV0dXJuIDMyfWZ1bmN0aW9uIG1jKGEsYil7YT1hfDA7Yj1ifDA7bWQoYSxiLDMzNzg1KTtyZXR1cm4gMH1mdW5jdGlvbiBuYyhhLGIsYyl7YT1hfDA7Yj1ifDA7Yz1jfDA7bWQoYSxiLGMpO3JldHVybiAwfWZ1bmN0aW9uIG9jKCl7cmV0dXJuIDMyfWZ1bmN0aW9uIHBjKCl7cmV0dXJuIDI0fWZ1bmN0aW9uIHFjKCl7cmV0dXJuIDE2fWZ1bmN0aW9uIHJjKGIsYyxkLGUsZixnLGgpe2I9YnwwO2M9Y3wwO2Q9ZHwwO2U9ZXwwO2Y9ZnwwO2c9Z3wwO2g9aHwwO3ZhciBqPTAsaz0wLGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MDtyPWk7cT1pPWkrNjMmLTY0O2k9aSsyNDB8MDtwPXE7bz1xKzE3NnwwO3E9cSsxNDR8MDtuYihxLGcsaCwzMjk4OCk7aD1iO2o9ZDtpZihiPj4+MD49ZD4+PjA/MDxmPj4+MHwwPT0oZnwwKSYoaC1qfDApPj4+MDxlPj4+MDowKWs9NTtlbHNlIGlmKGQ+Pj4wPj1iPj4+MD8wPGY+Pj4wfDA9PShmfDApJihqLWh8MCk+Pj4wPGU+Pj4wOjApaz01O2lmKChrfDApPT01KXtKZChifDAsZHwwLGV8MCl8MDtkPWJ9aD1vO2s9aCszMnwwO2Rve2FbaD4+MF09MDtoPWgrMXwwfXdoaWxlKChofDApPChrfDApKTtsPWY+Pj4wPjB8KGZ8MCk9PTAmZT4+PjA+MzI7bT1sPzMyOmU7bj1sPzA6ZjtoPShtfDApPT0wJihufDApPT0wO2lmKCFoKXtrPWY+Pj4wPDB8KGZ8MCk9PTAmZT4+PjA8MzI7az1EZCgoaz9lOjMyKXwwLChrP2Y6MCl8MCwtMSwwKXwwO0lkKG8rMzJ8MCxkfDAsaysxfDApfDB9az1EZChtfDAsbnwwLDMyLDApfDA7aj1nKzE2fDA7bmQobyxvLGssQyxqLDAsMCxxKTtVYihwLG8pO2lmKCFoKXtnPWY+Pj4wPDB8KGZ8MCk9PTAmZT4+PjA8MzI7Zz1EZCgoZz9lOjMyKXwwLChnP2Y6MCl8MCwtMSwwKXwwO0lkKGJ8MCxvKzMyfDAsZysxfDApfDB9aD1vO2s9aCs2NHwwO2Rve2FbaD4+MF09MDtoPWgrMXwwfXdoaWxlKChofDApPChrfDApKTtpZighbCl7VGIocCxiLGUsZik7UmIocCxjKTtpPXI7cmV0dXJuIDB9bz1DZChlfDAsZnwwLG18MCxufDApfDA7bmQoYittfDAsZCttfDAsbyxDLGosMSwwLHEpO1RiKHAsYixlLGYpO1JiKHAsYyk7aT1yO3JldHVybiAwfWZ1bmN0aW9uIHNjKGEsYixjLGQsZSxmKXthPWF8MDtiPWJ8MDtjPWN8MDtkPWR8MDtlPWV8MDtmPWZ8MDtpZihkPj4+MD4wfChkfDApPT0wJmM+Pj4wPjQyOTQ5NjcyNzkpe2U9LTE7cmV0dXJuIGV8MH1yYyhhKzE2fDAsYSxiLGMsZCxlLGYpfDA7ZT0wO3JldHVybiBlfDB9ZnVuY3Rpb24gdGMoYixlLGYsZyxoLGosayl7Yj1ifDA7ZT1lfDA7Zj1mfDA7Zz1nfDA7aD1ofDA7aj1qfDA7az1rfDA7dmFyIGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTAsdD0wO3Q9aTtzPWk9aSs2MyYtNjQ7aT1pKzIwOHwwO209cztvPXMrMTQ0fDA7bj1zKzExMnwwO3I9cys0OHwwO3M9cysxNnwwO25iKHMsaixrLDMyOTg4KTtxPWorMTZ8MDtrPW47aj1zO2w9ayszMnwwO2Rve2Fbaz4+MF09YVtqPj4wXXwwO2s9aysxfDA7aj1qKzF8MH13aGlsZSgoa3wwKTwobHwwKSk7bD1xO2o9bDtsPWwrNHwwO2w9ZFtsPj4wXXxkW2wrMT4+MF08PDh8ZFtsKzI+PjBdPDwxNnxkW2wrMz4+MF08PDI0O2s9bTtjW2s+PjJdPWRbaj4+MF18ZFtqKzE+PjBdPDw4fGRbaisyPj4wXTw8MTZ8ZFtqKzM+PjBdPDwyNDtjW2srND4+Ml09bDtrPW0rOHwwO2Nbaz4+Ml09MDtjW2srND4+Ml09MDtvYihvLG0sbiwzMzgxNyk7az0wO2Rve2FbcitrPj4wXT1hW28raz4+MF18MDtrPWsrMXwwfXdoaWxlKChrfDApIT0zMik7aWYoUWIoZixlLGcsaCxyKXwwKXtrPXM7bD1rKzMyfDA7ZG97YVtrPj4wXT0wO2s9aysxfDB9d2hpbGUoKGt8MCk8KGx8MCkpO3M9LTE7aT10O3JldHVybiBzfDB9az1lO2o9YjtpZihlPj4+MD49Yj4+PjA/MDxoPj4+MHwwPT0oaHwwKSYoay1qfDApPj4+MDxnPj4+MDowKXA9OTtlbHNlIGlmKGI+Pj4wPj1lPj4+MD8wPGg+Pj4wfDA9PShofDApJihqLWt8MCk+Pj4wPGc+Pj4wOjApcD05O2lmKChwfDApPT05KXtKZChifDAsZXwwLGd8MCl8MDtlPWJ9az1oPj4+MD4wfChofDApPT0wJmc+Pj4wPjMyO2o9az8zMjpnO2w9az8wOmg7aWYoKGp8MCk9PTAmKGx8MCk9PTApbmQocixyLDMyLDAscSwwLDAscyk7ZWxzZXtmPXIrMzJ8MDtwPWg+Pj4wPDB8KGh8MCk9PTAmZz4+PjA8MzI7cD1EZCgocD9nOjMyKXwwLChwP2g6MCl8MCwtMSwwKXwwO3A9cCsxfDA7SWQoZnwwLGV8MCxwfDApfDA7bz1EZChqfDAsbHwwLDMyLDApfDA7bmQocixyLG8sQyxxLDAsMCxzKTtJZChifDAsZnwwLHB8MCl8MH1pZihrKXtyPUNkKGd8MCxofDAsanwwLGx8MCl8MDtuZChiK2p8MCxlK2p8MCxyLEMscSwxLDAscyl9az1zO2w9ayszMnwwO2Rve2Fbaz4+MF09MDtrPWsrMXwwfXdoaWxlKChrfDApPChsfDApKTtzPTA7aT10O3JldHVybiBzfDB9ZnVuY3Rpb24gdWMoYSxiLGMsZCxlLGYpe2E9YXwwO2I9YnwwO2M9Y3wwO2Q9ZHwwO2U9ZXwwO2Y9ZnwwO2lmKGQ+Pj4wPDB8KGR8MCk9PTAmYz4+PjA8MTYpe2U9LTE7cmV0dXJuIGV8MH1kPURkKGN8MCxkfDAsLTE2LC0xKXwwO2U9dGMoYSxiKzE2fDAsYixkLEMsZSxmKXwwO3JldHVybiBlfDB9ZnVuY3Rpb24gdmMoKXtyZXR1cm4gOH1mdW5jdGlvbiB3Yygpe3JldHVybiAxNn1mdW5jdGlvbiB4YyhiLGMsZSxmLGcpe2I9YnwwO2M9Y3wwO2U9ZXwwO2Y9ZnwwO2c9Z3wwO3ZhciBoPTAsaT0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wLHM9MCx0PTAsdT0wLHY9MCx3PTAseD0wLHk9MDtoPWRbZz4+MF18MDtvPUhkKGRbZysxPj4wXXwwfDAsMCw4KXwwO249QztqPUhkKGRbZysyPj4wXXwwfDAsMCwxNil8MDtuPW58QztrPUhkKGRbZyszPj4wXXwwfDAsMCwyNCl8MDtuPW58Q3woZFtnKzQ+PjBdfDApO3I9SGQoZFtnKzU+PjBdfDB8MCwwLDQwKXwwO249bnxDO2k9SGQoZFtnKzY+PjBdfDB8MCwwLDQ4KXwwO249bnxDO2w9SGQoZFtnKzc+PjBdfDB8MCwwLDU2KXwwO2w9b3xofGp8a3xyfGl8bDtuPW58QztpPWRbZys4Pj4wXXwwO3I9SGQoZFtnKzk+PjBdfDB8MCwwLDgpfDA7az1DO2o9SGQoZFtnKzEwPj4wXXwwfDAsMCwxNil8MDtrPWt8QztoPUhkKGRbZysxMT4+MF18MHwwLDAsMjQpfDA7az1rfEN8KGRbZysxMj4+MF18MCk7bz1IZChkW2crMTM+PjBdfDB8MCwwLDQwKXwwO2s9a3xDO3A9SGQoZFtnKzE0Pj4wXXwwfDAsMCw0OCl8MDtrPWt8QzttPUhkKGRbZysxNT4+MF18MHwwLDAsNTYpfDA7bT1yfGl8anxofG98cHxtO2s9a3xDO3A9ZSY3O289YytlKygwLXApfDA7ZT1IZChlfDAsZnwwLDU2KXwwO2c9QztoPW1eMjAzNzY3MTI4MztqPWteMTk1MjgwMTg5MDtpPWxeMTg1MjE0MjE3NztmPW5eMTgxOTg5NTY1MzttPW1eMTg1MjA3NTg4NTtrPWteMTY4NTAyNTM3NztsPWxeMTg4NjYxMDgwNTtuPW5eMTkzNjY4MjM0MTtpZigob3wwKSE9KGN8MCkpe2Rve3g9ZFtjPj4wXXwwO3k9SGQoZFtjKzE+PjBdfDB8MCwwLDgpfDA7cj1DO3c9SGQoZFtjKzI+PjBdfDB8MCwwLDE2KXwwO3I9cnxDO3Q9SGQoZFtjKzM+PjBdfDB8MCwwLDI0KXwwO3I9cnxDfChkW2MrND4+MF18MCk7dT1IZChkW2MrNT4+MF18MHwwLDAsNDApfDA7cj1yfEM7dj1IZChkW2MrNj4+MF18MHwwLDAsNDgpfDA7cj1yfEM7cz1IZChkW2MrNz4+MF18MHwwLDAsNTYpfDA7cz15fHh8d3x0fHV8dnxzO3I9cnxDO3Y9c15oO3U9cl5qO249RGQobHwwLG58MCxtfDAsa3wwKXwwO2w9Qzt0PUhkKG18MCxrfDAsMTMpfDA7aD1DO209R2QobXwwLGt8MCw1MSl8MDttPSh0fG0pXm47aD0oaHxDKV5sO2Y9RGQodnwwLHV8MCxpfDAsZnwwKXwwO2k9Qzt0PUhkKHZ8MCx1fDAsMTYpfDA7aj1DO3U9R2QodnwwLHV8MCw0OCl8MDt1PSh0fHUpXmY7aj0oanxDKV5pO249RGQodXwwLGp8MCxsfDAsbnwwKXwwO2w9Qzt0PUhkKHV8MCxqfDAsMjEpfDA7az1DO2o9R2QodXwwLGp8MCw0Myl8MDtqPSh0fGopXm47az0oa3xDKV5sO2k9RGQoZnwwLGl8MCxtfDAsaHwwKXwwO2Y9Qzt0PUhkKG18MCxofDAsMTcpfDA7dT1DO2g9R2QobXwwLGh8MCw0Nyl8MDtoPWleKHR8aCk7dT1mXih1fEMpO2w9RGQobnwwLGx8MCxofDAsdXwwKXwwO249Qzt0PUhkKGh8MCx1fDAsMTMpfDA7bT1DO3U9R2QoaHwwLHV8MCw1MSl8MDt1PSh0fHUpXmw7bT0obXxDKV5uO2k9RGQoanwwLGt8MCxmfDAsaXwwKXwwO2Y9Qzt0PUhkKGp8MCxrfDAsMTYpfDA7aD1DO2s9R2QoanwwLGt8MCw0OCl8MDtrPSh0fGspXmk7aD0oaHxDKV5mO2w9RGQoa3wwLGh8MCxufDAsbHwwKXwwO249Qzt0PUhkKGt8MCxofDAsMjEpfDA7aj1DO2g9R2Qoa3wwLGh8MCw0Myl8MDtoPSh0fGgpXmw7aj0oanxDKV5uO2Y9RGQoaXwwLGZ8MCx1fDAsbXwwKXwwO2k9Qzt0PUhkKHV8MCxtfDAsMTcpfDA7az1DO209R2QodXwwLG18MCw0Nyl8MDttPSh0fG0pXmY7az0oa3xDKV5pO2w9bF5zO249bl5yO2M9Yys4fDB9d2hpbGUoKGN8MCkhPShvfDApKTtjPW99c3dpdGNoKHB8MCl7Y2FzZSA3OntlPUhkKGRbYys2Pj4wXXwwfDAsMCw0OCl8MHxlO2c9Q3xnO3E9NTticmVha31jYXNlIDY6e3E9NTticmVha31jYXNlIDU6e3E9NjticmVha31jYXNlIDQ6e3E9NzticmVha31jYXNlIDM6e3E9ODticmVha31jYXNlIDI6e3E9OTticmVha31jYXNlIDE6e3E9MTA7YnJlYWt9ZGVmYXVsdDp7fX1pZigocXwwKT09NSl7eT1IZChkW2MrNT4+MF18MHwwLDAsNDApfDA7Zz1DfGc7ZT15fGU7cT02fWlmKChxfDApPT02KXtnPWRbYys0Pj4wXXwwfGc7cT03fWlmKChxfDApPT03KXt5PUhkKGRbYyszPj4wXXwwfDAsMCwyNCl8MDtlPXl8ZTtnPUN8ZztxPTh9aWYoKHF8MCk9PTgpe3k9SGQoZFtjKzI+PjBdfDB8MCwwLDE2KXwwO2U9eXxlO2c9Q3xnO3E9OX1pZigocXwwKT09OSl7eT1IZChkW2MrMT4+MF18MHwwLDAsOCl8MDtlPXl8ZTtnPUN8ZztxPTEwfWlmKChxfDApPT0xMCllPWRbYz4+MF18MHxlO3k9ZV5oO3I9Z15qO3M9RGQobHwwLG58MCxtfDAsa3wwKXwwO3E9Qzt3PUhkKG18MCxrfDAsMTMpfDA7dD1DO3g9R2QobXwwLGt8MCw1MSl8MDt4PSh3fHgpXnM7dD0odHxDKV5xO3c9RGQoeXwwLHJ8MCxpfDAsZnwwKXwwO3Y9Qzt1PUhkKHl8MCxyfDAsMTYpfDA7cD1DO3I9R2QoeXwwLHJ8MCw0OCl8MDtyPSh1fHIpXnc7cD0ocHxDKV52O3M9RGQocnwwLHB8MCxxfDAsc3wwKXwwO3E9Qzt1PUhkKHJ8MCxwfDAsMjEpfDA7eT1DO3A9R2QocnwwLHB8MCw0Myl8MDtwPSh1fHApXnM7eT0oeXxDKV5xO3Y9RGQod3wwLHZ8MCx4fDAsdHwwKXwwO3c9Qzt1PUhkKHh8MCx0fDAsMTcpfDA7cj1DO3Q9R2QoeHwwLHR8MCw0Nyl8MDt0PXZeKHV8dCk7cj13XihyfEMpO3E9RGQoc3wwLHF8MCx0fDAscnwwKXwwO3M9Qzt1PUhkKHR8MCxyfDAsMTMpfDA7eD1DO3I9R2QodHwwLHJ8MCw1MSl8MDtyPSh1fHIpXnE7eD0oeHxDKV5zO3Y9RGQocHwwLHl8MCx3fDAsdnwwKXwwO3c9Qzt1PUhkKHB8MCx5fDAsMTYpfDA7dD1DO3k9R2QocHwwLHl8MCw0OCl8MDt5PSh1fHkpXnY7dD0odHxDKV53O3E9RGQoeXwwLHR8MCxzfDAscXwwKXwwO3M9Qzt1PUhkKHl8MCx0fDAsMjEpfDA7cD1DO3Q9R2QoeXwwLHR8MCw0Myl8MDt0PSh1fHQpXnE7cD0ocHxDKV5zO3c9RGQodnwwLHd8MCxyfDAseHwwKXwwO3Y9Qzt1PUhkKHJ8MCx4fDAsMTcpfDA7eT1DO3g9R2QocnwwLHh8MCw0Nyl8MDt4PSh1fHgpXnc7eT0oeXxDKV52O3M9RGQocV5lfDAsc15nfDAseHwwLHl8MCl8MDtxPUM7dT1IZCh4fDAseXwwLDEzKXwwO3I9Qzt5PUdkKHh8MCx5fDAsNTEpfDA7eT1zXih1fHkpO3I9cV4ocnxDKTt3PURkKHR8MCxwfDAsdl4yNTV8MCx3fDApfDA7dj1DO3U9SGQodHwwLHB8MCwxNil8MDt4PUM7cD1HZCh0fDAscHwwLDQ4KXwwO3A9KHV8cCledzt4PSh4fEMpXnY7cz1EZChwfDAseHwwLHF8MCxzfDApfDA7cT1DO3U9SGQocHwwLHh8MCwyMSl8MDt0PUM7eD1HZChwfDAseHwwLDQzKXwwO3g9KHV8eCleczt0PSh0fEMpXnE7dj1EZCh3fDAsdnwwLHl8MCxyfDApfDA7dz1DO3U9SGQoeXwwLHJ8MCwxNyl8MDtwPUM7cj1HZCh5fDAscnwwLDQ3KXwwO3I9KHV8ciledjtwPShwfEMpXnc7cT1EZChzfDAscXwwLHJ8MCxwfDApfDA7cz1DO3U9SGQocnwwLHB8MCwxMyl8MDt5PUM7cD1HZChyfDAscHwwLDUxKXwwO3A9KHV8cClecTt5PSh5fEMpXnM7dj1EZCh4fDAsdHwwLHd8MCx2fDApfDA7dz1DO3U9SGQoeHwwLHR8MCwxNil8MDtyPUM7dD1HZCh4fDAsdHwwLDQ4KXwwO3Q9KHV8dCledjtyPShyfEMpXnc7cT1EZCh0fDAscnwwLHN8MCxxfDApfDA7cz1DO3U9SGQodHwwLHJ8MCwyMSl8MDt4PUM7cj1HZCh0fDAscnwwLDQzKXwwO3I9KHV8cilecTt4PSh4fEMpXnM7dz1EZCh2fDAsd3wwLHB8MCx5fDApfDA7dj1DO3U9SGQocHwwLHl8MCwxNyl8MDt0PUM7eT1HZChwfDAseXwwLDQ3KXwwO3k9KHV8eSledzt0PSh0fEMpXnY7cz1EZChxfDAsc3wwLHl8MCx0fDApfDA7cT1DO3U9SGQoeXwwLHR8MCwxMyl8MDtwPUM7dD1HZCh5fDAsdHwwLDUxKXwwO3Q9KHV8dClecztwPShwfEMpXnE7dz1EZChyfDAseHwwLHZ8MCx3fDApfDA7dj1DO3U9SGQocnwwLHh8MCwxNil8MDt5PUM7eD1HZChyfDAseHwwLDQ4KXwwO3g9KHV8eCledzt5PSh5fEMpXnY7cz1EZCh4fDAseXwwLHF8MCxzfDApfDA7cT1DO3U9SGQoeHwwLHl8MCwyMSl8MDtyPUM7eT1HZCh4fDAseXwwLDQzKXwwO3k9KHV8eSlecztyPShyfEMpXnE7dj1EZCh3fDAsdnwwLHR8MCxwfDApfDA7dz1DO3U9SGQodHwwLHB8MCwxNyl8MDt4PUM7cD1HZCh0fDAscHwwLDQ3KXwwO3A9KHV8cCledjt4PSh4fEMpXnc7cT1EZChzfDAscXwwLHB8MCx4fDApfDA7cz1DO3U9SGQocHwwLHh8MCwxMyl8MDt0PUM7eD1HZChwfDAseHwwLDUxKXwwO3E9KHV8eClecTtzPSh0fEMpXnM7dj1EZCh5fDAscnwwLHd8MCx2fDApfDA7dz1DO3Q9SGQoeXwwLHJ8MCwxNil8MDt4PUM7cj1HZCh5fDAscnwwLDQ4KXwwO3I9KHR8ciledjt4PSh4fEMpXnc7dD1IZChyfDAseHwwLDIxKXwwO3k9Qzt4PUdkKHJ8MCx4fDAsNDMpfDA7eT15fEM7dz1EZCh2fDAsd3wwLHF8MCxzfDApfDA7dj1DO3I9SGQocXwwLHN8MCwxNyl8MDt1PUM7cz1HZChxfDAsc3wwLDQ3KXwwO3g9KHJ8cyled152Xih0fHgpO3k9KHV8Qyledl53Xnk7YVtiPj4wXT14O2FbYisxPj4wXT14Pj4+ODthW2IrMj4+MF09eD4+PjE2O2FbYiszPj4wXT14Pj4+MjQ7YVtiKzQ+PjBdPXk7dz1HZCh4fDAseXwwLDQwKXwwO2FbYis1Pj4wXT13O3c9R2QoeHwwLHl8MCw0OCl8MDthW2IrNj4+MF09dzt5PUdkKHh8MCx5fDAsNTYpfDA7YVtiKzc+PjBdPXk7cmV0dXJuIDB9ZnVuY3Rpb24geWMoKXtyZXR1cm4gNjR9ZnVuY3Rpb24gemMoKXtyZXR1cm4gMzJ9ZnVuY3Rpb24gQWMoKXtyZXR1cm4gMzJ9ZnVuY3Rpb24gQmMoKXtyZXR1cm4gNjR9ZnVuY3Rpb24gQ2MoYixlLGYpe2I9YnwwO2U9ZXwwO2Y9ZnwwO3ZhciBnPTAsaD0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTA7bz1pO2g9aT1pKzYzJi02NDtpPWkrNDk2fDA7az1oO2o9aCs0NDh8MDtsPWgrNDA4fDA7bT1oKzM2OHwwO2g9aCsyMDh8MDtnPWsrNjR8MDtuPWs7cD04O3E9bis2NHwwO2Rve2Nbbj4+Ml09Y1twPj4yXTtuPW4rNHwwO3A9cCs0fDB9d2hpbGUoKG58MCk8KHF8MCkpO249ays3MnwwO2Nbbj4+Ml09MjU2O2Nbbis0Pj4yXT0wO249ZztjW24+PjJdPTA7Y1tuKzQ+PjJdPTA7bj1rKzgwfDA7cD1mO3E9biszMnwwO2Rve2Fbbj4+MF09YVtwPj4wXXwwO249bisxfDA7cD1wKzF8MH13aGlsZSgobnwwKTwocXwwKSk7R2IoayxlKTthW2U+PjBdPShkW2U+PjBdfDApJjI0ODtxPWUrMzF8MDthW3E+PjBdPShkW3E+PjBdfDApJjYzfDY0O1JjKGgsZSk7SWMoaixoKzgwfDApO0pjKGwsaCxqKTtKYyhtLGgrNDB8MCxqKTtMYyhiLG0pO0xjKGssbCk7cT1iKzMxfDA7YVtxPj4wXT0oZFtxPj4wXXwwKV4oZFtrPj4wXXwwKTw8NztKZChlfDAsZnwwLDMyKXwwO0pkKGUrMzJ8MCxifDAsMzIpfDA7aT1vO3JldHVybiAwfWZ1bmN0aW9uIERjKGIsZSl7Yj1ifDA7ZT1lfDA7dmFyIGY9MCxnPTAsaD0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTA7cT1pO249aT1pKzYzJi02NDtpPWkrNTI4fDA7bT1uO2w9bis0NDh8MDtvPW4rNDA4fDA7cD1uKzM2OHwwO2s9bisyMDh8MDtuPW4rNDg4fDA7Zj0wO2Rve2FbbitmPj4wXT1CYSgwKXwwO2Y9ZisxfDB9d2hpbGUoKGZ8MCkhPTMyKTtmPW0rNjR8MDtnPW07aD04O2o9Zys2NHwwO2Rve2NbZz4+Ml09Y1toPj4yXTtnPWcrNHwwO2g9aCs0fDB9d2hpbGUoKGd8MCk8KGp8MCkpO2c9bSs3MnwwO2NbZz4+Ml09MjU2O2NbZys0Pj4yXT0wO2c9ZjtjW2c+PjJdPTA7Y1tnKzQ+PjJdPTA7Zz1tKzgwfDA7aD1uO2o9ZyszMnwwO2Rve2FbZz4+MF09YVtoPj4wXXwwO2c9ZysxfDA7aD1oKzF8MH13aGlsZSgoZ3wwKTwoanwwKSk7R2IobSxlKTthW2U+PjBdPShkW2U+PjBdfDApJjI0ODtnPWUrMzF8MDthW2c+PjBdPShkW2c+PjBdfDApJjYzfDY0O1JjKGssZSk7SWMobCxrKzgwfDApO0pjKG8sayxsKTtKYyhwLGsrNDB8MCxsKTtMYyhiLHApO0xjKG0sbyk7Zz1iKzMxfDA7YVtnPj4wXT0oZFtnPj4wXXwwKV4oZFttPj4wXXwwKTw8NztnPWU7aD1uO2o9ZyszMnwwO2Rve2FbZz4+MF09YVtoPj4wXXwwO2c9ZysxfDA7aD1oKzF8MH13aGlsZSgoZ3wwKTwoanwwKSk7SmQoZSszMnwwLGJ8MCwzMil8MDtpPXE7cmV0dXJuIDB9ZnVuY3Rpb24gRWMoYSxiLGQsZSxmLGcpe2E9YXwwO2I9YnwwO2Q9ZHwwO2U9ZXwwO2Y9ZnwwO2c9Z3wwO3ZhciBoPTAsaj0wLGs9MDtoPWk7aj1pPWkrNjMmLTY0O2k9aSsxNnwwO2s9YSs2NHwwO0pkKGt8MCxkfDAsZXwwKXwwO1hjKGEsaixrLGUsZixnKTtnPWo7ZD0oYnwwKSE9MDtpZigoY1tnPj4yXXwwKT09NjQmKGNbZys0Pj4yXXwwKT09MCl7aWYoIWQpe2s9MDtpPWg7cmV0dXJuIGt8MH1qPURkKGV8MCxmfDAsNjQsMCl8MDtrPWI7Y1trPj4yXT1qO2Nbays0Pj4yXT1DO2s9MDtpPWg7cmV0dXJuIGt8MH1lbHNle2lmKGQpe2s9YjtjW2s+PjJdPTA7Y1trKzQ+PjJdPTB9az1EZChlfDAsZnwwLDY0LDApfDA7RmQoYXwwLDAsa3wwKXwwO2s9LTE7aT1oO3JldHVybiBrfDB9cmV0dXJuIDB9ZnVuY3Rpb24gRmMoYSxiLGQsZSxmLGcpe2E9YXwwO2I9YnwwO2Q9ZHwwO2U9ZXwwO2Y9ZnwwO2c9Z3wwO3ZhciBoPTA7ZT1EZChlfDAsZnwwLC02NCwtMSl8MDtmPUM7ZG8gaWYoIShmPj4+MD4wfChmfDApPT0wJmU+Pj4wPjQyOTQ5NjcyMzEpKXtoPWQrNjR8MDtpZihWYyhkLGgsZSxmLGcpfDApe0ZkKGF8MCwwLGV8MCl8MDticmVha31pZihiKXtkPWI7Y1tkPj4yXT1lO2NbZCs0Pj4yXT1mfUpkKGF8MCxofDAsZXwwKXwwO2Q9MDtyZXR1cm4gZHwwfXdoaWxlKDApO2lmKCFiKXtkPS0xO3JldHVybiBkfDB9ZD1iO2NbZD4+Ml09MDtjW2QrND4+Ml09MDtkPS0xO3JldHVybiBkfDB9ZnVuY3Rpb24gR2MoYSxiLGMsZCxlLGYpe2E9YXwwO2I9YnwwO2M9Y3wwO2Q9ZHwwO2U9ZXwwO2Y9ZnwwO1hjKGEsYixjLGQsZSxmKTtyZXR1cm4gMH1mdW5jdGlvbiBIYyhhLGIsYyxkLGUpe2E9YXwwO2I9YnwwO2M9Y3wwO2Q9ZHwwO2U9ZXwwO3JldHVybiBWYyhhLGIsYyxkLGUpfDB9ZnVuY3Rpb24gSWMoYSxiKXthPWF8MDtiPWJ8MDt2YXIgYz0wLGQ9MCxlPTAsZj0wLGc9MDtnPWk7Yz1pPWkrNjMmLTY0O2k9aSsxNjB8MDtkPWMrMTIwfDA7ZT1jKzgwfDA7Zj1jKzQwfDA7S2MoZCxiKTtLYyhlLGQpO0tjKGUsZSk7SmMoZSxiLGUpO0pjKGQsZCxlKTtLYyhmLGQpO0pjKGUsZSxmKTtLYyhmLGUpO0tjKGYsZik7S2MoZixmKTtLYyhmLGYpO0tjKGYsZik7SmMoZSxmLGUpO0tjKGYsZSk7S2MoZixmKTtLYyhmLGYpO0tjKGYsZik7S2MoZixmKTtLYyhmLGYpO0tjKGYsZik7S2MoZixmKTtLYyhmLGYpO0tjKGYsZik7SmMoZixmLGUpO0tjKGMsZik7S2MoYyxjKTtLYyhjLGMpO0tjKGMsYyk7S2MoYyxjKTtLYyhjLGMpO0tjKGMsYyk7S2MoYyxjKTtLYyhjLGMpO0tjKGMsYyk7S2MoYyxjKTtLYyhjLGMpO0tjKGMsYyk7S2MoYyxjKTtLYyhjLGMpO0tjKGMsYyk7S2MoYyxjKTtLYyhjLGMpO0tjKGMsYyk7S2MoYyxjKTtKYyhmLGMsZik7S2MoZixmKTtLYyhmLGYpO0tjKGYsZik7S2MoZixmKTtLYyhmLGYpO0tjKGYsZik7S2MoZixmKTtLYyhmLGYpO0tjKGYsZik7S2MoZixmKTtKYyhlLGYsZSk7S2MoZixlKTtiPTE7ZG97S2MoZixmKTtiPWIrMXwwfXdoaWxlKChifDApIT01MCk7SmMoZixmLGUpO0tjKGMsZik7Yj0xO2Rve0tjKGMsYyk7Yj1iKzF8MH13aGlsZSgoYnwwKSE9MTAwKTtKYyhmLGMsZik7S2MoZixmKTtiPTE7ZG97S2MoZixmKTtiPWIrMXwwfXdoaWxlKChifDApIT01MCk7SmMoZSxmLGUpO0tjKGUsZSk7S2MoZSxlKTtLYyhlLGUpO0tjKGUsZSk7S2MoZSxlKTtKYyhhLGUsZCk7aT1nO3JldHVybn1mdW5jdGlvbiBKYyhhLGIsZCl7YT1hfDA7Yj1ifDA7ZD1kfDA7dmFyIGU9MCxmPTAsZz0wLGg9MCxpPTAsaj0wLGs9MCxsPTAsbT0wLG49MCxvPTAscD0wLHE9MCxyPTAscz0wLHQ9MCx1PTAsdj0wLHc9MCx4PTAseT0wLHo9MCxBPTAsQj0wLEQ9MCxFPTAsRj0wLEc9MCxIPTAsST0wLEo9MCxLPTAsTD0wLE09MCxOPTAsTz0wLFA9MCxRPTAsUj0wLFM9MCxUPTAsVT0wLFY9MCxXPTAsWD0wLFk9MCxaPTAsXz0wLCQ9MCxhYT0wLGJhPTAsY2E9MCxkYT0wLGVhPTAsZmE9MCxnYT0wLGhhPTAsaWE9MCxqYT0wLGthPTAsbGE9MCxtYT0wLG5hPTAsb2E9MCxwYT0wLHFhPTAscmE9MCxzYT0wLHRhPTAsdWE9MCx2YT0wLHdhPTAseGE9MCx5YT0wLHphPTAsQWE9MCxCYT0wLENhPTAsRGE9MCxFYT0wLEZhPTAsR2E9MCxIYT0wLElhPTAsSmE9MCxLYT0wLExhPTAsTWE9MCxOYT0wLE9hPTAsUGE9MCxRYT0wLFJhPTAsU2E9MCxUYT0wLFVhPTAsVmE9MCxXYT0wLFhhPTAsWWE9MCxaYT0wLF9hPTAsJGE9MCxhYj0wLGJiPTAsY2I9MCxkYj0wLGViPTAsZmI9MCxnYj0wLGhiPTAsaWI9MCxqYj0wLGtiPTAsbGI9MCxtYj0wLG5iPTAsb2I9MCxwYj0wLHFiPTAscmI9MCxzYj0wLHRiPTAsdWI9MCx2Yj0wLHdiPTAseGI9MCx5Yj0wLHpiPTAsQWI9MCxCYj0wLENiPTAsRGI9MCxFYj0wLEZiPTAsR2I9MCxIYj0wLEliPTAsSmI9MCxLYj0wLExiPTAsTWI9MCxOYj0wLE9iPTAsUGI9MCxRYj0wLFJiPTAsU2I9MCxUYj0wLFViPTAsVmI9MCxXYj0wLFhiPTAsWWI9MCxaYj0wLF9iPTAsJGI9MCxhYz0wLGJjPTAsY2M9MCxkYz0wLGVjPTAsZmM9MCxnYz0wLGhjPTAsaWM9MCxqYz0wLGtjPTAsbGM9MCxtYz0wLG5jPTAsb2M9MCxwYz0wLHFjPTAscmM9MCxzYz0wLHRjPTAsdWM9MCx2Yz0wLHdjPTAseGM9MCx5Yz0wLHpjPTAsQWM9MCxCYz0wLENjPTAsRGM9MCxFYz0wLEZjPTAsR2M9MCxIYz0wLEljPTAsSmM9MCxLYz0wLExjPTAsTWM9MCxOYz0wLE9jPTAsUGM9MCxRYz0wLFJjPTAsU2M9MDtsPWNbYj4+Ml18MDtzPWNbYis0Pj4yXXwwO2o9Y1tiKzg+PjJdfDA7UmI9Y1tiKzEyPj4yXXwwO2U9Y1tiKzE2Pj4yXXwwO3phPWNbYisyMD4+Ml18MDt5YT1jW2IrMjQ+PjJdfDA7emI9Y1tiKzI4Pj4yXXwwO2g9Y1tiKzMyPj4yXXwwO2dhPWNbYiszNj4+Ml18MDtIPWNbZD4+Ml18MDtKPWNbZCs0Pj4yXXwwO0Y9Y1tkKzg+PjJdfDA7RD1jW2QrMTI+PjJdfDA7QT1jW2QrMTY+PjJdfDA7eT1jW2QrMjA+PjJdfDA7dz1jW2QrMjQ+PjJdfDA7dT1jW2QrMjg+PjJdfDA7az1jW2QrMzI+PjJdfDA7dD1jW2QrMzY+PjJdfDA7T2M9SioxOXwwO2JjPUYqMTl8MDtyYj1EKjE5fDA7SGE9QSoxOXwwO2pjPXkqMTl8MDtEYj13KjE5fDA7VGE9dSoxOXwwO1NjPWsqMTl8MDtRYz10KjE5fDA7cD1zPDwxO2Y9UmI8PDE7TT16YTw8MTtpPXpiPDwxO2Q9Z2E8PDE7bz0oKGx8MCk8MCk8PDMxPj4zMTtJPSgoSHwwKTwwKTw8MzE+PjMxO01jPU9kKEh8MCxJfDAsbHwwLG98MCl8MDtMYz1DO0s9KChKfDApPDApPDwzMT4+MzE7d2M9T2QoSnwwLEt8MCxsfDAsb3wwKXwwO3ZjPUM7Rz0oKEZ8MCk8MCk8PDMxPj4zMTt1Yj1PZChGfDAsR3wwLGx8MCxvfDApfDA7dGI9QztFPSgoRHwwKTwwKTw8MzE+PjMxO0thPU9kKER8MCxFfDAsbHwwLG98MCl8MDtKYT1DO0I9KChBfDApPDApPDwzMT4+MzE7bWM9T2QoQXwwLEJ8MCxsfDAsb3wwKXwwO2xjPUM7ej0oKHl8MCk8MCk8PDMxPj4zMTtHYj1PZCh5fDAsenwwLGx8MCxvfDApfDA7RmI9Qzt4PSgod3wwKTwwKTw8MzE+PjMxO1dhPU9kKHd8MCx4fDAsbHwwLG98MCl8MDtWYT1DO3Y9KCh1fDApPDApPDwzMT4+MzE7amE9T2QodXwwLHZ8MCxsfDAsb3wwKXwwO2lhPUM7UGM9KChrfDApPDApPDwzMT4+MzE7UD1PZChrfDAsUGN8MCxsfDAsb3wwKXwwO089QztvPU9kKHR8MCwoKHR8MCk8MCk8PDMxPj4zMXwwLGx8MCxvfDApfDA7bD1DO3Q9KChzfDApPDApPDwzMT4+MzE7ZGM9T2QoSHwwLEl8MCxzfDAsdHwwKXwwO2VjPUM7bj0oKHB8MCk8MCk8PDMxPj4zMTt5Yj1PZChKfDAsS3wwLHB8MCxufDApfDA7eGI9QztNYT1PZChGfDAsR3wwLHN8MCx0fDApfDA7TGE9QztvYz1PZChEfDAsRXwwLHB8MCxufDApfDA7bmM9QztJYj1PZChBfDAsQnwwLHN8MCx0fDApfDA7SGI9QztZYT1PZCh5fDAsenwwLHB8MCxufDApfDA7WGE9QztsYT1PZCh3fDAseHwwLHN8MCx0fDApfDA7a2E9QztSPU9kKHV8MCx2fDAscHwwLG58MCl8MDtRPUM7dD1PZChrfDAsUGN8MCxzfDAsdHwwKXwwO3M9QztQYz0oKFFjfDApPDApPDwzMT4+MzE7bj1PZChRY3wwLFBjfDAscHwwLG58MCl8MDtwPUM7az0oKGp8MCk8MCk8PDMxPj4zMTt3Yj1PZChIfDAsSXwwLGp8MCxrfDApfDA7dmI9QztRYT1PZChKfDAsS3wwLGp8MCxrfDApfDA7UGE9QztxYz1PZChGfDAsR3wwLGp8MCxrfDApfDA7cGM9QztLYj1PZChEfDAsRXwwLGp8MCxrfDApfDA7SmI9QztfYT1PZChBfDAsQnwwLGp8MCxrfDApfDA7WmE9QztuYT1PZCh5fDAsenwwLGp8MCxrfDApfDA7bWE9QztUPU9kKHd8MCx4fDAsanwwLGt8MCl8MDtTPUM7dj1PZCh1fDAsdnwwLGp8MCxrfDApfDA7dT1DO1JjPSgoU2N8MCk8MCk8PDMxPj4zMTt5Yz1PZChTY3wwLFJjfDAsanwwLGt8MCl8MDt4Yz1DO2s9T2QoUWN8MCxQY3wwLGp8MCxrfDApfDA7aj1DO1NiPSgoUmJ8MCk8MCk8PDMxPj4zMTtPYT1PZChIfDAsSXwwLFJifDAsU2J8MCl8MDtOYT1DO2ZhPSgoZnwwKTwwKTw8MzE+PjMxO3VjPU9kKEp8MCxLfDAsZnwwLGZhfDApfDA7dGM9QztNYj1PZChGfDAsR3wwLFJifDAsU2J8MCl8MDtMYj1DO2FiPU9kKER8MCxFfDAsZnwwLGZhfDApfDA7JGE9QztwYT1PZChBfDAsQnwwLFJifDAsU2J8MCl8MDtvYT1DO1Y9T2QoeXwwLHp8MCxmfDAsZmF8MCl8MDtVPUM7eD1PZCh3fDAseHwwLFJifDAsU2J8MCl8MDt3PUM7VWE9KChUYXwwKTwwKTw8MzE+PjMxO0FjPU9kKFRhfDAsVWF8MCxmfDAsZmF8MCl8MDt6Yz1DO1NiPU9kKFNjfDAsUmN8MCxSYnwwLFNifDApfDA7UmI9QztmYT1PZChRY3wwLFBjfDAsZnwwLGZhfDApfDA7Zj1DO049KChlfDApPDApPDwzMT4+MzE7c2M9T2QoSHwwLEl8MCxlfDAsTnwwKXwwO3JjPUM7UWI9T2QoSnwwLEt8MCxlfDAsTnwwKXwwO1BiPUM7Y2I9T2QoRnwwLEd8MCxlfDAsTnwwKXwwO2JiPUM7cmE9T2QoRHwwLEV8MCxlfDAsTnwwKXwwO3FhPUM7WD1PZChBfDAsQnwwLGV8MCxOfDApfDA7Vz1DO3o9T2QoeXwwLHp8MCxlfDAsTnwwKXwwO3k9QztFYj0oKERifDApPDApPDwzMT4+MzE7Q2M9T2QoRGJ8MCxFYnwwLGV8MCxOfDApfDA7QmM9QztVYj1PZChUYXwwLFVhfDAsZXwwLE58MCl8MDtUYj1DO2liPU9kKFNjfDAsUmN8MCxlfDAsTnwwKXwwO2hiPUM7Tj1PZChRY3wwLFBjfDAsZXwwLE58MCl8MDtlPUM7QWE9KCh6YXwwKTwwKTw8MzE+PjMxO09iPU9kKEh8MCxJfDAsemF8MCxBYXwwKXwwO05iPUM7Yj0oKE18MCk8MCk8PDMxPj4zMTtnYj1PZChKfDAsS3wwLE18MCxifDApfDA7ZmI9Qzt0YT1PZChGfDAsR3wwLHphfDAsQWF8MCl8MDtzYT1DO1o9T2QoRHwwLEV8MCxNfDAsYnwwKXwwO1k9QztCPU9kKEF8MCxCfDAsemF8MCxBYXwwKXwwO0E9QztrYz0oKGpjfDApPDApPDwzMT4+MzE7RWM9T2QoamN8MCxrY3wwLE18MCxifDApfDA7RGM9QztXYj1PZChEYnwwLEVifDAsemF8MCxBYXwwKXwwO1ZiPUM7a2I9T2QoVGF8MCxVYXwwLE18MCxifDApfDA7amI9QztBYT1PZChTY3wwLFJjfDAsemF8MCxBYXwwKXwwO3phPUM7Yj1PZChRY3wwLFBjfDAsTXwwLGJ8MCl8MDtNPUM7Zz0oKHlhfDApPDApPDwzMT4+MzE7ZWI9T2QoSHwwLEl8MCx5YXwwLGd8MCl8MDtkYj1DO3hhPU9kKEp8MCxLfDAseWF8MCxnfDApfDA7d2E9QzskPU9kKEZ8MCxHfDAseWF8MCxnfDApfDA7Xz1DO0U9T2QoRHwwLEV8MCx5YXwwLGd8MCl8MDtEPUM7SWE9KChIYXwwKTwwKTw8MzE+PjMxO0djPU9kKEhhfDAsSWF8MCx5YXwwLGd8MCl8MDtGYz1DO1liPU9kKGpjfDAsa2N8MCx5YXwwLGd8MCl8MDtYYj1DO21iPU9kKERifDAsRWJ8MCx5YXwwLGd8MCl8MDtsYj1DO0NhPU9kKFRhfDAsVWF8MCx5YXwwLGd8MCl8MDtCYT1DO209T2QoU2N8MCxSY3wwLHlhfDAsZ3wwKXwwO3I9QztnPU9kKFFjfDAsUGN8MCx5YXwwLGd8MCl8MDt5YT1DO0FiPSgoemJ8MCk8MCk8PDMxPj4zMTt2YT1PZChIfDAsSXwwLHpifDAsQWJ8MCl8MDt1YT1DO2VhPSgoaXwwKTwwKTw8MzE+PjMxO2RhPU9kKEp8MCxLfDAsaXwwLGVhfDApfDA7Y2E9QztHPU9kKEZ8MCxHfDAsemJ8MCxBYnwwKXwwO0Y9QztzYj0oKHJifDApPDApPDwzMT4+MzE7SWM9T2QocmJ8MCxzYnwwLGl8MCxlYXwwKXwwO0hjPUM7X2I9T2QoSGF8MCxJYXwwLHpifDAsQWJ8MCl8MDtaYj1DO29iPU9kKGpjfDAsa2N8MCxpfDAsZWF8MCl8MDtuYj1DO0VhPU9kKERifDAsRWJ8MCx6YnwwLEFifDApfDA7RGE9QztnYz1PZChUYXwwLFVhfDAsaXwwLGVhfDApfDA7ZmM9QztBYj1PZChTY3wwLFJjfDAsemJ8MCxBYnwwKXwwO3piPUM7ZWE9T2QoUWN8MCxQY3wwLGl8MCxlYXwwKXwwO2k9QztMPSgoaHwwKTwwKTw8MzE+PjMxO2JhPU9kKEh8MCxJfDAsaHwwLEx8MCl8MDthYT1DO0s9T2QoSnwwLEt8MCxofDAsTHwwKXwwO0o9QztjYz0oKGJjfDApPDApPDwzMT4+MzE7S2M9T2QoYmN8MCxjY3wwLGh8MCxMfDApfDA7SmM9QzthYz1PZChyYnwwLHNifDAsaHwwLEx8MCl8MDskYj1DO3FiPU9kKEhhfDAsSWF8MCxofDAsTHwwKXwwO3BiPUM7R2E9T2QoamN8MCxrY3wwLGh8MCxMfDApfDA7RmE9QztpYz1PZChEYnwwLEVifDAsaHwwLEx8MCl8MDtoYz1DO0NiPU9kKFRhfDAsVWF8MCxofDAsTHwwKXwwO0JiPUM7U2E9T2QoU2N8MCxSY3wwLGh8MCxMfDApfDA7UmE9QztMPU9kKFFjfDAsUGN8MCxofDAsTHwwKXwwO2g9QztoYT0oKGdhfDApPDApPDwzMT4+MzE7ST1PZChIfDAsSXwwLGdhfDAsaGF8MCl8MDtIPUM7cT0oKGR8MCk8MCk8PDMxPj4zMTtPYz1PZChPY3wwLCgoT2N8MCk8MCk8PDMxPj4zMXwwLGR8MCxxfDApfDA7TmM9QztjYz1PZChiY3wwLGNjfDAsZ2F8MCxoYXwwKXwwO2JjPUM7c2I9T2QocmJ8MCxzYnwwLGR8MCxxfDApfDA7cmI9QztJYT1PZChIYXwwLElhfDAsZ2F8MCxoYXwwKXwwO0hhPUM7a2M9T2QoamN8MCxrY3wwLGR8MCxxfDApfDA7amM9QztFYj1PZChEYnwwLEVifDAsZ2F8MCxoYXwwKXwwO0RiPUM7VWE9T2QoVGF8MCxVYXwwLGR8MCxxfDApfDA7VGE9QztoYT1PZChTY3wwLFJjfDAsZ2F8MCxoYXwwKXwwO2dhPUM7cT1PZChRY3wwLFBjfDAsZHwwLHF8MCl8MDtkPUM7TGM9RGQoT2N8MCxOY3wwLE1jfDAsTGN8MCl8MDtKYz1EZChMY3wwLEN8MCxLY3wwLEpjfDApfDA7SGM9RGQoSmN8MCxDfDAsSWN8MCxIY3wwKXwwO0ZjPURkKEhjfDAsQ3wwLEdjfDAsRmN8MCl8MDtEYz1EZChGY3wwLEN8MCxFY3wwLERjfDApfDA7QmM9RGQoRGN8MCxDfDAsQ2N8MCxCY3wwKXwwO3pjPURkKEJjfDAsQ3wwLEFjfDAsemN8MCl8MDt4Yz1EZCh6Y3wwLEN8MCx5Y3wwLHhjfDApfDA7cD1EZCh4Y3wwLEN8MCxufDAscHwwKXwwO249QztlYz1EZCh3Y3wwLHZjfDAsZGN8MCxlY3wwKXwwO2RjPUM7cmM9RGQodWN8MCx0Y3wwLHNjfDAscmN8MCl8MDtwYz1EZChyY3wwLEN8MCxxY3wwLHBjfDApfDA7bmM9RGQocGN8MCxDfDAsb2N8MCxuY3wwKXwwO2xjPURkKG5jfDAsQ3wwLG1jfDAsbGN8MCl8MDtqYz1EZChsY3wwLEN8MCxrY3wwLGpjfDApfDA7aGM9RGQoamN8MCxDfDAsaWN8MCxoY3wwKXwwO2ZjPURkKGhjfDAsQ3wwLGdjfDAsZmN8MCl8MDtyPURkKGZjfDAsQ3wwLG18MCxyfDApfDA7TT1EZChyfDAsQ3wwLGJ8MCxNfDApfDA7Yj1DO3I9RGQocHwwLG58MCwzMzU1NDQzMiwwKXwwO3I9RWQocnwwLEN8MCwyNil8MDttPUM7YmM9RGQoZWN8MCxkY3wwLGNjfDAsYmN8MCl8MDskYj1EZChiY3wwLEN8MCxhY3wwLCRifDApfDA7WmI9RGQoJGJ8MCxDfDAsX2J8MCxaYnwwKXwwO1hiPURkKFpifDAsQ3wwLFlifDAsWGJ8MCl8MDtWYj1EZChYYnwwLEN8MCxXYnwwLFZifDApfDA7VGI9RGQoVmJ8MCxDfDAsVWJ8MCxUYnwwKXwwO1JiPURkKFRifDAsQ3wwLFNifDAsUmJ8MCl8MDtqPURkKFJifDAsQ3wwLGt8MCxqfDApfDA7aj1EZChqfDAsQ3wwLHJ8MCxtfDApfDA7az1DO209SGQocnwwLG18MCwyNil8MDttPUNkKHB8MCxufDAsbXwwLEN8MCl8MDtuPUM7cD1EZChNfDAsYnwwLDMzNTU0NDMyLDApfDA7cD1FZChwfDAsQ3wwLDI2KXwwO3I9QztOYj1EZChRYnwwLFBifDAsT2J8MCxOYnwwKXwwO0xiPURkKE5ifDAsQ3wwLE1ifDAsTGJ8MCl8MDtKYj1EZChMYnwwLEN8MCxLYnwwLEpifDApfDA7SGI9RGQoSmJ8MCxDfDAsSWJ8MCxIYnwwKXwwO0ZiPURkKEhifDAsQ3wwLEdifDAsRmJ8MCl8MDtEYj1EZChGYnwwLEN8MCxFYnwwLERifDApfDA7QmI9RGQoRGJ8MCxDfDAsQ2J8MCxCYnwwKXwwO3piPURkKEJifDAsQ3wwLEFifDAsemJ8MCl8MDt5YT1EZCh6YnwwLEN8MCxnfDAseWF8MCl8MDt5YT1EZCh5YXwwLEN8MCxwfDAscnwwKXwwO2c9QztyPUhkKHB8MCxyfDAsMjYpfDA7cj1DZChNfDAsYnwwLHJ8MCxDfDApfDA7Yj1DO009RGQoanwwLGt8MCwxNjc3NzIxNiwwKXwwO009RWQoTXwwLEN8MCwyNSl8MDtwPUM7dmI9RGQoeWJ8MCx4YnwwLHdifDAsdmJ8MCl8MDt0Yj1EZCh2YnwwLEN8MCx1YnwwLHRifDApfDA7cmI9RGQodGJ8MCxDfDAsc2J8MCxyYnwwKXwwO3BiPURkKHJifDAsQ3wwLHFifDAscGJ8MCl8MDtuYj1EZChwYnwwLEN8MCxvYnwwLG5ifDApfDA7bGI9RGQobmJ8MCxDfDAsbWJ8MCxsYnwwKXwwO2piPURkKGxifDAsQ3wwLGtifDAsamJ8MCl8MDtoYj1EZChqYnwwLEN8MCxpYnwwLGhifDApfDA7Zj1EZChoYnwwLEN8MCxmYXwwLGZ8MCl8MDtmPURkKGZ8MCxDfDAsTXwwLHB8MCl8MDtmYT1DO3A9SGQoTXwwLHB8MCwyNSl8MDtwPUNkKGp8MCxrfDAscHwwLEN8MCl8MDtrPUM7aj1EZCh5YXwwLGd8MCwxNjc3NzIxNiwwKXwwO2o9RWQoanwwLEN8MCwyNSl8MDtNPUM7ZGI9RGQoZ2J8MCxmYnwwLGVifDAsZGJ8MCl8MDtiYj1EZChkYnwwLEN8MCxjYnwwLGJifDApfDA7JGE9RGQoYmJ8MCxDfDAsYWJ8MCwkYXwwKXwwO1phPURkKCRhfDAsQ3wwLF9hfDAsWmF8MCl8MDtYYT1EZChaYXwwLEN8MCxZYXwwLFhhfDApfDA7VmE9RGQoWGF8MCxDfDAsV2F8MCxWYXwwKXwwO1RhPURkKFZhfDAsQ3wwLFVhfDAsVGF8MCl8MDtSYT1EZChUYXwwLEN8MCxTYXwwLFJhfDApfDA7aT1EZChSYXwwLEN8MCxlYXwwLGl8MCl8MDtpPURkKGl8MCxDfDAsanwwLE18MCl8MDtlYT1DO009SGQoanwwLE18MCwyNSl8MDtNPUNkKHlhfDAsZ3wwLE18MCxDfDApfDA7Zz1DO3lhPURkKGZ8MCxmYXwwLDMzNTU0NDMyLDApfDA7eWE9RWQoeWF8MCxDfDAsMjYpfDA7aj1DO05hPURkKFFhfDAsUGF8MCxPYXwwLE5hfDApfDA7TGE9RGQoTmF8MCxDfDAsTWF8MCxMYXwwKXwwO0phPURkKExhfDAsQ3wwLEthfDAsSmF8MCl8MDtIYT1EZChKYXwwLEN8MCxJYXwwLEhhfDApfDA7RmE9RGQoSGF8MCxDfDAsR2F8MCxGYXwwKXwwO0RhPURkKEZhfDAsQ3wwLEVhfDAsRGF8MCl8MDtCYT1EZChEYXwwLEN8MCxDYXwwLEJhfDApfDA7emE9RGQoQmF8MCxDfDAsQWF8MCx6YXwwKXwwO2U9RGQoemF8MCxDfDAsTnwwLGV8MCl8MDtlPURkKGV8MCxDfDAseWF8MCxqfDApfDA7Tj1DO2o9SGQoeWF8MCxqfDAsMjYpfDA7aj1DZChmfDAsZmF8MCxqfDAsQ3wwKXwwO2ZhPURkKGl8MCxlYXwwLDMzNTU0NDMyLDApfDA7ZmE9RWQoZmF8MCxDfDAsMjYpfDA7Zj1DO3VhPURkKHhhfDAsd2F8MCx2YXwwLHVhfDApfDA7c2E9RGQodWF8MCxDfDAsdGF8MCxzYXwwKXwwO3FhPURkKHNhfDAsQ3wwLHJhfDAscWF8MCl8MDtvYT1EZChxYXwwLEN8MCxwYXwwLG9hfDApfDA7bWE9RGQob2F8MCxDfDAsbmF8MCxtYXwwKXwwO2thPURkKG1hfDAsQ3wwLGxhfDAsa2F8MCl8MDtpYT1EZChrYXwwLEN8MCxqYXwwLGlhfDApfDA7Z2E9RGQoaWF8MCxDfDAsaGF8MCxnYXwwKXwwO2g9RGQoZ2F8MCxDfDAsTHwwLGh8MCl8MDtoPURkKGh8MCxDfDAsZmF8MCxmfDApfDA7TD1DO2Y9SGQoZmF8MCxmfDAsMjYpfDA7Zj1DZChpfDAsZWF8MCxmfDAsQ3wwKXwwO2VhPURkKGV8MCxOfDAsMTY3NzcyMTYsMCl8MDtlYT1FZChlYXwwLEN8MCwyNSl8MDtpPUM7Yj1EZChlYXwwLGl8MCxyfDAsYnwwKXwwO3I9QztpPUhkKGVhfDAsaXwwLDI1KXwwO2k9Q2QoZXwwLE58MCxpfDAsQ3wwKXwwO049RGQoaHwwLEx8MCwxNjc3NzIxNiwwKXwwO049RWQoTnwwLEN8MCwyNSl8MDtlPUM7YWE9RGQoZGF8MCxjYXwwLGJhfDAsYWF8MCl8MDtfPURkKGFhfDAsQ3wwLCR8MCxffDApfDA7WT1EZChffDAsQ3wwLFp8MCxZfDApfDA7Vz1EZChZfDAsQ3wwLFh8MCxXfDApfDA7VT1EZChXfDAsQ3wwLFZ8MCxVfDApfDA7Uz1EZChVfDAsQ3wwLFR8MCxTfDApfDA7UT1EZChTfDAsQ3wwLFJ8MCxRfDApfDA7Tz1EZChRfDAsQ3wwLFB8MCxPfDApfDA7ZD1EZChPfDAsQ3wwLHF8MCxkfDApfDA7ZD1EZChkfDAsQ3wwLE58MCxlfDApfDA7cT1DO2U9SGQoTnwwLGV8MCwyNSl8MDtlPUNkKGh8MCxMfDAsZXwwLEN8MCl8MDtMPURkKGJ8MCxyfDAsMzM1NTQ0MzIsMCl8MDtMPUVkKEx8MCxDfDAsMjYpfDA7aD1DO2c9RGQoTXwwLGd8MCxMfDAsaHwwKXwwO2g9SGQoTHwwLGh8MCwyNil8MDtoPUNkKGJ8MCxyfDAsaHwwLEN8MCl8MDtyPURkKGR8MCxxfDAsMzM1NTQ0MzIsMCl8MDtyPUVkKHJ8MCxDfDAsMjYpfDA7Yj1DO0g9RGQoS3wwLEp8MCxJfDAsSHwwKXwwO0Y9RGQoSHwwLEN8MCxHfDAsRnwwKXwwO0Q9RGQoRnwwLEN8MCxFfDAsRHwwKXwwO0E9RGQoRHwwLEN8MCxCfDAsQXwwKXwwO3k9RGQoQXwwLEN8MCx6fDAseXwwKXwwO3c9RGQoeXwwLEN8MCx4fDAsd3wwKXwwO3U9RGQod3wwLEN8MCx2fDAsdXwwKXwwO3M9RGQodXwwLEN8MCx0fDAsc3wwKXwwO2w9RGQoc3wwLEN8MCxvfDAsbHwwKXwwO2w9RGQobHwwLEN8MCxyfDAsYnwwKXwwO289QztiPUhkKHJ8MCxifDAsMjYpfDA7Yj1DZChkfDAscXwwLGJ8MCxDfDApfDA7cT1EZChsfDAsb3wwLDE2Nzc3MjE2LDApfDA7cT1FZChxfDAsQ3wwLDI1KXwwO2Q9QztyPU9kKHF8MCxkfDAsMTksMCl8MDtuPURkKHJ8MCxDfDAsbXwwLG58MCl8MDttPUM7ZD1IZChxfDAsZHwwLDI1KXwwO2Q9Q2QobHwwLG98MCxkfDAsQ3wwKXwwO289RGQobnwwLG18MCwzMzU1NDQzMiwwKXwwO289RWQob3wwLEN8MCwyNil8MDtsPUM7az1EZChwfDAsa3wwLG98MCxsfDApfDA7bD1IZChvfDAsbHwwLDI2KXwwO2w9Q2QobnwwLG18MCxsfDAsQ3wwKXwwO2NbYT4+Ml09bDtjW2ErND4+Ml09aztjW2ErOD4+Ml09ajtjW2ErMTI+PjJdPWk7Y1thKzE2Pj4yXT1oO2NbYSsyMD4+Ml09ZztjW2ErMjQ+PjJdPWY7Y1thKzI4Pj4yXT1lO2NbYSszMj4+Ml09YjtjW2ErMzY+PjJdPWQ7cmV0dXJufWZ1bmN0aW9uIEtjKGEsYil7YT1hfDA7Yj1ifDA7dmFyIGQ9MCxlPTAsZj0wLGc9MCxoPTAsaT0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wLHM9MCx0PTAsdT0wLHY9MCx3PTAseD0wLHk9MCx6PTAsQT0wLEI9MCxEPTAsRT0wLEY9MCxHPTAsSD0wLEk9MCxKPTAsSz0wLEw9MCxNPTAsTj0wLE89MCxQPTAsUT0wLFI9MCxTPTAsVD0wLFU9MCxWPTAsVz0wLFg9MCxZPTAsWj0wLF89MCwkPTAsYWE9MCxiYT0wLGNhPTAsZGE9MCxlYT0wLGZhPTAsZ2E9MCxoYT0wLGlhPTAsamE9MCxrYT0wLGxhPTAsbWE9MCxuYT0wLG9hPTAscGE9MCxxYT0wLHJhPTAsc2E9MCx0YT0wLHVhPTAsdmE9MCx3YT0wLHhhPTAseWE9MCx6YT0wLEFhPTAsQmE9MCxDYT0wLERhPTAsRWE9MCxGYT0wLEdhPTAsSGE9MCxJYT0wLEphPTAsS2E9MCxMYT0wLE1hPTAsTmE9MCxPYT0wLFBhPTAsUWE9MCxSYT0wLFNhPTAsVGE9MCxVYT0wLFZhPTAsV2E9MCxYYT0wLFlhPTAsWmE9MCxfYT0wLCRhPTAsYWI9MCxiYj0wLGNiPTAsZGI9MCxlYj0wLGZiPTAsZ2I9MDtiYj1jW2I+PjJdfDA7dWE9Y1tiKzQ+PjJdfDA7aj1jW2IrOD4+Ml18MDtsYT1jW2IrMTI+PjJdfDA7ZT1jW2IrMTY+PjJdfDA7ZGI9Y1tiKzIwPj4yXXwwO1k9Y1tiKzI0Pj4yXXwwO0xhPWNbYisyOD4+Ml18MDtoPWNbYiszMj4+Ml18MDtiPWNbYiszNj4+Ml18MDtsPWJiPDwxO3A9dWE8PDE7WGE9ajw8MTtmPWxhPDwxO25hPWU8PDE7Qj1kYjw8MTttPVk8PDE7aT1MYTw8MTtLYT1kYiozOHwwO3JhPVkqMTl8MDt2YT1MYSozOHwwO2RhPWgqMTl8MDtnYj1iKjM4fDA7Y2I9KChiYnwwKTwwKTw8MzE+PjMxO2NiPU9kKGJifDAsY2J8MCxiYnwwLGNifDApfDA7YmI9QztvPSgobHwwKTwwKTw8MzE+PjMxO3RhPSgodWF8MCk8MCk8PDMxPj4zMTtJYT1PZChsfDAsb3wwLHVhfDAsdGF8MCl8MDtIYT1DO2s9KChqfDApPDApPDwzMT4+MzE7V2E9T2QoanwwLGt8MCxsfDAsb3wwKXwwO1ZhPUM7bWE9KChsYXwwKTwwKTw8MzE+PjMxO1VhPU9kKGxhfDAsbWF8MCxsfDAsb3wwKXwwO1RhPUM7RD0oKGV8MCk8MCk8PDMxPj4zMTtPYT1PZChlfDAsRHwwLGx8MCxvfDApfDA7TmE9QztlYj0oKGRifDApPDApPDwzMT4+MzE7eWE9T2QoZGJ8MCxlYnwwLGx8MCxvfDApfDA7eGE9QztnPSgoWXwwKTwwKTw8MzE+PjMxO2dhPU9kKFl8MCxnfDAsbHwwLG98MCl8MDtmYT1DO01hPSgoTGF8MCk8MCk8PDMxPj4zMTtSPU9kKExhfDAsTWF8MCxsfDAsb3wwKXwwO1E9QztBPSgoaHwwKTwwKTw8MzE+PjMxO0Y9T2QoaHwwLEF8MCxsfDAsb3wwKXwwO0U9QztxPSgoYnwwKTwwKTw8MzE+PjMxO289T2QoYnwwLHF8MCxsfDAsb3wwKXwwO2w9QztuPSgocHwwKTwwKTw8MzE+PjMxO3RhPU9kKHB8MCxufDAsdWF8MCx0YXwwKXwwO3VhPUM7YmE9T2QocHwwLG58MCxqfDAsa3wwKXwwO2NhPUM7UD0oKGZ8MCk8MCk8PDMxPj4zMTtTYT1PZChmfDAsUHwwLHB8MCxufDApfDA7UmE9QztDYT1PZChlfDAsRHwwLHB8MCxufDApfDA7QmE9QztkPSgoQnwwKTwwKTw8MzE+PjMxO2lhPU9kKEJ8MCxkfDAscHwwLG58MCl8MDtoYT1DO1Q9T2QoWXwwLGd8MCxwfDAsbnwwKXwwO1M9QztPPSgoaXwwKTwwKTw8MzE+PjMxO0g9T2QoaXwwLE98MCxwfDAsbnwwKXwwO0c9Qzt0PU9kKGh8MCxBfDAscHwwLG58MCl8MDtzPUM7ZmI9KChnYnwwKTwwKTw8MzE+PjMxO249T2QoZ2J8MCxmYnwwLHB8MCxufDApfDA7cD1DO1FhPU9kKGp8MCxrfDAsanwwLGt8MCl8MDtQYT1DO1lhPSgoWGF8MCk8MCk8PDMxPj4zMTtBYT1PZChYYXwwLFlhfDAsbGF8MCxtYXwwKXwwO3phPUM7a2E9T2QoZXwwLER8MCxYYXwwLFlhfDApfDA7amE9QztYPU9kKGRifDAsZWJ8MCxYYXwwLFlhfDApfDA7Vz1DO049T2QoWXwwLGd8MCxYYXwwLFlhfDApfDA7TT1DO3Y9T2QoTGF8MCxNYXwwLFhhfDAsWWF8MCl8MDt1PUM7ZWE9KChkYXwwKTwwKTw8MzE+PjMxO1lhPU9kKGRhfDAsZWF8MCxYYXwwLFlhfDApfDA7WGE9QztrPU9kKGdifDAsZmJ8MCxqfDAsa3wwKXwwO2o9QzttYT1PZChmfDAsUHwwLGxhfDAsbWF8MCl8MDtsYT1DO1Y9T2QoZnwwLFB8MCxlfDAsRHwwKXwwO1U9QztKPU9kKEJ8MCxkfDAsZnwwLFB8MCl8MDtJPUM7ej1PZChZfDAsZ3wwLGZ8MCxQfDApfDA7eT1DO3dhPSgodmF8MCk8MCk8PDMxPj4zMTtfYT1PZCh2YXwwLHdhfDAsZnwwLFB8MCl8MDtaYT1DO0VhPU9kKGRhfDAsZWF8MCxmfDAsUHwwKXwwO0RhPUM7UD1PZChnYnwwLGZifDAsZnwwLFB8MCl8MDtmPUM7TD1PZChlfDAsRHwwLGV8MCxEfDApfDA7Sz1DO29hPSgobmF8MCk8MCk8PDMxPj4zMTt4PU9kKG5hfDAsb2F8MCxkYnwwLGVifDApfDA7dz1DO3NhPSgocmF8MCk8MCk8PDMxPj4zMTthYj1PZChyYXwwLHNhfDAsbmF8MCxvYXwwKXwwOyRhPUM7R2E9T2QodmF8MCx3YXwwLGV8MCxEfDApfDA7RmE9QztvYT1PZChkYXwwLGVhfDAsbmF8MCxvYXwwKXwwO25hPUM7RD1PZChnYnwwLGZifDAsZXwwLER8MCl8MDtlPUM7ZWI9T2QoS2F8MCwoKEthfDApPDApPDwzMT4+MzF8MCxkYnwwLGVifDApfDA7ZGI9QztLYT1PZChyYXwwLHNhfDAsQnwwLGR8MCl8MDtKYT1DO3FhPU9kKHZhfDAsd2F8MCxCfDAsZHwwKXwwO3BhPUM7Xz1PZChkYXwwLGVhfDAsQnwwLGR8MCl8MDtaPUM7ZD1PZChnYnwwLGZifDAsQnwwLGR8MCl8MDtCPUM7c2E9T2QocmF8MCxzYXwwLFl8MCxnfDApfDA7cmE9QzthYT1PZCh2YXwwLHdhfDAsWXwwLGd8MCl8MDskPUM7bT1PZChkYXwwLGVhfDAsbXwwLCgobXwwKTwwKTw8MzE+PjMxfDApfDA7cj1DO2c9T2QoZ2J8MCxmYnwwLFl8MCxnfDApfDA7WT1DO01hPU9kKHZhfDAsd2F8MCxMYXwwLE1hfDApfDA7TGE9Qzt3YT1PZChkYXwwLGVhfDAsaXwwLE98MCl8MDt2YT1DO089T2QoZ2J8MCxmYnwwLGl8MCxPfDApfDA7aT1DO2VhPU9kKGRhfDAsZWF8MCxofDAsQXwwKXwwO2RhPUM7QT1PZChnYnwwLGZifDAsaHwwLEF8MCl8MDtoPUM7cT1PZChnYnwwLGZifDAsYnwwLHF8MCl8MDtiPUM7YmI9RGQoZWJ8MCxkYnwwLGNifDAsYmJ8MCl8MDskYT1EZChiYnwwLEN8MCxhYnwwLCRhfDApfDA7WmE9RGQoJGF8MCxDfDAsX2F8MCxaYXwwKXwwO1hhPURkKFphfDAsQ3wwLFlhfDAsWGF8MCl8MDtwPURkKFhhfDAsQ3wwLG58MCxwfDApfDA7bj1DO3VhPURkKFdhfDAsVmF8MCx0YXwwLHVhfDApfDA7dGE9QztjYT1EZChVYXwwLFRhfDAsYmF8MCxjYXwwKXwwO2JhPUM7UGE9RGQoU2F8MCxSYXwwLFFhfDAsUGF8MCl8MDtOYT1EZChQYXwwLEN8MCxPYXwwLE5hfDApfDA7TGE9RGQoTmF8MCxDfDAsTWF8MCxMYXwwKXwwO3I9RGQoTGF8MCxDfDAsbXwwLHJ8MCl8MDtCPURkKHJ8MCxDfDAsZHwwLEJ8MCl8MDtkPUM7cj1EZChwfDAsbnwwLDMzNTU0NDMyLDApfDA7cj1FZChyfDAsQ3wwLDI2KXwwO209QztIYT1EZChLYXwwLEphfDAsSWF8MCxIYXwwKXwwO0ZhPURkKEhhfDAsQ3wwLEdhfDAsRmF8MCl8MDtEYT1EZChGYXwwLEN8MCxFYXwwLERhfDApfDA7aj1EZChEYXwwLEN8MCxrfDAsanwwKXwwO2o9RGQoanwwLEN8MCxyfDAsbXwwKXwwO2s9QzttPUhkKHJ8MCxtfDAsMjYpfDA7bT1DZChwfDAsbnwwLG18MCxDfDApfDA7bj1DO3A9RGQoQnwwLGR8MCwzMzU1NDQzMiwwKXwwO3A9RWQocHwwLEN8MCwyNil8MDtyPUM7emE9RGQoQ2F8MCxCYXwwLEFhfDAsemF8MCl8MDt4YT1EZCh6YXwwLEN8MCx5YXwwLHhhfDApfDA7dmE9RGQoeGF8MCxDfDAsd2F8MCx2YXwwKXwwO1k9RGQodmF8MCxDfDAsZ3wwLFl8MCl8MDtZPURkKFl8MCxDfDAscHwwLHJ8MCl8MDtnPUM7cj1IZChwfDAscnwwLDI2KXwwO3I9Q2QoQnwwLGR8MCxyfDAsQ3wwKXwwO2Q9QztCPURkKGp8MCxrfDAsMTY3NzcyMTYsMCl8MDtCPUVkKEJ8MCxDfDAsMjUpfDA7cD1DO3JhPURkKHVhfDAsdGF8MCxzYXwwLHJhfDApfDA7cGE9RGQocmF8MCxDfDAscWF8MCxwYXwwKXwwO25hPURkKHBhfDAsQ3wwLG9hfDAsbmF8MCl8MDtmPURkKG5hfDAsQ3wwLFB8MCxmfDApfDA7Zj1EZChmfDAsQ3wwLEJ8MCxwfDApfDA7UD1DO3A9SGQoQnwwLHB8MCwyNSl8MDtwPUNkKGp8MCxrfDAscHwwLEN8MCl8MDtrPUM7aj1EZChZfDAsZ3wwLDE2Nzc3MjE2LDApfDA7aj1FZChqfDAsQ3wwLDI1KXwwO0I9QztqYT1EZChtYXwwLGxhfDAsa2F8MCxqYXwwKXwwO2hhPURkKGphfDAsQ3wwLGlhfDAsaGF8MCl8MDtmYT1EZChoYXwwLEN8MCxnYXwwLGZhfDApfDA7ZGE9RGQoZmF8MCxDfDAsZWF8MCxkYXwwKXwwO2k9RGQoZGF8MCxDfDAsT3wwLGl8MCl8MDtpPURkKGl8MCxDfDAsanwwLEJ8MCl8MDtPPUM7Qj1IZChqfDAsQnwwLDI1KXwwO0I9Q2QoWXwwLGd8MCxCfDAsQ3wwKXwwO2c9QztZPURkKGZ8MCxQfDAsMzM1NTQ0MzIsMCl8MDtZPUVkKFl8MCxDfDAsMjYpfDA7aj1DOyQ9RGQoY2F8MCxiYXwwLGFhfDAsJHwwKXwwO1o9RGQoJHwwLEN8MCxffDAsWnwwKXwwO2U9RGQoWnwwLEN8MCxEfDAsZXwwKXwwO2U9RGQoZXwwLEN8MCxZfDAsanwwKXwwO0Q9QztqPUhkKFl8MCxqfDAsMjYpfDA7aj1DZChmfDAsUHwwLGp8MCxDfDApfDA7UD1EZChpfDAsT3wwLDMzNTU0NDMyLDApfDA7UD1FZChQfDAsQ3wwLDI2KXwwO2Y9QztVPURkKFh8MCxXfDAsVnwwLFV8MCl8MDtTPURkKFV8MCxDfDAsVHwwLFN8MCl8MDtRPURkKFN8MCxDfDAsUnwwLFF8MCl8MDtoPURkKFF8MCxDfDAsQXwwLGh8MCl8MDtoPURkKGh8MCxDfDAsUHwwLGZ8MCl8MDtBPUM7Zj1IZChQfDAsZnwwLDI2KXwwO2Y9Q2QoaXwwLE98MCxmfDAsQ3wwKXwwO089RGQoZXwwLER8MCwxNjc3NzIxNiwwKXwwO089RWQoT3wwLEN8MCwyNSl8MDtpPUM7ZD1EZChPfDAsaXwwLHJ8MCxkfDApfDA7cj1DO2k9SGQoT3wwLGl8MCwyNSl8MDtpPUNkKGV8MCxEfDAsaXwwLEN8MCl8MDtEPURkKGh8MCxBfDAsMTY3NzcyMTYsMCl8MDtEPUVkKER8MCxDfDAsMjUpfDA7ZT1DO0s9RGQoTnwwLE18MCxMfDAsS3wwKXwwO0k9RGQoS3wwLEN8MCxKfDAsSXwwKXwwO0c9RGQoSXwwLEN8MCxIfDAsR3wwKXwwO0U9RGQoR3wwLEN8MCxGfDAsRXwwKXwwO2I9RGQoRXwwLEN8MCxxfDAsYnwwKXwwO2I9RGQoYnwwLEN8MCxEfDAsZXwwKXwwO3E9QztlPUhkKER8MCxlfDAsMjUpfDA7ZT1DZChofDAsQXwwLGV8MCxDfDApfDA7QT1EZChkfDAscnwwLDMzNTU0NDMyLDApfDA7QT1FZChBfDAsQ3wwLDI2KXwwO2g9QztnPURkKEJ8MCxnfDAsQXwwLGh8MCl8MDtoPUhkKEF8MCxofDAsMjYpfDA7aD1DZChkfDAscnwwLGh8MCxDfDApfDA7cj1EZChifDAscXwwLDMzNTU0NDMyLDApfDA7cj1FZChyfDAsQ3wwLDI2KXwwO2Q9Qzt3PURkKHp8MCx5fDAseHwwLHd8MCl8MDt1PURkKHd8MCxDfDAsdnwwLHV8MCl8MDtzPURkKHV8MCxDfDAsdHwwLHN8MCl8MDtsPURkKHN8MCxDfDAsb3wwLGx8MCl8MDtsPURkKGx8MCxDfDAscnwwLGR8MCl8MDtvPUM7ZD1IZChyfDAsZHwwLDI2KXwwO2Q9Q2QoYnwwLHF8MCxkfDAsQ3wwKXwwO3E9RGQobHwwLG98MCwxNjc3NzIxNiwwKXwwO3E9RWQocXwwLEN8MCwyNSl8MDtiPUM7cj1PZChxfDAsYnwwLDE5LDApfDA7bj1EZChyfDAsQ3wwLG18MCxufDApfDA7bT1DO2I9SGQocXwwLGJ8MCwyNSl8MDtiPUNkKGx8MCxvfDAsYnwwLEN8MCl8MDtvPURkKG58MCxtfDAsMzM1NTQ0MzIsMCl8MDtvPUVkKG98MCxDfDAsMjYpfDA7bD1DO2s9RGQocHwwLGt8MCxvfDAsbHwwKXwwO2w9SGQob3wwLGx8MCwyNil8MDtsPUNkKG58MCxtfDAsbHwwLEN8MCl8MDtjW2E+PjJdPWw7Y1thKzQ+PjJdPWs7Y1thKzg+PjJdPWo7Y1thKzEyPj4yXT1pO2NbYSsxNj4+Ml09aDtjW2ErMjA+PjJdPWc7Y1thKzI0Pj4yXT1mO2NbYSsyOD4+Ml09ZTtjW2ErMzI+PjJdPWQ7Y1thKzM2Pj4yXT1iO3JldHVybn1mdW5jdGlvbiBMYyhiLGQpe2I9YnwwO2Q9ZHwwO3ZhciBlPTAsZj0wLGc9MCxoPTAsaT0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wO209Y1tkPj4yXXwwO2w9Y1tkKzQ+PjJdfDA7az1jW2QrOD4+Ml18MDtqPWNbZCsxMj4+Ml18MDtpPWNbZCsxNj4+Ml18MDtoPWNbZCsyMD4+Ml18MDtnPWNbZCsyND4+Ml18MDtmPWNbZCsyOD4+Ml18MDtvPWNbZCszMj4+Ml18MDtlPWNbZCszNj4+Ml18MDttPSgoKCgoKCgoKCgoKChlKjE5fDApKzE2Nzc3MjE2Pj4yNSkrbT4+MjYpK2w+PjI1KStrPj4yNikraj4+MjUpK2k+PjI2KStoPj4yNSkrZz4+MjYpK2Y+PjI1KStvPj4yNikrZT4+MjUpKjE5fDApK218MDtuPW0+PjI2O2w9bitsfDA7bj1tLShuPDwyNil8MDttPWw+PjI1O2s9bStrfDA7bT1sLShtPDwyNSl8MDtsPWs+PjI2O2o9bCtqfDA7bD1rLShsPDwyNil8MDtrPWo+PjI1O2k9aytpfDA7az1qLShrPDwyNSl8MDtqPWk+PjI2O2g9aitofDA7aj1pLShqPDwyNil8MDtpPWg+PjI1O2c9aStnfDA7aT1oLShpPDwyNSl8MDtoPWc+PjI2O2Y9aCtmfDA7aD1nLShoPDwyNil8MDtnPWY+PjI1O2Q9ZytvfDA7Zz1mLShnPDwyNSl8MDtmPWQ+PjI2O2U9ZitlfDA7Zj1kLShmPDwyNil8MDtkPWUmMzM1NTQ0MzE7YVtiPj4wXT1uO2FbYisxPj4wXT1uPj4+ODthW2IrMj4+MF09bj4+PjE2O2FbYiszPj4wXT1tPDwyfG4+Pj4yNDthW2IrND4+MF09bT4+PjY7YVtiKzU+PjBdPW0+Pj4xNDthW2IrNj4+MF09bDw8M3xtPj4+MjI7YVtiKzc+PjBdPWw+Pj41O2FbYis4Pj4wXT1sPj4+MTM7YVtiKzk+PjBdPWs8PDV8bD4+PjIxO2FbYisxMD4+MF09az4+PjM7YVtiKzExPj4wXT1rPj4+MTE7YVtiKzEyPj4wXT1qPDw2fGs+Pj4xOTthW2IrMTM+PjBdPWo+Pj4yO2FbYisxND4+MF09aj4+PjEwO2FbYisxNT4+MF09aj4+PjE4O2FbYisxNj4+MF09aTthW2IrMTc+PjBdPWk+Pj44O2FbYisxOD4+MF09aT4+PjE2O2FbYisxOT4+MF09aDw8MXxpPj4+MjQ7YVtiKzIwPj4wXT1oPj4+NzthW2IrMjE+PjBdPWg+Pj4xNTthW2IrMjI+PjBdPWc8PDN8aD4+PjIzO2FbYisyMz4+MF09Zz4+PjU7YVtiKzI0Pj4wXT1nPj4+MTM7YVtiKzI1Pj4wXT1mPDw0fGc+Pj4yMTthW2IrMjY+PjBdPWY+Pj40O2FbYisyNz4+MF09Zj4+PjEyO2FbYisyOD4+MF09Zj4+PjIwfGQ8PDY7YVtiKzI5Pj4wXT1lPj4+MjthW2IrMzA+PjBdPWU+Pj4xMDthW2IrMzE+PjBdPWQ+Pj4xODtyZXR1cm59ZnVuY3Rpb24gTWMoYSxiLGQpe2E9YXwwO2I9YnwwO2Q9ZHwwO3ZhciBlPTAsZj0wLGc9MCxoPTAsaT0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wLHM9MCx0PTAsdT0wLHY9MCx3PTAseD0wLHk9MCx6PTAsQT0wLEI9MCxDPTAsRD0wLEU9MCxGPTAsRz0wLEg9MCxJPTAsSj0wLEs9MCxMPTAsTT0wLE49MCxPPTAsUD0wLFE9MCxSPTAsUz0wLFQ9MCxVPTAsVj0wLFc9MCxYPTAsWT0wLFo9MCxfPTAsJD0wLGFhPTAsYmE9MCxjYT0wLGRhPTAsZWE9MCxmYT0wLGdhPTAsaGE9MDtWPWIrNDB8MDtqPWIrNDR8MDttPWIrNDh8MDtwPWIrNTJ8MDtzPWIrNTZ8MDt2PWIrNjB8MDt5PWIrNjR8MDtCPWIrNjh8MDtFPWIrNzJ8MDtDPWIrNzZ8MDtTPWIrNHwwO1A9Yis4fDA7ZT1iKzEyfDA7bD1iKzE2fDA7bj1iKzIwfDA7dT1iKzI0fDA7dz1iKzI4fDA7RD1iKzMyfDA7Tz1iKzM2fDA7Z2E9KGNbUz4+Ml18MCkrKGNbaj4+Ml18MCl8MDtmYT0oY1tQPj4yXXwwKSsoY1ttPj4yXXwwKXwwO2VhPShjW2U+PjJdfDApKyhjW3A+PjJdfDApfDA7ZGE9KGNbbD4+Ml18MCkrKGNbcz4+Ml18MCl8MDtjYT0oY1tuPj4yXXwwKSsoY1t2Pj4yXXwwKXwwO2JhPShjW3U+PjJdfDApKyhjW3k+PjJdfDApfDA7YWE9KGNbdz4+Ml18MCkrKGNbQj4+Ml18MCl8MDskPShjW0Q+PjJdfDApKyhjW0U+PjJdfDApfDA7WT0oY1tPPj4yXXwwKSsoY1tDPj4yXXwwKXwwO2NbYT4+Ml09KGNbYj4+Ml18MCkrKGNbVj4+Ml18MCk7aGE9YSs0fDA7Y1toYT4+Ml09Z2E7Z2E9YSs4fDA7Y1tnYT4+Ml09ZmE7ZmE9YSsxMnwwO2NbZmE+PjJdPWVhO2VhPWErMTZ8MDtjW2VhPj4yXT1kYTtkYT1hKzIwfDA7Y1tkYT4+Ml09Y2E7Y2E9YSsyNHwwO2NbY2E+PjJdPWJhO2JhPWErMjh8MDtjW2JhPj4yXT1hYTthYT1hKzMyfDA7Y1thYT4+Ml09JDskPWErMzZ8MDtjWyQ+PjJdPVk7WT1hKzQwfDA7Uz0oY1tqPj4yXXwwKS0oY1tTPj4yXXwwKXwwO1A9KGNbbT4+Ml18MCktKGNbUD4+Ml18MCl8MDtlPShjW3A+PjJdfDApLShjW2U+PjJdfDApfDA7bD0oY1tzPj4yXXwwKS0oY1tsPj4yXXwwKXwwO249KGNbdj4+Ml18MCktKGNbbj4+Ml18MCl8MDt1PShjW3k+PjJdfDApLShjW3U+PjJdfDApfDA7dz0oY1tCPj4yXXwwKS0oY1t3Pj4yXXwwKXwwO0Q9KGNbRT4+Ml18MCktKGNbRD4+Ml18MCl8MDtPPShjW0M+PjJdfDApLShjW08+PjJdfDApfDA7Y1tZPj4yXT0oY1tWPj4yXXwwKS0oY1tiPj4yXXwwKTtWPWErNDR8MDtjW1Y+PjJdPVM7Uz1hKzQ4fDA7Y1tTPj4yXT1QO1A9YSs1MnwwO2NbUD4+Ml09ZTtlPWErNTZ8MDtjW2U+PjJdPWw7bD1hKzYwfDA7Y1tsPj4yXT1uO249YSs2NHwwO2Nbbj4+Ml09dTt1PWErNjh8MDtjW3U+PjJdPXc7dz1hKzcyfDA7Y1t3Pj4yXT1EO0Q9YSs3NnwwO2NbRD4+Ml09TztPPWErODB8MDtKYyhPLGEsZCk7SmMoWSxZLGQrNDB8MCk7Qz1hKzEyMHwwO0pjKEMsZCsxMjB8MCxiKzEyMHwwKTtKYyhhLGIrODB8MCxkKzgwfDApO0U9Y1thPj4yXTw8MTtCPWNbaGE+PjJdPDwxO3k9Y1tnYT4+Ml08PDE7dj1jW2ZhPj4yXTw8MTtzPWNbZWE+PjJdPDwxO3A9Y1tkYT4+Ml08PDE7bT1jW2NhPj4yXTw8MTtqPWNbYmE+PjJdPDwxO2c9Y1thYT4+Ml08PDE7Yj1jWyQ+PjJdPDwxO1o9Y1tPPj4yXXwwO049YSs4NHwwO1c9Y1tOPj4yXXwwO009YSs4OHwwO1Q9Y1tNPj4yXXwwO0w9YSs5MnwwO1E9Y1tMPj4yXXwwO0s9YSs5NnwwO2Y9Y1tLPj4yXXwwO0o9YSsxMDB8MDtoPWNbSj4+Ml18MDtJPWErMTA0fDA7bz1jW0k+PjJdfDA7SD1hKzEwOHwwO3E9Y1tIPj4yXXwwO0c9YSsxMTJ8MDt4PWNbRz4+Ml18MDtGPWErMTE2fDA7ej1jW0Y+PjJdfDA7Xz1jW1k+PjJdfDA7WD1jW1Y+PjJdfDA7VT1jW1M+PjJdfDA7Uj1jW1A+PjJdfDA7ZD1jW2U+PjJdfDA7aT1jW2w+PjJdfDA7az1jW24+PjJdfDA7cj1jW3U+PjJdfDA7dD1jW3c+PjJdfDA7QT1jW0Q+PjJdfDA7Y1thPj4yXT1aLV87Y1toYT4+Ml09Vy1YO2NbZ2E+PjJdPVQtVTtjW2ZhPj4yXT1RLVI7Y1tlYT4+Ml09Zi1kO2NbZGE+PjJdPWgtaTtjW2NhPj4yXT1vLWs7Y1tiYT4+Ml09cS1yO2NbYWE+PjJdPXgtdDtjWyQ+PjJdPXotQTtjW1k+PjJdPV8rWjtjW1Y+PjJdPVgrVztjW1M+PjJdPVUrVDtjW1A+PjJdPVIrUTtjW2U+PjJdPWQrZjtjW2w+PjJdPWkraDtjW24+PjJdPWsrbztjW3U+PjJdPXIrcTtjW3c+PjJdPXQreDtjW0Q+PjJdPUErejtEPWNbQz4+Ml18MDt6PWErMTI0fDA7QT1jW3o+PjJdfDA7dz1hKzEyOHwwO3g9Y1t3Pj4yXXwwO3Q9YSsxMzJ8MDt1PWNbdD4+Ml18MDtxPWErMTM2fDA7cj1jW3E+PjJdfDA7bj1hKzE0MHwwO289Y1tuPj4yXXwwO2s9YSsxNDR8MDtsPWNbaz4+Ml18MDtoPWErMTQ4fDA7aT1jW2g+PjJdfDA7ZT1hKzE1MnwwO2Y9Y1tlPj4yXXwwO2E9YSsxNTZ8MDtkPWNbYT4+Ml18MDtjW08+PjJdPUQrRTtjW04+PjJdPUErQjtjW00+PjJdPXgreTtjW0w+PjJdPXUrdjtjW0s+PjJdPXIrcztjW0o+PjJdPW8rcDtjW0k+PjJdPWwrbTtjW0g+PjJdPWkrajtjW0c+PjJdPWYrZztjW0Y+PjJdPWQrYjtjW0M+PjJdPUUtRDtjW3o+PjJdPUItQTtjW3c+PjJdPXkteDtjW3Q+PjJdPXYtdTtjW3E+PjJdPXMtcjtjW24+PjJdPXAtbztjW2s+PjJdPW0tbDtjW2g+PjJdPWotaTtjW2U+PjJdPWctZjtjW2E+PjJdPWItZDtyZXR1cm59XG5mdW5jdGlvbiBIYShhKXthPWF8MDt2YXIgYj0wO2I9aTtpPWkrYXwwO2k9aSsxNSYtMTY7cmV0dXJuIGJ8MH1mdW5jdGlvbiBJYSgpe3JldHVybiBpfDB9ZnVuY3Rpb24gSmEoYSl7YT1hfDA7aT1hfWZ1bmN0aW9uIEthKGEsYil7YT1hfDA7Yj1ifDA7aT1hO2o9Yn1mdW5jdGlvbiBMYShhLGIpe2E9YXwwO2I9YnwwO2lmKCFuKXtuPWE7bz1ifX1mdW5jdGlvbiBNYShiKXtiPWJ8MDthW2s+PjBdPWFbYj4+MF07YVtrKzE+PjBdPWFbYisxPj4wXTthW2srMj4+MF09YVtiKzI+PjBdO2FbayszPj4wXT1hW2IrMz4+MF19ZnVuY3Rpb24gTmEoYil7Yj1ifDA7YVtrPj4wXT1hW2I+PjBdO2FbaysxPj4wXT1hW2IrMT4+MF07YVtrKzI+PjBdPWFbYisyPj4wXTthW2srMz4+MF09YVtiKzM+PjBdO2Fbays0Pj4wXT1hW2IrND4+MF07YVtrKzU+PjBdPWFbYis1Pj4wXTthW2srNj4+MF09YVtiKzY+PjBdO2Fbays3Pj4wXT1hW2IrNz4+MF19ZnVuY3Rpb24gT2EoYSl7YT1hfDA7Qz1hfWZ1bmN0aW9uIFBhKCl7cmV0dXJuIEN8MH1mdW5jdGlvbiBRYSgpe3JldHVybiAzMn1mdW5jdGlvbiBSYSgpe3JldHVybiAzMn1mdW5jdGlvbiBTYShhLGIsYyxkLGUpe2E9YXwwO2I9YnwwO2M9Y3wwO2Q9ZHwwO2U9ZXwwO1VhKGEsYixjLGQsZSk7cmV0dXJuIDB9ZnVuY3Rpb24gVGEoYixjLGQsZSxmKXtiPWJ8MDtjPWN8MDtkPWR8MDtlPWV8MDtmPWZ8MDt2YXIgZz0wLGg9MDtoPWk7aT1pKzMyfDA7Zz1oO1VhKGcsYyxkLGUsZik7ZD1ZYyhiLGcpfDA7ZT0oZ3wwKT09KGJ8MCk7Yz0wO2Y9MDtkb3tjPWFbYitmPj4wXV5hW2crZj4+MF18YztmPWYrMXwwfXdoaWxlKChmfDApIT0zMik7aT1oO3JldHVybiAoZT8tMTpkKXwoKChjJjI1NSkrNTExfDApPj4+OCYxKSstMXwwfWZ1bmN0aW9uIFVhKGIsZCxlLGYsZyl7Yj1ifDA7ZD1kfDA7ZT1lfDA7Zj1mfDA7Zz1nfDA7dmFyIGg9MCxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTA7cz1pO2k9aSs2MDh8MDtyPXMrNDgwfDA7bz1zKzQxNnwwO249cztqPW4rNjR8MDtjW2o+PjJdPTA7Y1tqKzQ+PjJdPTA7Y1tqKzg+PjJdPTA7Y1tqKzEyPj4yXT0wO2g9bjtrPTg7bD1oKzY0fDA7ZG97Y1toPj4yXT1jW2s+PjJdO2g9aCs0fDA7az1rKzR8MH13aGlsZSgoaHwwKTwobHwwKSk7aD1yO2w9aCsxMjh8MDtkb3thW2g+PjBdPTU0O2g9aCsxfDB9d2hpbGUoKGh8MCk8KGx8MCkpO2Fbcj4+MF09YVtnPj4wXV41NDtoPTE7ZG97cT1yK2h8MDthW3E+PjBdPWFbcT4+MF1eYVtnK2g+PjBdO2g9aCsxfDB9d2hpbGUoKGh8MCkhPTMyKTtoPW4rNzJ8MDtjW2g+PjJdPTEwMjQ7Y1toKzQ+PjJdPTA7Y1tqPj4yXT0wO2Nbais0Pj4yXT0wO2o9bis4MHwwO2g9ajtrPXI7bD1oKzEyOHwwO2Rve2FbaD4+MF09YVtrPj4wXXwwO2g9aCsxfDA7az1rKzF8MH13aGlsZSgoaHwwKTwobHwwKSk7SGIobixqKTtqPWFbZz4+MF18MDtxPW4rMjA4fDA7bT1uKzI3MnwwO2NbbT4+Ml09MDtjW20rND4+Ml09MDtjW20rOD4+Ml09MDtjW20rMTI+PjJdPTA7aD1xO2s9ODtsPWgrNjR8MDtkb3tjW2g+PjJdPWNbaz4+Ml07aD1oKzR8MDtrPWsrNHwwfXdoaWxlKChofDApPChsfDApKTtoPXI7bD1oKzEyOHwwO2Rve2FbaD4+MF09OTI7aD1oKzF8MH13aGlsZSgoaHwwKTwobHwwKSk7YVtyPj4wXT1qXjkyO2g9MTtkb3twPXIraHwwO2FbcD4+MF09YVtwPj4wXV5hW2craD4+MF07aD1oKzF8MH13aGlsZSgoaHwwKSE9MzIpO2o9bisyODB8MDtwPWo7Y1twPj4yXT0xMDI0O2NbcCs0Pj4yXT0wO3A9bTtjW3A+PjJdPTA7Y1twKzQ+PjJdPTA7cD1uKzI4OHwwO2g9cDtrPXI7bD1oKzEyOHwwO2Rve2FbaD4+MF09YVtrPj4wXXwwO2g9aCsxfDA7az1rKzF8MH13aGlsZSgoaHwwKTwobHwwKSk7SGIocSxwKTtGYihuLGQsZSxmKTtHYihuLG8pO2Y9ajtkPWNbZj4+Ml18MDtmPWNbZis0Pj4yXXwwO2s9R2QoZHwwLGZ8MCwzKXwwO2s9ayYxMjc7aD1EZChkfDAsZnwwLDUxMiwwKXwwO2Nbaj4+Ml09aDtjW2orND4+Ml09QztqPW07aD1jW2o+PjJdfDA7aj1jW2orND4+Ml18MDtpZihmPj4+MD40Mjk0OTY3Mjk1fChmfDApPT0tMSZkPj4+MD40Mjk0OTY2NzgzKXtoPURkKGh8MCxqfDAsMSwwKXwwO2o9QztkPW07Y1tkPj4yXT1oO2NbZCs0Pj4yXT1qfWc9bTtjW2c+PjJdPWg7Y1tnKzQ+PjJdPWo7aj1DZCgxMjgsMCxrfDAsMCl8MDtnPUM7aD1uKzI4OCtrfDA7aWYoZz4+PjA+MHwoZ3wwKT09MCZqPj4+MD42NCl7az1vO2w9aCs2NHwwO2Rve2FbaD4+MF09YVtrPj4wXXwwO2g9aCsxfDA7az1rKzF8MH13aGlsZSgoaHwwKTwobHwwKSk7R2IocSxyKTtoPWI7az1yO2w9aCszMnwwO2Rve2FbaD4+MF09YVtrPj4wXXwwO2g9aCsxfDA7az1rKzF8MH13aGlsZSgoaHwwKTwobHwwKSk7aT1zO3JldHVybn1JZChofDAsb3wwLGp8MCl8MDtIYihxLHApO2g9bytqfDA7aj1DZCg2NCwwLGp8MCxnfDApfDA7Zz1DO2lmKGc+Pj4wPjB8KGd8MCk9PTAmaj4+PjA+MTI3KWRve0hiKHEsaCk7aD1oKzEyOHwwO2o9RGQoanwwLGd8MCwtMTI4LC0xKXwwO2c9Q313aGlsZShnPj4+MD4wfChnfDApPT0wJmo+Pj4wPjEyNyk7SWQocHwwLGh8MCxqfDApfDA7R2IocSxyKTtoPWI7az1yO2w9aCszMnwwO2Rve2FbaD4+MF09YVtrPj4wXXwwO2g9aCsxfDA7az1rKzF8MH13aGlsZSgoaHwwKTwobHwwKSk7aT1zO3JldHVybn1mdW5jdGlvbiBWYSgpe3JldHVybiAzMn1mdW5jdGlvbiBXYSgpe3JldHVybiAzMn1mdW5jdGlvbiBYYSgpe3JldHVybiAzMn1mdW5jdGlvbiBZYSgpe3JldHVybiAzMn1mdW5jdGlvbiBaYSgpe3JldHVybiAyNH1mdW5jdGlvbiBfYSgpe3JldHVybiAxNn1mdW5jdGlvbiAkYShiLGQsZSl7Yj1ifDA7ZD1kfDA7ZT1lfDA7dmFyIGY9MCxnPTAsaD0wLGo9MCxrPTAsbD0wLG09MDtrPWk7aT1pKzI3MnwwO2g9aztnPWsrMjA4fDA7Zj1oKzY0fDA7aj1oO2w9ODttPWorNjR8MDtkb3tjW2o+PjJdPWNbbD4+Ml07aj1qKzR8MDtsPWwrNHwwfXdoaWxlKChqfDApPChtfDApKTtqPWgrNzJ8MDtjW2o+PjJdPTI1NjtjW2orND4+Ml09MDtqPWY7Y1tqPj4yXT0wO2Nbais0Pj4yXT0wO2o9aCs4MHwwO2w9ZTttPWorMzJ8MDtkb3thW2o+PjBdPWFbbD4+MF18MDtqPWorMXwwO2w9bCsxfDB9d2hpbGUoKGp8MCk8KG18MCkpO0diKGgsZyk7aj1kO2w9ZzttPWorMzJ8MDtkb3thW2o+PjBdPWFbbD4+MF18MDtqPWorMXwwO2w9bCsxfDB9d2hpbGUoKGp8MCk8KG18MCkpO21kKGIsZCwzMzc4NSk7aT1rO3JldHVybiAwfWZ1bmN0aW9uIGFiKGIsYyl7Yj1ifDA7Yz1jfDA7dmFyIGQ9MDtkPTA7ZG97YVtjK2Q+PjBdPUJhKDApfDA7ZD1kKzF8MH13aGlsZSgoZHwwKSE9MzIpO21kKGIsYywzMzc4NSk7cmV0dXJuIDB9ZnVuY3Rpb24gYmIoYSxiLGMpe2E9YXwwO2I9YnwwO2M9Y3wwO3ZhciBkPTAsZT0wO2Q9aTtpPWkrMzJ8MDtlPWQ7bWQoZSxjLGIpO25iKGEsMzI1NzYsZSwzMjU5Mik7aT1kO3JldHVybiAwfWZ1bmN0aW9uIGNiKGEsYixjLGQsZSxmLGcpe2E9YXwwO2I9YnwwO2M9Y3wwO2Q9ZHwwO2U9ZXwwO2Y9ZnwwO2c9Z3wwO3JjKGEsYixjLGQsZSxmLGcpfDA7cmV0dXJuIDB9ZnVuY3Rpb24gZGIoYSxiLGMsZCxlLGYsZyxoKXthPWF8MDtiPWJ8MDtjPWN8MDtkPWR8MDtlPWV8MDtmPWZ8MDtnPWd8MDtoPWh8MDt2YXIgaj0wLGs9MCxsPTA7aj1pO2k9aSs2NHwwO2w9aiszMnwwO2s9ajttZChsLGgsZyk7bmIoaywzMjU3NixsLDMyNTkyKTtyYyhhLGIsYyxkLGUsZixrKXwwO2k9ajtyZXR1cm4gMH1mdW5jdGlvbiBlYihhLGIsYyxkLGUsZil7YT1hfDA7Yj1ifDA7Yz1jfDA7ZD1kfDA7ZT1lfDA7Zj1mfDA7aWYoZD4+PjA+MHwoZHwwKT09MCZjPj4+MD40Mjk0OTY3Mjc5KXtlPS0xO3JldHVybiBlfDB9cmMoYSsxNnwwLGEsYixjLGQsZSxmKXwwO2U9MDtyZXR1cm4gZXwwfWZ1bmN0aW9uIGZiKGEsYixjLGQsZSxmLGcpe2E9YXwwO2I9YnwwO2M9Y3wwO2Q9ZHwwO2U9ZXwwO2Y9ZnwwO2c9Z3wwO3ZhciBoPTAsaj0wLGs9MDtrPWk7aT1pKzY0fDA7aj1rKzMyfDA7aD1rO2lmKGQ+Pj4wPjB8KGR8MCk9PTAmYz4+PjA+NDI5NDk2NzI3OSl7Zz0tMTtpPWs7cmV0dXJuIGd8MH1tZChqLGcsZik7bmIoaCwzMjU3NixqLDMyNTkyKTtyYyhhKzE2fDAsYSxiLGMsZCxlLGgpfDA7Zz0wO2k9aztyZXR1cm4gZ3wwfWZ1bmN0aW9uIGdiKGEsYixjLGQsZSxmLGcpe2E9YXwwO2I9YnwwO2M9Y3wwO2Q9ZHwwO2U9ZXwwO2Y9ZnwwO2c9Z3wwO3JldHVybiB0YyhhLGIsYyxkLGUsZixnKXwwfWZ1bmN0aW9uIGhiKGEsYixjLGQsZSxmLGcsaCl7YT1hfDA7Yj1ifDA7Yz1jfDA7ZD1kfDA7ZT1lfDA7Zj1mfDA7Zz1nfDA7aD1ofDA7dmFyIGo9MCxrPTAsbD0wO2o9aTtpPWkrNjR8MDtsPWorMzJ8MDtrPWo7bWQobCxoLGcpO25iKGssMzI1NzYsbCwzMjU5Mik7aD10YyhhLGIsYyxkLGUsZixrKXwwO2k9ajtyZXR1cm4gaHwwfWZ1bmN0aW9uIGliKGEsYixjLGQsZSxmKXthPWF8MDtiPWJ8MDtjPWN8MDtkPWR8MDtlPWV8MDtmPWZ8MDtpZihkPj4+MDwwfChkfDApPT0wJmM+Pj4wPDE2KXtlPS0xO3JldHVybiBlfDB9ZD1EZChjfDAsZHwwLC0xNiwtMSl8MDtlPXRjKGEsYisxNnwwLGIsZCxDLGUsZil8MDtyZXR1cm4gZXwwfWZ1bmN0aW9uIGpiKGEsYixjLGQsZSxmLGcpe2E9YXwwO2I9YnwwO2M9Y3wwO2Q9ZHwwO2U9ZXwwO2Y9ZnwwO2c9Z3wwO3ZhciBoPTAsaj0wLGs9MDtrPWk7aT1pKzY0fDA7aj1rKzMyfDA7aD1rO2lmKGQ+Pj4wPDB8KGR8MCk9PTAmYz4+PjA8MTYpe2c9LTE7aT1rO3JldHVybiBnfDB9Yz1EZChjfDAsZHwwLC0xNiwtMSl8MDtkPUM7bWQoaixnLGYpO25iKGgsMzI1NzYsaiwzMjU5Mik7Zz10YyhhLGIrMTZ8MCxiLGMsZCxlLGgpfDA7aT1rO3JldHVybiBnfDB9ZnVuY3Rpb24ga2IoYixkLGUsZixnKXtiPWJ8MDtkPWR8MDtlPWV8MDtmPWZ8MDtnPWd8MDt2YXIgaD0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wLHM9MCx0PTAsdT0wLHY9MCx3PTAseD0wLHk9MCx6PTAsQT0wO0E9aTt2PWk9aSs2MyYtNjQ7aT1pKzQ4MHwwO3k9djt3PXYrNDQ4fDA7eD12KzQyNHwwO2o9diszOTJ8MDt2PXYrMzYwfDA7aD0wO2Rve2FbditoPj4wXT1CYSgwKXwwO2g9aCsxfDB9d2hpbGUoKGh8MCkhPTMyKTttZChqLHYsMzM3ODUpO2g9YjtvPWo7cD1oKzMyfDA7ZG97YVtoPj4wXT1hW28+PjBdfDA7aD1oKzF8MDtvPW8rMXwwfXdoaWxlKChofDApPChwfDApKTtGZCh5fDAsMCwzNTcpfDA7cT15O2NbcT4+Ml09LTIyMjQ0MzI0ODtjW3ErND4+Ml09MTc3OTAzMzcwMztxPXkrOHwwO2NbcT4+Ml09LTIwNjcwOTM3MDE7Y1txKzQ+PjJdPS0xMTUwODMzMDE5O3E9eSsxNnwwO2NbcT4+Ml09LTIzNzkxNTczO2NbcSs0Pj4yXT0xMDEzOTA0MjQyO3E9eSsyNHwwO2NbcT4+Ml09MTU5NTc1MDEyOTtjW3ErND4+Ml09LTE1MjE0ODY1MzQ7cT15KzMyfDA7Y1txPj4yXT0tMTM3NzQwMjE1OTtjW3ErND4+Ml09MTM1OTg5MzExOTtxPXkrNDB8MDtjW3E+PjJdPTcyNTUxMTE5OTtjW3ErND4+Ml09LTE2OTQxNDQzNzI7cT15KzQ4fDA7Y1txPj4yXT0tNzk1Nzc3NDk7Y1txKzQ+PjJdPTUyODczNDYzNTtxPXkrNTZ8MDtjW3E+PjJdPTMyNzAzMzIwOTtjW3ErND4+Ml09MTU0MTQ1OTIyNTtxPXkrMzUyfDA7cj15Kzk2fDA7cz15KzY0fDA7dD15KzcyfDA7dT15KzIyNHwwO2g9MDttPTA7bj0zMjt3aGlsZSgxKXtsPTI1Ni1ofDA7aD15Kzk2K2h8MDtpZighKG0+Pj4wPjB8KG18MCk9PTAmbj4+PjA+bD4+PjApKXt6PTU7YnJlYWt9SWQoaHwwLGp8MCxsfDApfDA7Y1txPj4yXT0oY1txPj4yXXwwKStsO3A9cztoPWNbcD4+Ml18MDtwPWNbcCs0Pj4yXXwwO2s9RGQoaHwwLHB8MCwxMjgsMCl8MDtvPXM7Y1tvPj4yXT1rO2Nbbys0Pj4yXT1DO289dDtvPURkKChwPj4+MD40Mjk0OTY3Mjk1fChwfDApPT0tMSZoPj4+MD40Mjk0OTY3MTY3KSYxfDAsMCxjW28+PjJdfDAsY1tvKzQ+PjJdfDApfDA7aD10O2NbaD4+Ml09bztjW2grND4+Ml09QztBYih5LHIpO2g9cjtvPXU7cD1oKzEyOHwwO2Rve2NbaD4+Ml09Y1tvPj4yXTtoPWgrNHwwO289bys0fDB9d2hpbGUoKGh8MCk8KHB8MCkpO2g9KGNbcT4+Ml18MCkrLTEyOHwwO2NbcT4+Ml09aDtrPUNkKG58MCxtfDAsbHwwLDApfDA7aWYoKG58MCk9PShsfDApJihtfDApPT0wKXtuPWc7bD0wO209MzI7YnJlYWt9ZWxzZXtqPWorbHwwO209QztuPWt9fWlmKCh6fDApPT01KXtJZChofDAsanwwLG58MCl8MDtoPURkKGNbcT4+Ml18MCwwLG58MCxtfDApfDA7Y1txPj4yXT1oO249ZztsPTA7bT0zMn13aGlsZSgxKXtrPTI1Ni1ofDA7aD15Kzk2K2h8MDtpZighKGw+Pj4wPjB8KGx8MCk9PTAmbT4+PjA+az4+PjApKXt6PTg7YnJlYWt9SWQoaHwwLG58MCxrfDApfDA7Y1txPj4yXT0oY1txPj4yXXwwKStrO3A9cztoPWNbcD4+Ml18MDtwPWNbcCs0Pj4yXXwwO2o9RGQoaHwwLHB8MCwxMjgsMCl8MDtvPXM7Y1tvPj4yXT1qO2Nbbys0Pj4yXT1DO289dDtvPURkKChwPj4+MD40Mjk0OTY3Mjk1fChwfDApPT0tMSZoPj4+MD40Mjk0OTY3MTY3KSYxfDAsMCxjW28+PjJdfDAsY1tvKzQ+PjJdfDApfDA7aD10O2NbaD4+Ml09bztjW2grND4+Ml09QztBYih5LHIpO2g9cjtvPXU7cD1oKzEyOHwwO2Rve2NbaD4+Ml09Y1tvPj4yXTtoPWgrNHwwO289bys0fDB9d2hpbGUoKGh8MCk8KHB8MCkpO2g9KGNbcT4+Ml18MCkrLTEyOHwwO2NbcT4+Ml09aDtqPUNkKG18MCxsfDAsa3wwLDApfDA7aWYoKG18MCk9PShrfDApJihsfDApPT0wKWJyZWFrO2Vsc2V7bj1uK2t8MDtsPUM7bT1qfX1pZigoenwwKT09OCl7SWQoaHwwLG58MCxtfDApfDA7ej1EZChjW3E+PjJdfDAsMCxtfDAsbHwwKXwwO2NbcT4+Ml09en16Yih5LHgsMjQpfDA7aWYoZj4+PjA+MHwoZnwwKT09MCZlPj4+MD40Mjk0OTY3Mjc5KXt6PS0xO2k9QTtyZXR1cm4genwwfW1kKHksdixnKTtuYih3LDMyNTc2LHksMzI1OTIpO3JjKGIrNDh8MCxiKzMyfDAsZCxlLGYseCx3KXwwO3o9MDtpPUE7cmV0dXJuIHp8MH1mdW5jdGlvbiBsYihhLGIsZCxlLGYsZyl7YT1hfDA7Yj1ifDA7ZD1kfDA7ZT1lfDA7Zj1mfDA7Zz1nfDA7dmFyIGg9MCxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTAsdD0wLHU9MCx2PTAsdz0wLHg9MCx5PTAsej0wO3k9aTt2PWk9aSs2MyYtNjQ7aT1pKzQxNnwwO3c9djt1PXYrMzg0fDA7dj12KzM2MHwwO2lmKGU+Pj4wPDB8KGV8MCk9PTAmZD4+PjA8NDgpe3g9LTE7aT15O3JldHVybiB4fDB9RmQod3wwLDAsMzU3KXwwO3A9dztjW3A+PjJdPS0yMjI0NDMyNDg7Y1twKzQ+PjJdPTE3NzkwMzM3MDM7cD13Kzh8MDtjW3A+PjJdPS0yMDY3MDkzNzAxO2NbcCs0Pj4yXT0tMTE1MDgzMzAxOTtwPXcrMTZ8MDtjW3A+PjJdPS0yMzc5MTU3MztjW3ArND4+Ml09MTAxMzkwNDI0MjtwPXcrMjR8MDtjW3A+PjJdPTE1OTU3NTAxMjk7Y1twKzQ+PjJdPS0xNTIxNDg2NTM0O3A9dyszMnwwO2NbcD4+Ml09LTEzNzc0MDIxNTk7Y1twKzQ+PjJdPTEzNTk4OTMxMTk7cD13KzQwfDA7Y1twPj4yXT03MjU1MTExOTk7Y1twKzQ+PjJdPS0xNjk0MTQ0MzcyO3A9dys0OHwwO2NbcD4+Ml09LTc5NTc3NzQ5O2NbcCs0Pj4yXT01Mjg3MzQ2MzU7cD13KzU2fDA7Y1twPj4yXT0zMjcwMzMyMDk7Y1twKzQ+PjJdPTE1NDE0NTkyMjU7cD13KzM1MnwwO3E9dys5NnwwO3I9dys2NHwwO3M9dys3MnwwO3Q9dysyMjR8MDtrPWI7aD0wO209MDtuPTMyO3doaWxlKDEpe2w9MjU2LWh8MDtoPXcrOTYraHwwO2lmKCEobT4+PjA+MHwobXwwKT09MCZuPj4+MD5sPj4+MCkpe3g9NDticmVha31JZChofDAsa3wwLGx8MCl8MDtjW3A+PjJdPShjW3A+PjJdfDApK2w7bz1yO2g9Y1tvPj4yXXwwO289Y1tvKzQ+PjJdfDA7ej1EZChofDAsb3wwLDEyOCwwKXwwO2o9cjtjW2o+PjJdPXo7Y1tqKzQ+PjJdPUM7aj1zO2o9RGQoKG8+Pj4wPjQyOTQ5NjcyOTV8KG98MCk9PS0xJmg+Pj4wPjQyOTQ5NjcxNjcpJjF8MCwwLGNbaj4+Ml18MCxjW2orND4+Ml18MCl8MDtoPXM7Y1toPj4yXT1qO2NbaCs0Pj4yXT1DO0FiKHcscSk7aD1xO2o9dDtvPWgrMTI4fDA7ZG97Y1toPj4yXT1jW2o+PjJdO2g9aCs0fDA7aj1qKzR8MH13aGlsZSgoaHwwKTwob3wwKSk7aD0oY1twPj4yXXwwKSstMTI4fDA7Y1twPj4yXT1oO2o9Q2QobnwwLG18MCxsfDAsMCl8MDtpZigobnwwKT09KGx8MCkmKG18MCk9PTApe2w9MDttPTMyO2JyZWFrfWVsc2V7az1rK2x8MDttPUM7bj1qfX1pZigoeHwwKT09NCl7SWQoaHwwLGt8MCxufDApfDA7aD1EZChjW3A+PjJdfDAsMCxufDAsbXwwKXwwO2NbcD4+Ml09aDtsPTA7bT0zMn13aGlsZSgxKXtrPTI1Ni1ofDA7aD13Kzk2K2h8MDtpZighKGw+Pj4wPjB8KGx8MCk9PTAmbT4+PjA+az4+PjApKXt4PTc7YnJlYWt9SWQoaHwwLGZ8MCxrfDApfDA7Y1twPj4yXT0oY1twPj4yXXwwKStrO289cjtoPWNbbz4+Ml18MDtvPWNbbys0Pj4yXXwwO3o9RGQoaHwwLG98MCwxMjgsMCl8MDtqPXI7Y1tqPj4yXT16O2Nbais0Pj4yXT1DO2o9cztqPURkKChvPj4+MD40Mjk0OTY3Mjk1fChvfDApPT0tMSZoPj4+MD40Mjk0OTY3MTY3KSYxfDAsMCxjW2o+PjJdfDAsY1tqKzQ+PjJdfDApfDA7aD1zO2NbaD4+Ml09ajtjW2grND4+Ml09QztBYih3LHEpO2g9cTtqPXQ7bz1oKzEyOHwwO2Rve2NbaD4+Ml09Y1tqPj4yXTtoPWgrNHwwO2o9ais0fDB9d2hpbGUoKGh8MCk8KG98MCkpO2g9KGNbcD4+Ml18MCkrLTEyOHwwO2NbcD4+Ml09aDtqPUNkKG18MCxsfDAsa3wwLDApfDA7aWYoKG18MCk9PShrfDApJihsfDApPT0wKWJyZWFrO2Vsc2V7Zj1mK2t8MDtsPUM7bT1qfX1pZigoeHwwKT09Nyl7SWQoaHwwLGZ8MCxtfDApfDA7ej1EZChjW3A+PjJdfDAsMCxtfDAsbHwwKXwwO2NbcD4+Ml09en16Yih3LHYsMjQpfDA7aWYoKGQmLTE2fDApPT0zMiYoZXwwKT09MCl7ej0tMTtpPXk7cmV0dXJuIHp8MH14PURkKGR8MCxlfDAsLTQ4LC0xKXwwO3o9QzttZCh3LGcsYik7bmIodSwzMjU3Nix3LDMyNTkyKTt6PXRjKGEsYis0OHwwLGIrMzJ8MCx4LHosdix1KXwwO2k9eTtyZXR1cm4genwwfWZ1bmN0aW9uIG1iKCl7cmV0dXJuIDQ4fWZ1bmN0aW9uIG5iKGIsYyxlLGYpe2I9YnwwO2M9Y3wwO2U9ZXwwO2Y9ZnwwO3ZhciBnPTAsaD0wLGk9MCxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTAsdD0wLHU9MCx2PTAsdz0wLHg9MCx5PTAsej0wLEE9MCxCPTAsQz0wLEQ9MCxFPTAsRj0wLEc9MCxIPTAsST0wLEo9MCxLPTA7az0yMDtsPShkW2YrMT4+MF18MCk8PDh8KGRbZj4+MF18MCl8KGRbZisyPj4wXXwwKTw8MTZ8KGRbZiszPj4wXXwwKTw8MjQ7bT0oZFtlKzE+PjBdfDApPDw4fChkW2U+PjBdfDApfChkW2UrMj4+MF18MCk8PDE2fChkW2UrMz4+MF18MCk8PDI0O249KGRbZis5Pj4wXXwwKTw8OHwoZFtmKzg+PjBdfDApfChkW2YrMTA+PjBdfDApPDwxNnwoZFtmKzExPj4wXXwwKTw8MjQ7bz0oZFtlKzE3Pj4wXXwwKTw8OHwoZFtlKzE2Pj4wXXwwKXwoZFtlKzE4Pj4wXXwwKTw8MTZ8KGRbZSsxOT4+MF18MCk8PDI0O3A9KGRbZSsyMT4+MF18MCk8PDh8KGRbZSsyMD4+MF18MCl8KGRbZSsyMj4+MF18MCk8PDE2fChkW2UrMjM+PjBdfDApPDwyNDtxPShkW2UrMjU+PjBdfDApPDw4fChkW2UrMjQ+PjBdfDApfChkW2UrMjY+PjBdfDApPDwxNnwoZFtlKzI3Pj4wXXwwKTw8MjQ7cj0oZFtlKzI5Pj4wXXwwKTw8OHwoZFtlKzI4Pj4wXXwwKXwoZFtlKzMwPj4wXXwwKTw8MTZ8KGRbZSszMT4+MF18MCk8PDI0O3M9KGRbZisxMz4+MF18MCk8PDh8KGRbZisxMj4+MF18MCl8KGRbZisxND4+MF18MCk8PDE2fChkW2YrMTU+PjBdfDApPDwyNDt0PShkW2UrNT4+MF18MCk8PDh8KGRbZSs0Pj4wXXwwKXwoZFtlKzY+PjBdfDApPDwxNnwoZFtlKzc+PjBdfDApPDwyNDt1PShkW2UrOT4+MF18MCk8PDh8KGRbZSs4Pj4wXXwwKXwoZFtlKzEwPj4wXXwwKTw8MTZ8KGRbZSsxMT4+MF18MCk8PDI0O2o9KGRbZSsxMz4+MF18MCk8PDh8KGRbZSsxMj4+MF18MCl8KGRbZSsxND4+MF18MCk8PDE2fChkW2UrMTU+PjBdfDApPDwyNDtmPShkW2YrNT4+MF18MCk8PDh8KGRbZis0Pj4wXXwwKXwoZFtmKzY+PjBdfDApPDwxNnwoZFtmKzc+PjBdfDApPDwyNDtnPShkW2MrMT4+MF18MCk8PDh8KGRbYz4+MF18MCl8KGRbYysyPj4wXXwwKTw8MTZ8KGRbYyszPj4wXXwwKTw8MjQ7aD0oZFtjKzU+PjBdfDApPDw4fChkW2MrND4+MF18MCl8KGRbYys2Pj4wXXwwKTw8MTZ8KGRbYys3Pj4wXXwwKTw8MjQ7aT0oZFtjKzk+PjBdfDApPDw4fChkW2MrOD4+MF18MCl8KGRbYysxMD4+MF18MCk8PDE2fChkW2MrMTE+PjBdfDApPDwyNDtlPShkW2MrMTM+PjBdfDApPDw4fChkW2MrMTI+PjBdfDApfChkW2MrMTQ+PjBdfDApPDwxNnwoZFtjKzE1Pj4wXXwwKTw8MjQ7d2hpbGUoMSl7RD1wK2x8MDtEPShEPj4+MjV8RDw8NyleajtBPUQrbHwwO0E9KEE+Pj4yM3xBPDw5KV5pO3g9QStEfDA7eD0oeD4+PjE5fHg8PDEzKV5wO0c9eCtBfDA7Rz0oRz4+PjE0fEc8PDE4KV5sO3o9ZittfDA7ej1lXih6Pj4+MjV8ejw8Nyk7dz16K2Z8MDt3PXFeKHc+Pj4yM3x3PDw5KTtKPXcrenwwO0o9KEo+Pj4xOXxKPDwxMylebTtDPUord3wwO0M9KEM+Pj4xNHxDPDwxOCleZjt2PW4rZ3wwO3Y9cl4odj4+PjI1fHY8PDcpO0k9ditufDA7ST0oST4+PjIzfEk8PDkpXnQ7Rj1JK3Z8MDtGPShGPj4+MTl8Rjw8MTMpXmc7eT1GK0l8MDt5PSh5Pj4+MTR8eTw8MTgpXm47SD1zK298MDtIPShIPj4+MjV8SDw8NyledTtFPUgrc3wwO0U9KEU+Pj4yM3xFPDw5KV5oO0I9RStIfDA7Qj0oQj4+PjE5fEI8PDEzKV5vO2M9QitFfDA7Yz0oYz4+PjE0fGM8PDE4KV5zO0s9RytIfDA7bT0oSz4+PjI1fEs8PDcpXko7Sj1tK0d8MDt0PShKPj4+MjN8Sjw8OSleSTtJPXQrbXwwO3U9KEk+Pj4xOXxJPDwxMyleSDtIPXUrdHwwO2w9KEg+Pj4xNHxIPDwxOCleRztHPUMrRHwwO2c9KEc+Pj4yNXxHPDw3KV5GO0Y9ZytDfDA7aD0oRj4+PjIzfEY8PDkpXkU7RT1oK2d8MDtqPShFPj4+MTl8RTw8MTMpXkQ7RD1qK2h8MDtmPShEPj4+MTR8RDw8MTgpXkM7Qz15K3p8MDtvPShDPj4+MjV8Qzw8NyleQjtCPW8reXwwO2k9KEI+Pj4yM3xCPDw5KV5BO0E9aStvfDA7ZT0oQT4+PjE5fEE8PDEzKV56O3o9ZStpfDA7bj0oej4+PjE0fHo8PDE4KV55O3k9Yyt2fDA7cD0oeT4+PjI1fHk8PDcpXng7eD1wK2N8MDtxPSh4Pj4+MjN8eDw8OSledzt3PXErcHwwO3I9KHc+Pj4xOXx3PDwxMyledjt2PXIrcXwwO3M9KHY+Pj4xNHx2PDwxOCleYztpZigoa3wwKTw9MilicmVhaztlbHNlIGs9aystMnwwfWFbYj4+MF09bDthW2IrMT4+MF09bD4+Pjg7YVtiKzI+PjBdPWw+Pj4xNjthW2IrMz4+MF09bD4+PjI0O2FbYis0Pj4wXT1mO2FbYis1Pj4wXT1mPj4+ODthW2IrNj4+MF09Zj4+PjE2O2FbYis3Pj4wXT1mPj4+MjQ7YVtiKzg+PjBdPW47YVtiKzk+PjBdPW4+Pj44O2FbYisxMD4+MF09bj4+PjE2O2FbYisxMT4+MF09bj4+PjI0O2FbYisxMj4+MF09czthW2IrMTM+PjBdPXM+Pj44O2FbYisxND4+MF09cz4+PjE2O2FbYisxNT4+MF09cz4+PjI0O2FbYisxNj4+MF09ZzthW2IrMTc+PjBdPWc+Pj44O2FbYisxOD4+MF09Zz4+PjE2O2FbYisxOT4+MF09Zz4+PjI0O2FbYisyMD4+MF09aDthW2IrMjE+PjBdPWg+Pj44O2FbYisyMj4+MF09aD4+PjE2O2FbYisyMz4+MF09aD4+PjI0O2FbYisyND4+MF09aTthW2IrMjU+PjBdPWk+Pj44O2FbYisyNj4+MF09aT4+PjE2O2FbYisyNz4+MF09aT4+PjI0O2FbYisyOD4+MF09ZTthW2IrMjk+PjBdPWU+Pj44O2FbYiszMD4+MF09ZT4+PjE2O2FbYiszMT4+MF09ZT4+PjI0O3JldHVybn1mdW5jdGlvbiBvYihiLGMsZSxmKXtiPWJ8MDtjPWN8MDtlPWV8MDtmPWZ8MDt2YXIgZz0wLGg9MCxpPTAsaj0wLGs9MCxsPTAsbT0wLG49MCxvPTAscD0wLHE9MCxyPTAscz0wLHQ9MCx1PTAsdj0wLHc9MCx4PTAseT0wLHo9MCxBPTAsQj0wLEM9MCxEPTAsRT0wLEY9MCxHPTAsSD0wLEk9MCxKPTAsSz0wLEw9MCxNPTAsTj0wLE89MCxQPTAsUT0wLFI9MCxTPTAsVD0wLFU9MCxWPTAsVz0wLFg9MCxZPTAsWj0wLF89MDtGPShkW2YrMT4+MF18MCk8PDh8KGRbZj4+MF18MCl8KGRbZisyPj4wXXwwKTw8MTZ8KGRbZiszPj4wXXwwKTw8MjQ7Rz0oZFtlKzE+PjBdfDApPDw4fChkW2U+PjBdfDApfChkW2UrMj4+MF18MCk8PDE2fChkW2UrMz4+MF18MCk8PDI0O0g9KGRbZSs1Pj4wXXwwKTw8OHwoZFtlKzQ+PjBdfDApfChkW2UrNj4+MF18MCk8PDE2fChkW2UrNz4+MF18MCk8PDI0O0k9KGRbZSs5Pj4wXXwwKTw8OHwoZFtlKzg+PjBdfDApfChkW2UrMTA+PjBdfDApPDwxNnwoZFtlKzExPj4wXXwwKTw8MjQ7Sj0oZFtlKzEzPj4wXXwwKTw8OHwoZFtlKzEyPj4wXXwwKXwoZFtlKzE0Pj4wXXwwKTw8MTZ8KGRbZSsxNT4+MF18MCk8PDI0O0I9KGRbZis1Pj4wXXwwKTw8OHwoZFtmKzQ+PjBdfDApfChkW2YrNj4+MF18MCk8PDE2fChkW2YrNz4+MF18MCk8PDI0O0M9KGRbYysxPj4wXXwwKTw8OHwoZFtjPj4wXXwwKXwoZFtjKzI+PjBdfDApPDwxNnwoZFtjKzM+PjBdfDApPDwyNDtEPShkW2MrNT4+MF18MCk8PDh8KGRbYys0Pj4wXXwwKXwoZFtjKzY+PjBdfDApPDwxNnwoZFtjKzc+PjBdfDApPDwyNDtFPShkW2MrOT4+MF18MCk8PDh8KGRbYys4Pj4wXXwwKXwoZFtjKzEwPj4wXXwwKTw8MTZ8KGRbYysxMT4+MF18MCk8PDI0O3c9KGRbYysxMz4+MF18MCk8PDh8KGRbYysxMj4+MF18MCl8KGRbYysxND4+MF18MCk8PDE2fChkW2MrMTU+PjBdfDApPDwyNDt4PShkW2YrOT4+MF18MCk8PDh8KGRbZis4Pj4wXXwwKXwoZFtmKzEwPj4wXXwwKTw8MTZ8KGRbZisxMT4+MF18MCk8PDI0O3k9KGRbZSsxNz4+MF18MCk8PDh8KGRbZSsxNj4+MF18MCl8KGRbZSsxOD4+MF18MCk8PDE2fChkW2UrMTk+PjBdfDApPDwyNDt6PShkW2UrMjE+PjBdfDApPDw4fChkW2UrMjA+PjBdfDApfChkW2UrMjI+PjBdfDApPDwxNnwoZFtlKzIzPj4wXXwwKTw8MjQ7QT0oZFtlKzI1Pj4wXXwwKTw8OHwoZFtlKzI0Pj4wXXwwKXwoZFtlKzI2Pj4wXXwwKTw8MTZ8KGRbZSsyNz4+MF18MCk8PDI0O3Y9KGRbZSsyOT4+MF18MCk8PDh8KGRbZSsyOD4+MF18MCl8KGRbZSszMD4+MF18MCk8PDE2fChkW2UrMzE+PjBdfDApPDwyNDtjPShkW2YrMTM+PjBdfDApPDw4fChkW2YrMTI+PjBdfDApfChkW2YrMTQ+PjBdfDApPDwxNnwoZFtmKzE1Pj4wXXwwKTw8MjQ7ZT0yMDtmPUY7Zz1HO2g9eDtpPXk7aj16O2s9QTtsPXY7bT1jO249SDtvPUk7cD1KO3E9QjtyPUM7cz1EO3Q9RTt1PXc7d2hpbGUoMSl7VD1mK2p8MDtUPShUPj4+MjV8VDw8NylecDtRPVQrZnwwO1E9KFE+Pj4yM3xRPDw5KV50O049UStUfDA7Tj0oTj4+PjE5fE48PDEzKV5qO1c9TitRfDA7Vz0oVz4+PjE0fFc8PDE4KV5mO1A9ZytxfDA7UD0oUD4+PjI1fFA8PDcpXnU7TT1QK3F8MDtNPShNPj4+MjN8TTw8OSleaztaPU0rUHwwO1o9KFo+Pj4xOXxaPDwxMyleZztTPVorTXwwO1M9KFM+Pj4xNHxTPDwxOClecTtMPXIraHwwO0w9KEw+Pj4yNXxMPDw3KV5sO1k9TCtofDA7WT0oWT4+PjIzfFk8PDkpXm47Vj1ZK0x8MDtWPShWPj4+MTl8Vjw8MTMpXnI7Tz1WK1l8MDtPPShPPj4+MTR8Tzw8MTgpXmg7WD1pK218MDtYPW9eKFg+Pj4yNXxYPDw3KTtVPVgrbXwwO1U9KFU+Pj4yM3xVPDw5KV5zO1I9VStYfDA7Uj0oUj4+PjE5fFI8PDEzKV5pO0s9UitVfDA7Sz0oSz4+PjE0fEs8PDE4KV5tO189VytYfDA7Zz0oXz4+PjI1fF88PDcpXlo7Wj1nK1d8MDtuPShaPj4+MjN8Wjw8OSleWTtZPW4rZ3wwO289KFk+Pj4xOXxZPDwxMyleWDtYPW8rbnwwO2Y9KFg+Pj4xNHxYPDwxOCleVztXPVMrVHwwO3I9KFc+Pj4yNXxXPDw3KV5WO1Y9citTfDA7cz0oVj4+PjIzfFY8PDkpXlU7VT1zK3J8MDtwPShVPj4+MTl8VTw8MTMpXlQ7VD1wK3N8MDtxPShUPj4+MTR8VDw8MTgpXlM7Uz1PK1B8MDtpPShTPj4+MjV8Uzw8NyleUjtSPWkrT3wwO3Q9KFI+Pj4yM3xSPDw5KV5RO1E9dCtpfDA7dT0oUT4+PjE5fFE8PDEzKV5QO1A9dSt0fDA7aD0oUD4+PjE0fFA8PDE4KV5PO089SytMfDA7aj0oTz4+PjI1fE88PDcpXk47Tj1qK0t8MDtrPShOPj4+MjN8Tjw8OSleTTtNPWsranwwO2w9KE0+Pj4xOXxNPDwxMyleTDtMPWwra3wwO209KEw+Pj4xNHxMPDwxOCleSztpZigoZXwwKTw9MilicmVhaztlbHNlIGU9ZSstMnwwfUw9ZitGfDA7TT1nK0d8MDtOPW4rSHwwO089bytJfDA7UD1wK0p8MDtRPXErQnwwO1I9citDfDA7Uz1zK0R8MDtUPXQrRXwwO1U9dSt3fDA7Vj1oK3h8MDtXPWkreXwwO1g9ait6fDA7WT1rK0F8MDtaPWwrdnwwO189bStjfDA7YVtiPj4wXT1MO2FbYisxPj4wXT1MPj4+ODthW2IrMj4+MF09TD4+PjE2O2FbYiszPj4wXT1MPj4+MjQ7YVtiKzQ+PjBdPU07YVtiKzU+PjBdPU0+Pj44O2FbYis2Pj4wXT1NPj4+MTY7YVtiKzc+PjBdPU0+Pj4yNDthW2IrOD4+MF09TjthW2IrOT4+MF09Tj4+Pjg7YVtiKzEwPj4wXT1OPj4+MTY7YVtiKzExPj4wXT1OPj4+MjQ7YVtiKzEyPj4wXT1PO2FbYisxMz4+MF09Tz4+Pjg7YVtiKzE0Pj4wXT1PPj4+MTY7YVtiKzE1Pj4wXT1PPj4+MjQ7YVtiKzE2Pj4wXT1QO2FbYisxNz4+MF09UD4+Pjg7YVtiKzE4Pj4wXT1QPj4+MTY7YVtiKzE5Pj4wXT1QPj4+MjQ7YVtiKzIwPj4wXT1RO2FbYisyMT4+MF09UT4+Pjg7YVtiKzIyPj4wXT1RPj4+MTY7YVtiKzIzPj4wXT1RPj4+MjQ7YVtiKzI0Pj4wXT1SO2FbYisyNT4+MF09Uj4+Pjg7YVtiKzI2Pj4wXT1SPj4+MTY7YVtiKzI3Pj4wXT1SPj4+MjQ7YVtiKzI4Pj4wXT1TO2FbYisyOT4+MF09Uz4+Pjg7YVtiKzMwPj4wXT1TPj4+MTY7YVtiKzMxPj4wXT1TPj4+MjQ7YVtiKzMyPj4wXT1UO2FbYiszMz4+MF09VD4+Pjg7YVtiKzM0Pj4wXT1UPj4+MTY7YVtiKzM1Pj4wXT1UPj4+MjQ7YVtiKzM2Pj4wXT1VO2FbYiszNz4+MF09VT4+Pjg7YVtiKzM4Pj4wXT1VPj4+MTY7YVtiKzM5Pj4wXT1VPj4+MjQ7YVtiKzQwPj4wXT1WO2FbYis0MT4+MF09Vj4+Pjg7YVtiKzQyPj4wXT1WPj4+MTY7YVtiKzQzPj4wXT1WPj4+MjQ7YVtiKzQ0Pj4wXT1XO2FbYis0NT4+MF09Vz4+Pjg7YVtiKzQ2Pj4wXT1XPj4+MTY7YVtiKzQ3Pj4wXT1XPj4+MjQ7YVtiKzQ4Pj4wXT1YO2FbYis0OT4+MF09WD4+Pjg7YVtiKzUwPj4wXT1YPj4+MTY7YVtiKzUxPj4wXT1YPj4+MjQ7YVtiKzUyPj4wXT1ZO2FbYis1Mz4+MF09WT4+Pjg7YVtiKzU0Pj4wXT1ZPj4+MTY7YVtiKzU1Pj4wXT1ZPj4+MjQ7YVtiKzU2Pj4wXT1aO2FbYis1Nz4+MF09Wj4+Pjg7YVtiKzU4Pj4wXT1aPj4+MTY7YVtiKzU5Pj4wXT1aPj4+MjQ7YVtiKzYwPj4wXT1fO2FbYis2MT4+MF09Xz4+Pjg7YVtiKzYyPj4wXT1fPj4+MTY7YVtiKzYzPj4wXT1fPj4+MjQ7cmV0dXJufWZ1bmN0aW9uIHBiKCl7cmV0dXJuIDE2fWZ1bmN0aW9uIHFiKCl7cmV0dXJuIDY0fWZ1bmN0aW9uIHJiKCl7cmV0dXJuIDMyfWZ1bmN0aW9uIHNiKCl7cmV0dXJuIDE2fWZ1bmN0aW9uIHRiKCl7cmV0dXJuIDY0fWZ1bmN0aW9uIHViKCl7cmV0dXJuIDMyfWZ1bmN0aW9uIHZiKCl7cmV0dXJuIDM4NH1mdW5jdGlvbiB3YihiLGUsZixnLGgsaixrKXtiPWJ8MDtlPWV8MDtmPWZ8MDtnPWd8MDtoPWh8MDtqPWp8MDtrPWt8MDt2YXIgbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wLHM9MCx0PTAsdT0wLHY9MDt2PWk7dD1pPWkrNjMmLTY0O2k9aSs0OTZ8MDtuPXQrMzYwfDA7aWYoKGUrLTF8MCk+Pj4wPjYzfGs+Pj4wPjY0KXt1PS0xO2k9djtyZXR1cm4gdXwwfWlmKGU+Pj4wPj0yNTYpemEoMzI2MDgsMzI2MjgsMTgsMzI2ODApO2lmKGs+Pj4wPj0yNTYpemEoMzI3MDcsMzI2MjgsMTksMzI2ODApO209ayYyNTU7ZG8gaWYoISgoYnwwKT09MHwoZnwwKT09MCYoKGd8MCkhPTB8KGh8MCkhPTApfCgoZSYyNTUpKy0xJjI1NSk+NjMpPyhsPW08PDI0Pj4yND09MCwhKChtJjI1NSk+NjR8KChqfDApIT0wfGwpXjEpKTowKXtpZihsKXtGZCh0fDAsMCwzNTcpfDA7bT10O2NbbT4+Ml09ZSYyNTVeLTIyMjQ0MzI1NjtjW20rND4+Ml09MTc3OTAzMzcwMzttPXQrOHwwO2NbbT4+Ml09LTIwNjcwOTM3MDE7Y1ttKzQ+PjJdPS0xMTUwODMzMDE5O209dCsxNnwwO2NbbT4+Ml09LTIzNzkxNTczO2NbbSs0Pj4yXT0xMDEzOTA0MjQyO209dCsyNHwwO2NbbT4+Ml09MTU5NTc1MDEyOTtjW20rND4+Ml09LTE1MjE0ODY1MzQ7bT10KzMyfDA7Y1ttPj4yXT0tMTM3NzQwMjE1OTtjW20rND4+Ml09MTM1OTg5MzExOTttPXQrNDB8MDtjW20+PjJdPTcyNTUxMTE5OTtjW20rND4+Ml09LTE2OTQxNDQzNzI7bT10KzQ4fDA7Y1ttPj4yXT0tNzk1Nzc3NDk7Y1ttKzQ+PjJdPTUyODczNDYzNTttPXQrNTZ8MDtjW20+PjJdPTMyNzAzMzIwOTtjW20rND4+Ml09MTU0MTQ1OTIyNTttPTB9ZWxzZXtpZigoanwwKT09MHwobSstMSYyNTUpPjYzKXtsPS0xO2JyZWFrfWw9ayYyNTU7RmQodHwwLDAsMzU3KXwwO3M9SGQobHwwLDAsOCl8MDtvPXQ7Y1tvPj4yXT0oc3xlJjI1NSleLTIyMjQ0MzI1NjtjW28rND4+Ml09Q14xNzc5MDMzNzAzO289dCs4fDA7Y1tvPj4yXT0tMjA2NzA5MzcwMTtjW28rND4+Ml09LTExNTA4MzMwMTk7bz10KzE2fDA7Y1tvPj4yXT0tMjM3OTE1NzM7Y1tvKzQ+PjJdPTEwMTM5MDQyNDI7bz10KzI0fDA7Y1tvPj4yXT0xNTk1NzUwMTI5O2Nbbys0Pj4yXT0tMTUyMTQ4NjUzNDtvPXQrMzJ8MDtjW28+PjJdPS0xMzc3NDAyMTU5O2Nbbys0Pj4yXT0xMzU5ODkzMTE5O289dCs0MHwwO2Nbbz4+Ml09NzI1NTExMTk5O2Nbbys0Pj4yXT0tMTY5NDE0NDM3MjtvPXQrNDh8MDtjW28+PjJdPS03OTU3Nzc0OTtjW28rND4+Ml09NTI4NzM0NjM1O289dCs1NnwwO2Nbbz4+Ml09MzI3MDMzMjA5O2Nbbys0Pj4yXT0xNTQxNDU5MjI1O0ZkKG4rbHwwLDAsKG08PDI0Pj4yNDwwPzA6MTI4LWx8MCl8MCl8MDtJZChufDAsanwwLGx8MCl8MDtsPXQrMzUyfDA7bz10Kzk2fDA7bT1vKzEyOHwwO2Rve2Fbbz4+MF09YVtuPj4wXXwwO289bysxfDA7bj1uKzF8MH13aGlsZSgob3wwKTwobXwwKSk7Y1tsPj4yXT0xMjg7bT0xMjh9az10KzM1MnwwO2lmKCEoKGd8MCk9PTAmKGh8MCk9PTApKXtxPXQrOTZ8MDtqPXQrNjR8MDtyPXQrNzJ8MDtzPXQrMjI0fDA7cD1mO3doaWxlKDEpe2Y9MjU2LW18MDtsPXQrOTYrbXwwO2lmKCEoaD4+PjA+MHwoaHwwKT09MCZnPj4+MD5mPj4+MCkpe3U9MTY7YnJlYWt9SWQobHwwLHB8MCxmfDApfDA7Y1trPj4yXT0oY1trPj4yXXwwKStmO209ajtvPWNbbT4+Ml18MDttPWNbbSs0Pj4yXXwwO2w9RGQob3wwLG18MCwxMjgsMCl8MDtuPWo7Y1tuPj4yXT1sO2Nbbis0Pj4yXT1DO249cjtuPURkKChtPj4+MD40Mjk0OTY3Mjk1fChtfDApPT0tMSZvPj4+MD40Mjk0OTY3MTY3KSYxfDAsMCxjW24+PjJdfDAsY1tuKzQ+PjJdfDApfDA7bz1yO2Nbbz4+Ml09bjtjW28rND4+Ml09QztBYih0LHEpO289cTtuPXM7bT1vKzEyOHwwO2Rve2Nbbz4+Ml09Y1tuPj4yXTtvPW8rNHwwO249bis0fDB9d2hpbGUoKG98MCk8KG18MCkpO209KGNbaz4+Ml18MCkrLTEyOHwwO2Nbaz4+Ml09bTtsPUNkKGd8MCxofDAsZnwwLDApfDA7aWYoKGd8MCk9PShmfDApJihofDApPT0wKWJyZWFrO2Vsc2V7cD1wK2Z8MDtoPUM7Zz1sfX1pZigodXwwKT09MTYpe0lkKGx8MCxwfDAsZ3wwKXwwO209RGQoY1trPj4yXXwwLDAsZ3wwLGh8MCl8MDtjW2s+PjJdPW19bD1lJjI1NTtpZihtPj4+MD4xMjgpe3M9ajtlPWNbcz4+Ml18MDtzPWNbcys0Pj4yXXwwO209RGQoZXwwLHN8MCwxMjgsMCl8MDtuPWo7Y1tuPj4yXT1tO2Nbbis0Pj4yXT1DO249dCs3MnwwO209bjttPURkKChzPj4+MD40Mjk0OTY3Mjk1fChzfDApPT0tMSZlPj4+MD40Mjk0OTY3MTY3KSYxfDAsMCxjW20+PjJdfDAsY1ttKzQ+PjJdfDApfDA7ZT1uO2NbZT4+Ml09bTtjW2UrND4+Ml09QztlPXQrOTZ8MDtBYih0LGUpO209KGNbaz4+Ml18MCkrLTEyOHwwO2Nbaz4+Ml09bTtKZChlfDAsdCsyMjR8MCxtfDApfDA7bT1jW2s+PjJdfDB9ZWxzZSB1PTE5fWVsc2V7aj10KzY0fDA7bD1lJjI1NTt1PTE5fWlmKCh1fDApPT0xOSluPXQrNzJ8MDt1PWo7dT1EZChjW3U+PjJdfDAsY1t1KzQ+PjJdfDAsbXwwLDApfDA7cz1DO3I9ajtjW3I+PjJdPXU7Y1tyKzQ+PjJdPXM7cj1uO2U9cjtyPXIrNHwwO3I9RGQoKHM+Pj4wPDB8KHN8MCk9PTAmdT4+PjA8bT4+PjApJjF8MCwwLGRbZT4+MF18ZFtlKzE+PjBdPDw4fGRbZSsyPj4wXTw8MTZ8ZFtlKzM+PjBdPDwyNHwwLGRbcj4+MF18ZFtyKzE+PjBdPDw4fGRbcisyPj4wXTw8MTZ8ZFtyKzM+PjBdPDwyNHwwKXwwO2U9Qzt1PW47cz11O2Fbcz4+MF09cjthW3MrMT4+MF09cj4+ODthW3MrMj4+MF09cj4+MTY7YVtzKzM+PjBdPXI+PjI0O3U9dSs0fDA7YVt1Pj4wXT1lO2FbdSsxPj4wXT1lPj44O2FbdSsyPj4wXT1lPj4xNjthW3UrMz4+MF09ZT4+MjQ7aWYoYVt0KzM1Nj4+MF18MCl7dT10Kzg4fDA7Y1t1Pj4yXT0tMTtjW3UrND4+Ml09LTF9dT10KzgwfDA7Y1t1Pj4yXT0tMTtjW3UrND4+Ml09LTE7RmQodCs5NittfDAsMCwyNTYtbXwwKXwwO0FiKHQsdCs5NnwwKTtJZChifDAsdHwwLGx8MCl8MDtsPTB9ZWxzZSBsPS0xO3doaWxlKDApO3U9bDtpPXY7cmV0dXJuIHV8MH1mdW5jdGlvbiB4YihiLGMsZCxlKXtiPWJ8MDtjPWN8MDtkPWR8MDtlPWV8MDt2YXIgZj0wLGc9MCxoPTAsaj0wLGs9MCxsPTA7aj1pO2Y9aT1pKzYzJi02NDtpPWkrMTI4fDA7aWYoZD4+PjA+NjR8KGUrLTF8MCk+Pj4wPjYzKXtiPS0xO2k9ajtyZXR1cm4gYnwwfWlmKGU+Pj4wPj0yNTYpemEoMzI2MDgsMzI2MjgsNTMsMzI3MjcpO2lmKGQ+Pj4wPj0yNTYpemEoMzI3MDcsMzI2MjgsNTQsMzI3MjcpO2g9ZSYyNTU7aWYoKGN8MCk9PTB8KGR8MCk9PTApe2lmKChoKy0xJjI1NSk+NjMpe2I9LTE7aT1qO3JldHVybiBifDB9RmQoYnwwLDAsMzU3KXwwO2M9ZSYyNTVeLTIyMjQ0MzI1NjtlPWI7ZD1lO2FbZD4+MF09YzthW2QrMT4+MF09Yz4+ODthW2QrMj4+MF09Yz4+MTY7YVtkKzM+PjBdPWM+PjI0O2U9ZSs0fDA7YVtlPj4wXT0xMDM7YVtlKzE+PjBdPTIzMDthW2UrMj4+MF09OTthW2UrMz4+MF09MTA2O2U9Yis4fDA7ZD1lO2FbZD4+MF09LTIwNjcwOTM3MDE7YVtkKzE+PjBdPS0yMDY3MDkzNzAxPj44O2FbZCsyPj4wXT0tMjA2NzA5MzcwMT4+MTY7YVtkKzM+PjBdPS0yMDY3MDkzNzAxPj4yNDtlPWUrNHwwO2FbZT4+MF09LTExNTA4MzMwMTk7YVtlKzE+PjBdPS0xMTUwODMzMDE5Pj44O2FbZSsyPj4wXT0tMTE1MDgzMzAxOT4+MTY7YVtlKzM+PjBdPS0xMTUwODMzMDE5Pj4yNDtlPWIrMTZ8MDtkPWU7YVtkPj4wXT0tMjM3OTE1NzM7YVtkKzE+PjBdPS0yMzc5MTU3Mz4+ODthW2QrMj4+MF09LTIzNzkxNTczPj4xNjthW2QrMz4+MF09LTIzNzkxNTczPj4yNDtlPWUrNHwwO2FbZT4+MF09MTE0O2FbZSsxPj4wXT0yNDM7YVtlKzI+PjBdPTExMDthW2UrMz4+MF09NjA7ZT1iKzI0fDA7ZD1lO2FbZD4+MF09MjQxO2FbZCsxPj4wXT01NDthW2QrMj4+MF09Mjk7YVtkKzM+PjBdPTk1O2U9ZSs0fDA7YVtlPj4wXT0tMTUyMTQ4NjUzNDthW2UrMT4+MF09LTE1MjE0ODY1MzQ+Pjg7YVtlKzI+PjBdPS0xNTIxNDg2NTM0Pj4xNjthW2UrMz4+MF09LTE1MjE0ODY1MzQ+PjI0O2U9YiszMnwwO2Q9ZTthW2Q+PjBdPS0xMzc3NDAyMTU5O2FbZCsxPj4wXT0tMTM3NzQwMjE1OT4+ODthW2QrMj4+MF09LTEzNzc0MDIxNTk+PjE2O2FbZCszPj4wXT0tMTM3NzQwMjE1OT4+MjQ7ZT1lKzR8MDthW2U+PjBdPTEyNzthW2UrMT4+MF09ODI7YVtlKzI+PjBdPTE0O2FbZSszPj4wXT04MTtlPWIrNDB8MDtkPWU7YVtkPj4wXT0zMTthW2QrMT4+MF09MTA4O2FbZCsyPj4wXT02MjthW2QrMz4+MF09NDM7ZT1lKzR8MDthW2U+PjBdPS0xNjk0MTQ0MzcyO2FbZSsxPj4wXT0tMTY5NDE0NDM3Mj4+ODthW2UrMj4+MF09LTE2OTQxNDQzNzI+PjE2O2FbZSszPj4wXT0tMTY5NDE0NDM3Mj4+MjQ7ZT1iKzQ4fDA7ZD1lO2FbZD4+MF09LTc5NTc3NzQ5O2FbZCsxPj4wXT0tNzk1Nzc3NDk+Pjg7YVtkKzI+PjBdPS03OTU3Nzc0OT4+MTY7YVtkKzM+PjBdPS03OTU3Nzc0OT4+MjQ7ZT1lKzR8MDthW2U+PjBdPTE3MTthW2UrMT4+MF09MjE3O2FbZSsyPj4wXT0xMzE7YVtlKzM+PjBdPTMxO2I9Yis1NnwwO2U9YjthW2U+PjBdPTEyMTthW2UrMT4+MF09MzM7YVtlKzI+PjBdPTEyNjthW2UrMz4+MF09MTk7Yj1iKzR8MDthW2I+PjBdPTI1O2FbYisxPj4wXT0yMDU7YVtiKzI+PjBdPTIyNDthW2IrMz4+MF09OTE7Yj0wO2k9ajtyZXR1cm4gYnwwfWVsc2V7Zz1kJjI1NTtpZigoaCstMSYyNTUpPjYzfChnKy0xJjI1NSk+NjMpe2I9LTE7aT1qO3JldHVybiBifDB9aD1kJjI1NTtGZChifDAsMCwzNTcpfDA7bD1IZChofDAsMCw4KXwwO2w9KGx8ZSYyNTUpXi0yMjI0NDMyNTY7ZD1DXjE3NzkwMzM3MDM7ZT1iO2s9ZTthW2s+PjBdPWw7YVtrKzE+PjBdPWw+Pjg7YVtrKzI+PjBdPWw+PjE2O2FbayszPj4wXT1sPj4yNDtlPWUrNHwwO2FbZT4+MF09ZDthW2UrMT4+MF09ZD4+ODthW2UrMj4+MF09ZD4+MTY7YVtlKzM+PjBdPWQ+PjI0O2U9Yis4fDA7ZD1lO2FbZD4+MF09LTIwNjcwOTM3MDE7YVtkKzE+PjBdPS0yMDY3MDkzNzAxPj44O2FbZCsyPj4wXT0tMjA2NzA5MzcwMT4+MTY7YVtkKzM+PjBdPS0yMDY3MDkzNzAxPj4yNDtlPWUrNHwwO2FbZT4+MF09LTExNTA4MzMwMTk7YVtlKzE+PjBdPS0xMTUwODMzMDE5Pj44O2FbZSsyPj4wXT0tMTE1MDgzMzAxOT4+MTY7YVtlKzM+PjBdPS0xMTUwODMzMDE5Pj4yNDtlPWIrMTZ8MDtkPWU7YVtkPj4wXT0tMjM3OTE1NzM7YVtkKzE+PjBdPS0yMzc5MTU3Mz4+ODthW2QrMj4+MF09LTIzNzkxNTczPj4xNjthW2QrMz4+MF09LTIzNzkxNTczPj4yNDtlPWUrNHwwO2FbZT4+MF09MTE0O2FbZSsxPj4wXT0yNDM7YVtlKzI+PjBdPTExMDthW2UrMz4+MF09NjA7ZT1iKzI0fDA7ZD1lO2FbZD4+MF09MjQxO2FbZCsxPj4wXT01NDthW2QrMj4+MF09Mjk7YVtkKzM+PjBdPTk1O2U9ZSs0fDA7YVtlPj4wXT0tMTUyMTQ4NjUzNDthW2UrMT4+MF09LTE1MjE0ODY1MzQ+Pjg7YVtlKzI+PjBdPS0xNTIxNDg2NTM0Pj4xNjthW2UrMz4+MF09LTE1MjE0ODY1MzQ+PjI0O2U9YiszMnwwO2Q9ZTthW2Q+PjBdPS0xMzc3NDAyMTU5O2FbZCsxPj4wXT0tMTM3NzQwMjE1OT4+ODthW2QrMj4+MF09LTEzNzc0MDIxNTk+PjE2O2FbZCszPj4wXT0tMTM3NzQwMjE1OT4+MjQ7ZT1lKzR8MDthW2U+PjBdPTEyNzthW2UrMT4+MF09ODI7YVtlKzI+PjBdPTE0O2FbZSszPj4wXT04MTtlPWIrNDB8MDtkPWU7YVtkPj4wXT0zMTthW2QrMT4+MF09MTA4O2FbZCsyPj4wXT02MjthW2QrMz4+MF09NDM7ZT1lKzR8MDthW2U+PjBdPS0xNjk0MTQ0MzcyO2FbZSsxPj4wXT0tMTY5NDE0NDM3Mj4+ODthW2UrMj4+MF09LTE2OTQxNDQzNzI+PjE2O2FbZSszPj4wXT0tMTY5NDE0NDM3Mj4+MjQ7ZT1iKzQ4fDA7ZD1lO2FbZD4+MF09LTc5NTc3NzQ5O2FbZCsxPj4wXT0tNzk1Nzc3NDk+Pjg7YVtkKzI+PjBdPS03OTU3Nzc0OT4+MTY7YVtkKzM+PjBdPS03OTU3Nzc0OT4+MjQ7ZT1lKzR8MDthW2U+PjBdPTE3MTthW2UrMT4+MF09MjE3O2FbZSsyPj4wXT0xMzE7YVtlKzM+PjBdPTMxO2U9Yis1NnwwO2Q9ZTthW2Q+PjBdPTEyMTthW2QrMT4+MF09MzM7YVtkKzI+PjBdPTEyNjthW2QrMz4+MF09MTk7ZT1lKzR8MDthW2U+PjBdPTI1O2FbZSsxPj4wXT0yMDU7YVtlKzI+PjBdPTIyNDthW2UrMz4+MF09OTE7RmQoZitofDAsMCwoZzw8MjQ+PjI0PDA/MDoxMjgtaHwwKXwwKXwwO0lkKGZ8MCxjfDAsaHwwKXwwO2M9YiszNTJ8MDtoPWIrOTZ8MDtnPWgrMTI4fDA7ZG97YVtoPj4wXT1hW2Y+PjBdfDA7aD1oKzF8MDtmPWYrMXwwfXdoaWxlKChofDApPChnfDApKTthW2M+PjBdPTEyODthW2MrMT4+MF09MDthW2MrMj4+MF09MDthW2MrMz4+MF09MDtsPTA7aT1qO3JldHVybiBsfDB9cmV0dXJuIDB9ZnVuY3Rpb24geWIoYixjLGUsZil7Yj1ifDA7Yz1jfDA7ZT1lfDA7Zj1mfDA7dmFyIGc9MCxoPTAsaT0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wLHM9MDtpZigoZXwwKT09MCYoZnwwKT09MClyZXR1cm4gMDtrPWIrMzUyfDA7bD1iKzk2fDA7bT1iKzY0fDA7bj1iKzcyfDA7bz1iKzIyNHwwO2c9ZFtrPj4wXXxkW2srMT4+MF08PDh8ZFtrKzI+PjBdPDwxNnxkW2srMz4+MF08PDI0O2o9ZTt3aGlsZSgxKXtpPTI1Ni1nfDA7ZT1iKzk2K2d8MDtpZighKGY+Pj4wPjB8KGZ8MCk9PTAmaj4+PjA+aT4+PjApKWJyZWFrO0lkKGV8MCxjfDAsaXwwKXwwO2g9KGRbaz4+MF18ZFtrKzE+PjBdPDw4fGRbaysyPj4wXTw8MTZ8ZFtrKzM+PjBdPDwyNCkraXwwO2Fbaz4+MF09aDthW2srMT4+MF09aD4+ODthW2srMj4+MF09aD4+MTY7YVtrKzM+PjBdPWg+PjI0O2g9bTtlPWg7ZT1kW2U+PjBdfGRbZSsxPj4wXTw8OHxkW2UrMj4+MF08PDE2fGRbZSszPj4wXTw8MjQ7aD1oKzR8MDtoPWRbaD4+MF18ZFtoKzE+PjBdPDw4fGRbaCsyPj4wXTw8MTZ8ZFtoKzM+PjBdPDwyNDtzPURkKGV8MCxofDAsMTI4LDApfDA7Zz1DO3E9bTtyPXE7YVtyPj4wXT1zO2FbcisxPj4wXT1zPj44O2FbcisyPj4wXT1zPj4xNjthW3IrMz4+MF09cz4+MjQ7cT1xKzR8MDthW3E+PjBdPWc7YVtxKzE+PjBdPWc+Pjg7YVtxKzI+PjBdPWc+PjE2O2FbcSszPj4wXT1nPj4yNDtxPW47Zz1xO3E9cSs0fDA7cT1EZCgoaD4+PjA+NDI5NDk2NzI5NXwoaHwwKT09LTEmZT4+PjA+NDI5NDk2NzE2NykmMXwwLDAsZFtnPj4wXXxkW2crMT4+MF08PDh8ZFtnKzI+PjBdPDwxNnxkW2crMz4+MF08PDI0fDAsZFtxPj4wXXxkW3ErMT4+MF08PDh8ZFtxKzI+PjBdPDwxNnxkW3ErMz4+MF08PDI0fDApfDA7Zz1DO2U9bjtoPWU7YVtoPj4wXT1xO2FbaCsxPj4wXT1xPj44O2FbaCsyPj4wXT1xPj4xNjthW2grMz4+MF09cT4+MjQ7ZT1lKzR8MDthW2U+PjBdPWc7YVtlKzE+PjBdPWc+Pjg7YVtlKzI+PjBdPWc+PjE2O2FbZSszPj4wXT1nPj4yNDtBYihiLGwpO2U9bDtnPW87aD1lKzEyOHwwO2Rve2FbZT4+MF09YVtnPj4wXXwwO2U9ZSsxfDA7Zz1nKzF8MH13aGlsZSgoZXwwKTwoaHwwKSk7Zz0oZFtrPj4wXXxkW2srMT4+MF08PDh8ZFtrKzI+PjBdPDwxNnxkW2srMz4+MF08PDI0KSstMTI4fDA7YVtrPj4wXT1nO2FbaysxPj4wXT1nPj44O2FbaysyPj4wXT1nPj4xNjthW2srMz4+MF09Zz4+MjQ7ZT1DZChqfDAsZnwwLGl8MCwwKXwwO2lmKChqfDApPT0oaXwwKSYoZnwwKT09MCl7cD02O2JyZWFrfWVsc2V7Yz1jK2l8MDtmPUM7aj1lfX1pZigocHwwKT09NilyZXR1cm4gMDtJZChlfDAsY3wwLGp8MCl8MDtzPURkKGRbaz4+MF18ZFtrKzE+PjBdPDw4fGRbaysyPj4wXTw8MTZ8ZFtrKzM+PjBdPDwyNHwwLDAsanwwLGZ8MCl8MDthW2s+PjBdPXM7YVtrKzE+PjBdPXM+Pjg7YVtrKzI+PjBdPXM+PjE2O2FbayszPj4wXT1zPj4yNDtyZXR1cm4gMH1mdW5jdGlvbiB6YihiLGMsZSl7Yj1ifDA7Yz1jfDA7ZT1lfDA7dmFyIGY9MCxnPTAsaD0wLGk9MCxqPTAsaz0wLGw9MCxtPTA7aWYoZT4+PjA+PTI1Nil6YSgzMjYwOCwzMjYyOCwxMDYsMzI3NTkpO2Y9ZSYyNTU7aWYoIShmPDwyND4+MjQpKXtiPS0xO3JldHVybiBifDB9aWYoKGYmMjU1KT42NCl7Yj0tMTtyZXR1cm4gYnwwfWc9YiszNTJ8MDtmPWRbZz4+MF18ZFtnKzE+PjBdPDw4fGRbZysyPj4wXTw8MTZ8ZFtnKzM+PjBdPDwyNDtpPWIrNjR8MDtpZihmPj4+MD4xMjgpe2s9aTtqPWs7aj1kW2o+PjBdfGRbaisxPj4wXTw8OHxkW2orMj4+MF08PDE2fGRbaiszPj4wXTw8MjQ7az1rKzR8MDtrPWRbaz4+MF18ZFtrKzE+PjBdPDw4fGRbaysyPj4wXTw8MTZ8ZFtrKzM+PjBdPDwyNDttPURkKGp8MCxrfDAsMTI4LDApfDA7bD1DO2g9aTtmPWg7YVtmPj4wXT1tO2FbZisxPj4wXT1tPj44O2FbZisyPj4wXT1tPj4xNjthW2YrMz4+MF09bT4+MjQ7aD1oKzR8MDthW2g+PjBdPWw7YVtoKzE+PjBdPWw+Pjg7YVtoKzI+PjBdPWw+PjE2O2FbaCszPj4wXT1sPj4yNDtoPWIrNzJ8MDtsPWg7Zj1sO2w9bCs0fDA7bD1EZCgoaz4+PjA+NDI5NDk2NzI5NXwoa3wwKT09LTEmaj4+PjA+NDI5NDk2NzE2NykmMXwwLDAsZFtmPj4wXXxkW2YrMT4+MF08PDh8ZFtmKzI+PjBdPDwxNnxkW2YrMz4+MF08PDI0fDAsZFtsPj4wXXxkW2wrMT4+MF08PDh8ZFtsKzI+PjBdPDwxNnxkW2wrMz4+MF08PDI0fDApfDA7Zj1DO2o9aDtrPWo7YVtrPj4wXT1sO2FbaysxPj4wXT1sPj44O2FbaysyPj4wXT1sPj4xNjthW2srMz4+MF09bD4+MjQ7aj1qKzR8MDthW2o+PjBdPWY7YVtqKzE+PjBdPWY+Pjg7YVtqKzI+PjBdPWY+PjE2O2FbaiszPj4wXT1mPj4yNDtqPWIrOTZ8MDtBYihiLGopO2Y9KGRbZz4+MF18ZFtnKzE+PjBdPDw4fGRbZysyPj4wXTw8MTZ8ZFtnKzM+PjBdPDwyNCkrLTEyOHwwO2FbZz4+MF09ZjthW2crMT4+MF09Zj4+ODthW2crMj4+MF09Zj4+MTY7YVtnKzM+PjBdPWY+PjI0O0pkKGp8MCxiKzIyNHwwLGZ8MCl8MDtmPWRbZz4+MF18ZFtnKzE+PjBdPDw4fGRbZysyPj4wXTw8MTZ8ZFtnKzM+PjBdPDwyNH1lbHNlIGg9Yis3MnwwO209aTtrPW07bT1tKzR8MDttPURkKGRbaz4+MF18ZFtrKzE+PjBdPDw4fGRbaysyPj4wXTw8MTZ8ZFtrKzM+PjBdPDwyNHwwLGRbbT4+MF18ZFttKzE+PjBdPDw4fGRbbSsyPj4wXTw8MTZ8ZFttKzM+PjBdPDwyNHwwLGZ8MCwwKXwwO2s9QztqPWk7bD1qO2FbbD4+MF09bTthW2wrMT4+MF09bT4+ODthW2wrMj4+MF09bT4+MTY7YVtsKzM+PjBdPW0+PjI0O2o9ais0fDA7YVtqPj4wXT1rO2FbaisxPj4wXT1rPj44O2FbaisyPj4wXT1rPj4xNjthW2orMz4+MF09az4+MjQ7aj1oO2w9ajtqPWorNHwwO2o9RGQoKGs+Pj4wPDB8KGt8MCk9PTAmbT4+PjA8Zj4+PjApJjF8MCwwLGRbbD4+MF18ZFtsKzE+PjBdPDw4fGRbbCsyPj4wXTw8MTZ8ZFtsKzM+PjBdPDwyNHwwLGRbaj4+MF18ZFtqKzE+PjBdPDw4fGRbaisyPj4wXTw8MTZ8ZFtqKzM+PjBdPDwyNHwwKXwwO2w9QzttPWg7az1tO2Fbaz4+MF09ajthW2srMT4+MF09aj4+ODthW2srMj4+MF09aj4+MTY7YVtrKzM+PjBdPWo+PjI0O209bSs0fDA7YVttPj4wXT1sO2FbbSsxPj4wXT1sPj44O2FbbSsyPj4wXT1sPj4xNjthW20rMz4+MF09bD4+MjQ7aWYoYVtiKzM1Nj4+MF18MCl7bT1iKzg4fDA7bD1tO2FbbD4+MF09LTE7YVtsKzE+PjBdPS0xPj44O2FbbCsyPj4wXT0tMT4+MTY7YVtsKzM+PjBdPS0xPj4yNDttPW0rNHwwO2FbbT4+MF09LTE7YVttKzE+PjBdPS0xPj44O2FbbSsyPj4wXT0tMT4+MTY7YVttKzM+PjBdPS0xPj4yNH1tPWIrODB8MDtsPW07YVtsPj4wXT0tMTthW2wrMT4+MF09LTE+Pjg7YVtsKzI+PjBdPS0xPj4xNjthW2wrMz4+MF09LTE+PjI0O209bSs0fDA7YVttPj4wXT0tMTthW20rMT4+MF09LTE+Pjg7YVttKzI+PjBdPS0xPj4xNjthW20rMz4+MF09LTE+PjI0O0ZkKGIrOTYrZnwwLDAsMjU2LWZ8MCl8MDtBYihiLGIrOTZ8MCk7SWQoY3wwLGJ8MCxlJjI1NXwwKXwwO209MDtyZXR1cm4gbXwwfWZ1bmN0aW9uIEFiKGIsYyl7Yj1ifDA7Yz1jfDA7dmFyIGU9MCxmPTAsZz0wLGg9MCxpPTAsaj0wLGs9MCxsPTAsbT0wLG49MCxvPTAscD0wLHE9MCxyPTAscz0wLHQ9MCx1PTAsdj0wLHc9MCx4PTAseT0wLHo9MCxBPTAsQj0wLEQ9MCxFPTAsRj0wLEc9MCxIPTAsST0wLEo9MCxLPTAsTD0wLE09MCxOPTAsTz0wLFA9MCxRPTAsUj0wLFM9MCxUPTAsVT0wLFY9MCxXPTAsWD0wLFk9MCxaPTAsXz0wLCQ9MCxhYT0wLGJhPTAsY2E9MCxkYT0wLGVhPTAsZmE9MCxnYT0wLGhhPTAsaWE9MCxqYT0wLGthPTAsbGE9MCxtYT0wLG5hPTAsb2E9MCxwYT0wLHFhPTAscmE9MCxzYT0wLHRhPTAsdWE9MCx2YT0wLHdhPTA7UD1jO1I9UDtSPWRbUj4+MF18ZFtSKzE+PjBdPDw4fGRbUisyPj4wXTw8MTZ8ZFtSKzM+PjBdPDwyNDtQPVArNHwwO1A9ZFtQPj4wXXxkW1ArMT4+MF08PDh8ZFtQKzI+PjBdPDwxNnxkW1ArMz4+MF08PDI0O1U9Yys4fDA7Vz1VO1c9ZFtXPj4wXXxkW1crMT4+MF08PDh8ZFtXKzI+PjBdPDwxNnxkW1crMz4+MF08PDI0O1U9VSs0fDA7VT1kW1U+PjBdfGRbVSsxPj4wXTw8OHxkW1UrMj4+MF08PDE2fGRbVSszPj4wXTw8MjQ7eD1jKzE2fDA7dD14O3Q9ZFt0Pj4wXXxkW3QrMT4+MF08PDh8ZFt0KzI+PjBdPDwxNnxkW3QrMz4+MF08PDI0O3g9eCs0fDA7eD1kW3g+PjBdfGRbeCsxPj4wXTw8OHxkW3grMj4+MF08PDE2fGRbeCszPj4wXTw8MjQ7bD1jKzI0fDA7aD1sO2g9ZFtoPj4wXXxkW2grMT4+MF08PDh8ZFtoKzI+PjBdPDwxNnxkW2grMz4+MF08PDI0O2w9bCs0fDA7bD1kW2w+PjBdfGRbbCsxPj4wXTw8OHxkW2wrMj4+MF08PDE2fGRbbCszPj4wXTw8MjQ7JD1jKzMyfDA7cD0kO3A9ZFtwPj4wXXxkW3ArMT4+MF08PDh8ZFtwKzI+PjBdPDwxNnxkW3ArMz4+MF08PDI0OyQ9JCs0fDA7JD1kWyQ+PjBdfGRbJCsxPj4wXTw8OHxkWyQrMj4+MF08PDE2fGRbJCszPj4wXTw8MjQ7Rj1jKzQwfDA7SD1GO0g9ZFtIPj4wXXxkW0grMT4+MF08PDh8ZFtIKzI+PjBdPDwxNnxkW0grMz4+MF08PDI0O0Y9Ris0fDA7Rj1kW0Y+PjBdfGRbRisxPj4wXTw8OHxkW0YrMj4+MF08PDE2fGRbRiszPj4wXTw8MjQ7dT1jKzQ4fDA7cz11O3M9ZFtzPj4wXXxkW3MrMT4+MF08PDh8ZFtzKzI+PjBdPDwxNnxkW3MrMz4+MF08PDI0O3U9dSs0fDA7dT1kW3U+PjBdfGRbdSsxPj4wXTw8OHxkW3UrMj4+MF08PDE2fGRbdSszPj4wXTw8MjQ7cj1jKzU2fDA7bj1yO249ZFtuPj4wXXxkW24rMT4+MF08PDh8ZFtuKzI+PjBdPDwxNnxkW24rMz4+MF08PDI0O3I9cis0fDA7cj1kW3I+PjBdfGRbcisxPj4wXTw8OHxkW3IrMj4+MF08PDE2fGRbciszPj4wXTw8MjQ7aT1jKzY0fDA7Zz1pO2c9ZFtnPj4wXXxkW2crMT4+MF08PDh8ZFtnKzI+PjBdPDwxNnxkW2crMz4+MF08PDI0O2k9aSs0fDA7aT1kW2k+PjBdfGRbaSsxPj4wXTw8OHxkW2krMj4+MF08PDE2fGRbaSszPj4wXTw8MjQ7WT1jKzcyfDA7aj1ZO2o9ZFtqPj4wXXxkW2orMT4+MF08PDh8ZFtqKzI+PjBdPDwxNnxkW2orMz4+MF08PDI0O1k9WSs0fDA7WT1kW1k+PjBdfGRbWSsxPj4wXTw8OHxkW1krMj4+MF08PDE2fGRbWSszPj4wXTw8MjQ7bz1jKzgwfDA7bT1vO209ZFttPj4wXXxkW20rMT4+MF08PDh8ZFttKzI+PjBdPDwxNnxkW20rMz4+MF08PDI0O289bys0fDA7bz1kW28+PjBdfGRbbysxPj4wXTw8OHxkW28rMj4+MF08PDE2fGRbbyszPj4wXTw8MjQ7Sz1jKzg4fDA7TT1LO009ZFtNPj4wXXxkW00rMT4+MF08PDh8ZFtNKzI+PjBdPDwxNnxkW00rMz4+MF08PDI0O0s9Sys0fDA7Sz1kW0s+PjBdfGRbSysxPj4wXTw8OHxkW0srMj4+MF08PDE2fGRbSyszPj4wXTw8MjQ7Zj1jKzk2fDA7ZT1mO2U9ZFtlPj4wXXxkW2UrMT4+MF08PDh8ZFtlKzI+PjBdPDwxNnxkW2UrMz4+MF08PDI0O2Y9Zis0fDA7Zj1kW2Y+PjBdfGRbZisxPj4wXTw8OHxkW2YrMj4+MF08PDE2fGRbZiszPj4wXTw8MjQ7Uz1jKzEwNHwwO0I9UztCPWRbQj4+MF18ZFtCKzE+PjBdPDw4fGRbQisyPj4wXTw8MTZ8ZFtCKzM+PjBdPDwyNDtTPVMrNHwwO1M9ZFtTPj4wXXxkW1MrMT4+MF08PDh8ZFtTKzI+PjBdPDwxNnxkW1MrMz4+MF08PDI0O3NhPWMrMTEyfDA7cmE9c2E7cmE9ZFtyYT4+MF18ZFtyYSsxPj4wXTw8OHxkW3JhKzI+PjBdPDwxNnxkW3JhKzM+PjBdPDwyNDtzYT1zYSs0fDA7c2E9ZFtzYT4+MF18ZFtzYSsxPj4wXTw8OHxkW3NhKzI+PjBdPDwxNnxkW3NhKzM+PjBdPDwyNDtBPWMrMTIwfDA7eT1BO3k9ZFt5Pj4wXXxkW3krMT4+MF08PDh8ZFt5KzI+PjBdPDwxNnxkW3krMz4+MF08PDI0O0E9QSs0fDA7QT1kW0E+PjBdfGRbQSsxPj4wXTw8OHxkW0ErMj4+MF08PDE2fGRbQSszPj4wXTw8MjQ7Y2E9Yjt2PWNhO2NhPWNhKzR8MDtOPWIrOHwwO29hPU47bmE9b2E7bmE9ZFtuYT4+MF18ZFtuYSsxPj4wXTw8OHxkW25hKzI+PjBdPDwxNnxkW25hKzM+PjBdPDwyNDtvYT1vYSs0fDA7b2E9ZFtvYT4+MF18ZFtvYSsxPj4wXTw8OHxkW29hKzI+PjBdPDwxNnxkW29hKzM+PjBdPDwyNDtJPWIrMTZ8MDtrYT1JO2phPWthO2phPWRbamE+PjBdfGRbamErMT4+MF08PDh8ZFtqYSsyPj4wXTw8MTZ8ZFtqYSszPj4wXTw8MjQ7a2E9a2ErNHwwO2thPWRba2E+PjBdfGRba2ErMT4+MF08PDh8ZFtrYSsyPj4wXTw8MTZ8ZFtrYSszPj4wXTw8MjQ7RD1iKzI0fDA7Z2E9RDtmYT1nYTtmYT1kW2ZhPj4wXXxkW2ZhKzE+PjBdPDw4fGRbZmErMj4+MF08PDE2fGRbZmErMz4+MF08PDI0O2dhPWdhKzR8MDtnYT1kW2dhPj4wXXxkW2dhKzE+PjBdPDw4fGRbZ2ErMj4+MF08PDE2fGRbZ2ErMz4+MF08PDI0O3c9YiszMnwwO21hPXc7bGE9bWE7bGE9ZFtsYT4+MF18ZFtsYSsxPj4wXTw8OHxkW2xhKzI+PjBdPDwxNnxkW2xhKzM+PjBdPDwyNDttYT1tYSs0fDA7bWE9ZFttYT4+MF18ZFttYSsxPj4wXTw8OHxkW21hKzI+PjBdPDwxNnxkW21hKzM+PjBdPDwyNDtxPWIrNDB8MDtpYT1xO2hhPWlhO2hhPWRbaGE+PjBdfGRbaGErMT4+MF08PDh8ZFtoYSsyPj4wXTw8MTZ8ZFtoYSszPj4wXTw8MjQ7aWE9aWErNHwwO2lhPWRbaWE+PjBdfGRbaWErMT4+MF08PDh8ZFtpYSsyPj4wXTw8MTZ8ZFtpYSszPj4wXTw8MjQ7az1iKzQ4fDA7dWE9azt0YT11YTt0YT1kW3RhPj4wXXxkW3RhKzE+PjBdPDw4fGRbdGErMj4+MF08PDE2fGRbdGErMz4+MF08PDI0O3VhPXVhKzR8MDt1YT1kW3VhPj4wXXxkW3VhKzE+PjBdPDw4fGRbdWErMj4+MF08PDE2fGRbdWErMz4+MF08PDI0O2M9Yis1NnwwO3FhPWM7cGE9cWE7cGE9ZFtwYT4+MF18ZFtwYSsxPj4wXTw8OHxkW3BhKzI+PjBdPDwxNnxkW3BhKzM+PjBdPDwyNDtxYT1xYSs0fDA7cWE9ZFtxYT4+MF18ZFtxYSsxPj4wXTw8OHxkW3FhKzI+PjBdPDwxNnxkW3FhKzM+PjBdPDwyNDtiYT1iKzY0fDA7YWE9YmE7YmE9YmErNHwwO2FhPShkW2FhPj4wXXxkW2FhKzE+PjBdPDw4fGRbYWErMj4+MF08PDE2fGRbYWErMz4+MF08PDI0KV4tMTM3NzQwMjE1OTtiYT0oZFtiYT4+MF18ZFtiYSsxPj4wXTw8OHxkW2JhKzI+PjBdPDwxNnxkW2JhKzM+PjBdPDwyNCleMTM1OTg5MzExOTtfPWIrNzJ8MDtaPV87Xz1fKzR8MDtaPShkW1o+PjBdfGRbWisxPj4wXTw8OHxkW1orMj4+MF08PDE2fGRbWiszPj4wXTw8MjQpXjcyNTUxMTE5OTtfPShkW18+PjBdfGRbXysxPj4wXTw8OHxkW18rMj4+MF08PDE2fGRbXyszPj4wXTw8MjQpXi0xNjk0MTQ0MzcyO1g9Yis4MHwwO1Y9WDtYPVgrNHwwO1Y9KGRbVj4+MF18ZFtWKzE+PjBdPDw4fGRbVisyPj4wXTw8MTZ8ZFtWKzM+PjBdPDwyNCleLTc5NTc3NzQ5O1g9KGRbWD4+MF18ZFtYKzE+PjBdPDw4fGRbWCsyPj4wXTw8MTZ8ZFtYKzM+PjBdPDwyNCleNTI4NzM0NjM1O2VhPWIrODh8MDtkYT1lYTtlYT1lYSs0fDA7ZGE9KGRbZGE+PjBdfGRbZGErMT4+MF08PDh8ZFtkYSsyPj4wXTw8MTZ8ZFtkYSszPj4wXTw8MjQpXjMyNzAzMzIwOTtlYT0oZFtlYT4+MF18ZFtlYSsxPj4wXTw8OHxkW2VhKzI+PjBdPDwxNnxkW2VhKzM+PjBdPDwyNCleMTU0MTQ1OTIyNTtjYT1EZChsYXwwLG1hfDAsZFt2Pj4wXXxkW3YrMT4+MF08PDh8ZFt2KzI+PjBdPDwxNnxkW3YrMz4+MF08PDI0fDAsZFtjYT4+MF18ZFtjYSsxPj4wXTw8OHxkW2NhKzI+PjBdPDwxNnxkW2NhKzM+PjBdPDwyNHwwKXwwO2NhPURkKGNhfDAsQ3wwLFJ8MCxQfDApfDA7dj1DO2FhPWFhXmNhO2JhPWJhXnY7UT1EZChiYXwwLGFhfDAsLTIwNTczMTU3NiwxNzc5MDMzNzAzKXwwO1Q9QztsYT1RXmxhO21hPVRebWE7Tz1HZChsYXwwLG1hfDAsMjQpfDA7TD1DO21hPUhkKGxhfDAsbWF8MCw0MCl8MDtPPW1hfE87TD1DfEw7dj1EZChXfDAsVXwwLGNhfDAsdnwwKXwwO3Y9RGQodnwwLEN8MCxPfDAsTHwwKXwwO2NhPUM7YmE9dl5iYTthYT1jYV5hYTttYT1HZChiYXwwLGFhfDAsMTYpfDA7bGE9QzthYT1IZChiYXwwLGFhfDAsNDgpfDA7bWE9YWF8bWE7bGE9Q3xsYTtUPURkKG1hfDAsbGF8MCxRfDAsVHwwKXwwO1E9QztPPVReTztMPVFeTDthYT1HZChPfDAsTHwwLDYzKXwwO2JhPUM7TD1IZChPfDAsTHwwLDEpfDA7YWE9THxhYTtiYT1DfGJhO29hPURkKGhhfDAsaWF8MCxuYXwwLG9hfDApfDA7b2E9RGQob2F8MCxDfDAsdHwwLHh8MCl8MDtuYT1DO1o9Wl5vYTtfPV9ebmE7TD1EZChffDAsWnwwLC0yMDY3MDkzNzAxLC0xMTUwODMzMDE5KXwwO089QztoYT1MXmhhO2lhPU9eaWE7Sj1HZChoYXwwLGlhfDAsMjQpfDA7Rz1DO2lhPUhkKGhhfDAsaWF8MCw0MCl8MDtKPWlhfEo7Rz1DfEc7bmE9RGQoaHwwLGx8MCxvYXwwLG5hfDApfDA7bmE9RGQobmF8MCxDfDAsSnwwLEd8MCl8MDtvYT1DO189bmFeXztaPW9hXlo7aWE9R2QoX3wwLFp8MCwxNil8MDtoYT1DO1o9SGQoX3wwLFp8MCw0OCl8MDtpYT1afGlhO2hhPUN8aGE7Tz1EZChpYXwwLGhhfDAsTHwwLE98MCl8MDtMPUM7Sj1PXko7Rz1MXkc7Wj1HZChKfDAsR3wwLDYzKXwwO189QztHPUhkKEp8MCxHfDAsMSl8MDtaPUd8WjtfPUN8XztrYT1EZCh0YXwwLHVhfDAsamF8MCxrYXwwKXwwO2thPURkKGthfDAsQ3wwLHB8MCwkfDApfDA7amE9QztWPVZea2E7WD1YXmphO0c9RGQoWHwwLFZ8MCwtMjM3OTE1NzMsMTAxMzkwNDI0Mil8MDtKPUM7dGE9R150YTt1YT1KXnVhO0U9R2QodGF8MCx1YXwwLDI0KXwwO3o9Qzt1YT1IZCh0YXwwLHVhfDAsNDApfDA7RT11YXxFO3o9Q3x6O2phPURkKEh8MCxGfDAsa2F8MCxqYXwwKXwwO2phPURkKGphfDAsQ3wwLEV8MCx6fDApfDA7a2E9QztYPWphXlg7Vj1rYV5WO3VhPUdkKFh8MCxWfDAsMTYpfDA7dGE9QztWPUhkKFh8MCxWfDAsNDgpfDA7dWE9Vnx1YTt0YT1DfHRhO0o9RGQodWF8MCx0YXwwLEd8MCxKfDApfDA7Rz1DO0U9Sl5FO3o9R156O1Y9R2QoRXwwLHp8MCw2Myl8MDtYPUM7ej1IZChFfDAsenwwLDEpfDA7Vj16fFY7WD1DfFg7Z2E9RGQocGF8MCxxYXwwLGZhfDAsZ2F8MCl8MDtnYT1EZChnYXwwLEN8MCxzfDAsdXwwKXwwO2ZhPUM7ZGE9ZGFeZ2E7ZWE9ZWFeZmE7ej1EZChlYXwwLGRhfDAsMTU5NTc1MDEyOSwtMTUyMTQ4NjUzNCl8MDtFPUM7cGE9el5wYTtxYT1FXnFhO3dhPUdkKHBhfDAscWF8MCwyNCl8MDt2YT1DO3FhPUhkKHBhfDAscWF8MCw0MCl8MDt3YT1xYXx3YTt2YT1DfHZhO2ZhPURkKG58MCxyfDAsZ2F8MCxmYXwwKXwwO2ZhPURkKGZhfDAsQ3wwLHdhfDAsdmF8MCl8MDtnYT1DO2VhPWZhXmVhO2RhPWdhXmRhO3FhPUdkKGVhfDAsZGF8MCwxNil8MDtwYT1DO2RhPUhkKGVhfDAsZGF8MCw0OCl8MDtxYT1kYXxxYTtwYT1DfHBhO0U9RGQocWF8MCxwYXwwLHp8MCxFfDApfDA7ej1DO3dhPUVed2E7dmE9el52YTtkYT1HZCh3YXwwLHZhfDAsNjMpfDA7ZWE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtkYT12YXxkYTtlYT1DfGVhO2NhPURkKFp8MCxffDAsdnwwLGNhfDApfDA7Y2E9RGQoY2F8MCxDfDAsZ3wwLGl8MCl8MDt2PUM7cWE9cWFeY2E7cGE9cGFedjtHPURkKHBhfDAscWF8MCxKfDAsR3wwKXwwO0o9QztaPUdeWjtfPUpeXzt2YT1HZChafDAsX3wwLDI0KXwwO3dhPUM7Xz1IZChafDAsX3wwLDQwKXwwO3ZhPV98dmE7d2E9Q3x3YTt2PURkKGp8MCxZfDAsY2F8MCx2fDApfDA7dj1EZCh2fDAsQ3wwLHZhfDAsd2F8MCl8MDtjYT1DO3BhPXZecGE7cWE9Y2FecWE7Xz1HZChwYXwwLHFhfDAsMTYpfDA7Wj1DO3FhPUhkKHBhfDAscWF8MCw0OCl8MDtfPXFhfF87Wj1DfFo7Sj1EZChffDAsWnwwLEd8MCxKfDApfDA7Rz1DO3ZhPUpedmE7d2E9R153YTtxYT1HZCh2YXwwLHdhfDAsNjMpfDA7cGE9Qzt3YT1IZCh2YXwwLHdhfDAsMSl8MDtxYT13YXxxYTtwYT1DfHBhO29hPURkKFZ8MCxYfDAsbmF8MCxvYXwwKXwwO29hPURkKG9hfDAsQ3wwLG18MCxvfDApfDA7bmE9QzttYT1tYV5vYTtsYT1sYV5uYTt6PURkKGxhfDAsbWF8MCxFfDAsenwwKXwwO0U9QztWPXpeVjtYPUVeWDt3YT1HZChWfDAsWHwwLDI0KXwwO3ZhPUM7WD1IZChWfDAsWHwwLDQwKXwwO3dhPVh8d2E7dmE9Q3x2YTtuYT1EZChNfDAsS3wwLG9hfDAsbmF8MCl8MDtuYT1EZChuYXwwLEN8MCx3YXwwLHZhfDApfDA7b2E9QztsYT1uYV5sYTttYT1vYV5tYTtYPUdkKGxhfDAsbWF8MCwxNil8MDtWPUM7bWE9SGQobGF8MCxtYXwwLDQ4KXwwO1g9bWF8WDtWPUN8VjtFPURkKFh8MCxWfDAsenwwLEV8MCl8MDt6PUM7d2E9RV53YTt2YT16XnZhO21hPUdkKHdhfDAsdmF8MCw2Myl8MDtsYT1DO3ZhPUhkKHdhfDAsdmF8MCwxKXwwO21hPXZhfG1hO2xhPUN8bGE7a2E9RGQoZGF8MCxlYXwwLGphfDAsa2F8MCl8MDtrYT1EZChrYXwwLEN8MCxlfDAsZnwwKXwwO2phPUM7aWE9aWFea2E7aGE9aGFeamE7UT1EZChoYXwwLGlhfDAsVHwwLFF8MCl8MDtUPUM7ZGE9UV5kYTtlYT1UXmVhO3ZhPUdkKGRhfDAsZWF8MCwyNCl8MDt3YT1DO2VhPUhkKGRhfDAsZWF8MCw0MCl8MDt2YT1lYXx2YTt3YT1DfHdhO2phPURkKEJ8MCxTfDAsa2F8MCxqYXwwKXwwO2phPURkKGphfDAsQ3wwLHZhfDAsd2F8MCl8MDtrYT1DO2hhPWphXmhhO2lhPWthXmlhO2VhPUdkKGhhfDAsaWF8MCwxNil8MDtkYT1DO2lhPUhkKGhhfDAsaWF8MCw0OCl8MDtlYT1pYXxlYTtkYT1DfGRhO1Q9RGQoZWF8MCxkYXwwLFF8MCxUfDApfDA7UT1DO3ZhPVRedmE7d2E9UV53YTtpYT1HZCh2YXwwLHdhfDAsNjMpfDA7aGE9Qzt3YT1IZCh2YXwwLHdhfDAsMSl8MDtpYT13YXxpYTtoYT1DfGhhO2dhPURkKGFhfDAsYmF8MCxmYXwwLGdhfDApfDA7Z2E9RGQoZ2F8MCxDfDAscmF8MCxzYXwwKXwwO2ZhPUM7dWE9dWFeZ2E7dGE9dGFeZmE7TD1EZCh0YXwwLHVhfDAsT3wwLEx8MCl8MDtPPUM7YWE9TF5hYTtiYT1PXmJhO3dhPUdkKGFhfDAsYmF8MCwyNCl8MDt2YT1DO2JhPUhkKGFhfDAsYmF8MCw0MCl8MDt3YT1iYXx3YTt2YT1DfHZhO2ZhPURkKHl8MCxBfDAsZ2F8MCxmYXwwKXwwO2ZhPURkKGZhfDAsQ3wwLHdhfDAsdmF8MCl8MDtnYT1DO3RhPWZhXnRhO3VhPWdhXnVhO2JhPUdkKHRhfDAsdWF8MCwxNil8MDthYT1DO3VhPUhkKHRhfDAsdWF8MCw0OCl8MDtiYT11YXxiYTthYT1DfGFhO089RGQoYmF8MCxhYXwwLEx8MCxPfDApfDA7TD1DO3dhPU9ed2E7dmE9TF52YTt1YT1HZCh3YXwwLHZhfDAsNjMpfDA7dGE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDt1YT12YXx1YTt0YT1DfHRhO2NhPURkKHJhfDAsc2F8MCx2fDAsY2F8MCl8MDtjYT1EZChjYXwwLEN8MCx1YXwwLHRhfDApfDA7dj1DO1g9Y2FeWDtWPXZeVjtRPURkKFZ8MCxYfDAsVHwwLFF8MCl8MDtUPUM7dWE9UV51YTt0YT1UXnRhO3ZhPUdkKHVhfDAsdGF8MCwyNCl8MDt3YT1DO3RhPUhkKHVhfDAsdGF8MCw0MCl8MDt2YT10YXx2YTt3YT1DfHdhO3Y9RGQobXwwLG98MCxjYXwwLHZ8MCl8MDt2PURkKHZ8MCxDfDAsdmF8MCx3YXwwKXwwO2NhPUM7Vj12XlY7WD1jYV5YO3RhPUdkKFZ8MCxYfDAsMTYpfDA7dWE9QztYPUhkKFZ8MCxYfDAsNDgpfDA7dGE9WHx0YTt1YT1DfHVhO1Q9RGQodGF8MCx1YXwwLFF8MCxUfDApfDA7UT1DO3ZhPVRedmE7d2E9UV53YTtYPUdkKHZhfDAsd2F8MCw2Myl8MDtWPUM7d2E9SGQodmF8MCx3YXwwLDEpfDA7WD13YXxYO1Y9Q3xWO29hPURkKHFhfDAscGF8MCxuYXwwLG9hfDApfDA7b2E9RGQob2F8MCxDfDAscHwwLCR8MCl8MDtuYT1DO2VhPWVhXm9hO2RhPWRhXm5hO0w9RGQoZGF8MCxlYXwwLE98MCxMfDApfDA7Tz1DO3FhPUxecWE7cGE9T15wYTt3YT1HZChxYXwwLHBhfDAsMjQpfDA7dmE9QztwYT1IZChxYXwwLHBhfDAsNDApfDA7d2E9cGF8d2E7dmE9Q3x2YTtuYT1EZChnfDAsaXwwLG9hfDAsbmF8MCl8MDtuYT1EZChuYXwwLEN8MCx3YXwwLHZhfDApfDA7b2E9QztkYT1uYV5kYTtlYT1vYV5lYTtwYT1HZChkYXwwLGVhfDAsMTYpfDA7cWE9QztlYT1IZChkYXwwLGVhfDAsNDgpfDA7cGE9ZWF8cGE7cWE9Q3xxYTtPPURkKHBhfDAscWF8MCxMfDAsT3wwKXwwO0w9Qzt3YT1PXndhO3ZhPUxedmE7ZWE9R2Qod2F8MCx2YXwwLDYzKXwwO2RhPUM7dmE9SGQod2F8MCx2YXwwLDEpfDA7ZWE9dmF8ZWE7ZGE9Q3xkYTtrYT1EZChtYXwwLGxhfDAsamF8MCxrYXwwKXwwO2thPURkKGthfDAsQ3wwLGp8MCxZfDApfDA7amE9QztiYT1iYV5rYTthYT1hYV5qYTtHPURkKGFhfDAsYmF8MCxKfDAsR3wwKXwwO0o9QzttYT1HXm1hO2xhPUpebGE7dmE9R2QobWF8MCxsYXwwLDI0KXwwO3dhPUM7bGE9SGQobWF8MCxsYXwwLDQwKXwwO3ZhPWxhfHZhO3dhPUN8d2E7amE9RGQoeXwwLEF8MCxrYXwwLGphfDApfDA7amE9RGQoamF8MCxDfDAsdmF8MCx3YXwwKXwwO2thPUM7YWE9amFeYWE7YmE9a2FeYmE7bGE9R2QoYWF8MCxiYXwwLDE2KXwwO21hPUM7YmE9SGQoYWF8MCxiYXwwLDQ4KXwwO2xhPWJhfGxhO21hPUN8bWE7Sj1EZChsYXwwLG1hfDAsR3wwLEp8MCl8MDtHPUM7dmE9Sl52YTt3YT1HXndhO2JhPUdkKHZhfDAsd2F8MCw2Myl8MDthYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO2JhPXdhfGJhO2FhPUN8YWE7Z2E9RGQoaWF8MCxoYXwwLGZhfDAsZ2F8MCl8MDtnYT1EZChnYXwwLEN8MCxCfDAsU3wwKXwwO2ZhPUM7Xz1fXmdhO1o9Wl5mYTt6PURkKFp8MCxffDAsRXwwLHp8MCl8MDtFPUM7aWE9el5pYTtoYT1FXmhhO3dhPUdkKGlhfDAsaGF8MCwyNCl8MDt2YT1DO2hhPUhkKGlhfDAsaGF8MCw0MCl8MDt3YT1oYXx3YTt2YT1DfHZhO2ZhPURkKHN8MCx1fDAsZ2F8MCxmYXwwKXwwO2ZhPURkKGZhfDAsQ3wwLHdhfDAsdmF8MCl8MDtnYT1DO1o9ZmFeWjtfPWdhXl87aGE9R2QoWnwwLF98MCwxNil8MDtpYT1DO189SGQoWnwwLF98MCw0OCl8MDtoYT1ffGhhO2lhPUN8aWE7RT1EZChoYXwwLGlhfDAsenwwLEV8MCl8MDt6PUM7d2E9RV53YTt2YT16XnZhO189R2Qod2F8MCx2YXwwLDYzKXwwO1o9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtfPXZhfF87Wj1DfFo7Y2E9RGQoZWF8MCxkYXwwLHZ8MCxjYXwwKXwwO2NhPURkKGNhfDAsQ3wwLFd8MCxVfDApfDA7dj1DO2hhPWhhXmNhO2lhPWlhXnY7Rz1EZChpYXwwLGhhfDAsSnwwLEd8MCl8MDtKPUM7ZWE9R15lYTtkYT1KXmRhO3ZhPUdkKGVhfDAsZGF8MCwyNCl8MDt3YT1DO2RhPUhkKGVhfDAsZGF8MCw0MCl8MDt2YT1kYXx2YTt3YT1DfHdhO3Y9RGQoZXwwLGZ8MCxjYXwwLHZ8MCl8MDt2PURkKHZ8MCxDfDAsdmF8MCx3YXwwKXwwO2NhPUM7aWE9dl5pYTtoYT1jYV5oYTtkYT1HZChpYXwwLGhhfDAsMTYpfDA7ZWE9QztoYT1IZChpYXwwLGhhfDAsNDgpfDA7ZGE9aGF8ZGE7ZWE9Q3xlYTtKPURkKGRhfDAsZWF8MCxHfDAsSnwwKXwwO0c9Qzt2YT1KXnZhO3dhPUded2E7aGE9R2QodmF8MCx3YXwwLDYzKXwwO2lhPUM7d2E9SGQodmF8MCx3YXwwLDEpfDA7aGE9d2F8aGE7aWE9Q3xpYTtvYT1EZChiYXwwLGFhfDAsbmF8MCxvYXwwKXwwO29hPURkKG9hfDAsQ3wwLFJ8MCxQfDApfDA7bmE9Qzt0YT10YV5vYTt1YT11YV5uYTt6PURkKHVhfDAsdGF8MCxFfDAsenwwKXwwO0U9QztiYT16XmJhO2FhPUVeYWE7d2E9R2QoYmF8MCxhYXwwLDI0KXwwO3ZhPUM7YWE9SGQoYmF8MCxhYXwwLDQwKXwwO3dhPWFhfHdhO3ZhPUN8dmE7bmE9RGQodHwwLHh8MCxvYXwwLG5hfDApfDA7bmE9RGQobmF8MCxDfDAsd2F8MCx2YXwwKXwwO29hPUM7dWE9bmFedWE7dGE9b2FedGE7YWE9R2QodWF8MCx0YXwwLDE2KXwwO2JhPUM7dGE9SGQodWF8MCx0YXwwLDQ4KXwwO2FhPXRhfGFhO2JhPUN8YmE7RT1EZChhYXwwLGJhfDAsenwwLEV8MCl8MDt6PUM7d2E9RV53YTt2YT16XnZhO3RhPUdkKHdhfDAsdmF8MCw2Myl8MDt1YT1DO3ZhPUhkKHdhfDAsdmF8MCwxKXwwO3RhPXZhfHRhO3VhPUN8dWE7a2E9RGQoX3wwLFp8MCxqYXwwLGthfDApfDA7a2E9RGQoa2F8MCxDfDAsTXwwLEt8MCl8MDtqYT1DO3BhPXBhXmthO3FhPXFhXmphO1E9RGQocWF8MCxwYXwwLFR8MCxRfDApfDA7VD1DO189UV5fO1o9VF5aO3ZhPUdkKF98MCxafDAsMjQpfDA7d2E9QztaPUhkKF98MCxafDAsNDApfDA7dmE9Wnx2YTt3YT1DfHdhO2phPURkKG58MCxyfDAsa2F8MCxqYXwwKXwwO2phPURkKGphfDAsQ3wwLHZhfDAsd2F8MCl8MDtrYT1DO3FhPWphXnFhO3BhPWthXnBhO1o9R2QocWF8MCxwYXwwLDE2KXwwO189QztwYT1IZChxYXwwLHBhfDAsNDgpfDA7Wj1wYXxaO189Q3xfO1Q9RGQoWnwwLF98MCxRfDAsVHwwKXwwO1E9Qzt2YT1UXnZhO3dhPVFed2E7cGE9R2QodmF8MCx3YXwwLDYzKXwwO3FhPUM7d2E9SGQodmF8MCx3YXwwLDEpfDA7cGE9d2F8cGE7cWE9Q3xxYTtnYT1EZChYfDAsVnwwLGZhfDAsZ2F8MCl8MDtnYT1EZChnYXwwLEN8MCxIfDAsRnwwKXwwO2ZhPUM7bGE9bGFeZ2E7bWE9bWFeZmE7TD1EZChtYXwwLGxhfDAsT3wwLEx8MCl8MDtPPUM7WD1MXlg7Vj1PXlY7d2E9R2QoWHwwLFZ8MCwyNCl8MDt2YT1DO1Y9SGQoWHwwLFZ8MCw0MCl8MDt3YT1WfHdhO3ZhPUN8dmE7ZmE9RGQoaHwwLGx8MCxnYXwwLGZhfDApfDA7ZmE9RGQoZmF8MCxDfDAsd2F8MCx2YXwwKXwwO2dhPUM7bWE9ZmFebWE7bGE9Z2FebGE7Vj1HZChtYXwwLGxhfDAsMTYpfDA7WD1DO2xhPUhkKG1hfDAsbGF8MCw0OCl8MDtWPWxhfFY7WD1DfFg7Tz1EZChWfDAsWHwwLEx8MCxPfDApfDA7TD1DO3dhPU9ed2E7dmE9TF52YTtsYT1HZCh3YXwwLHZhfDAsNjMpfDA7bWE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtsYT12YXxsYTttYT1DfG1hO2NhPURkKE18MCxLfDAsdnwwLGNhfDApfDA7Y2E9RGQoY2F8MCxDfDAsbGF8MCxtYXwwKXwwO3Y9QzthYT1jYV5hYTtiYT12XmJhO1E9RGQoYmF8MCxhYXwwLFR8MCxRfDApfDA7VD1DO2xhPVFebGE7bWE9VF5tYTt2YT1HZChsYXwwLG1hfDAsMjQpfDA7d2E9QzttYT1IZChsYXwwLG1hfDAsNDApfDA7dmE9bWF8dmE7d2E9Q3x3YTt2PURkKGd8MCxpfDAsY2F8MCx2fDApfDA7dj1EZCh2fDAsQ3wwLHZhfDAsd2F8MCl8MDtjYT1DO2JhPXZeYmE7YWE9Y2FeYWE7bWE9R2QoYmF8MCxhYXwwLDE2KXwwO2xhPUM7YWE9SGQoYmF8MCxhYXwwLDQ4KXwwO21hPWFhfG1hO2xhPUN8bGE7VD1EZChtYXwwLGxhfDAsUXwwLFR8MCl8MDtRPUM7dmE9VF52YTt3YT1RXndhO2FhPUdkKHZhfDAsd2F8MCw2Myl8MDtiYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO2FhPXdhfGFhO2JhPUN8YmE7b2E9RGQoaGF8MCxpYXwwLG5hfDAsb2F8MCl8MDtvYT1EZChvYXwwLEN8MCxlfDAsZnwwKXwwO25hPUM7Wj1aXm9hO189X15uYTtMPURkKF98MCxafDAsT3wwLEx8MCl8MDtPPUM7aGE9TF5oYTtpYT1PXmlhO3dhPUdkKGhhfDAsaWF8MCwyNCl8MDt2YT1DO2lhPUhkKGhhfDAsaWF8MCw0MCl8MDt3YT1pYXx3YTt2YT1DfHZhO25hPURkKFJ8MCxQfDAsb2F8MCxuYXwwKXwwO25hPURkKG5hfDAsQ3wwLHdhfDAsdmF8MCl8MDtvYT1DO189bmFeXztaPW9hXlo7aWE9R2QoX3wwLFp8MCwxNil8MDtoYT1DO1o9SGQoX3wwLFp8MCw0OCl8MDtpYT1afGlhO2hhPUN8aGE7Tz1EZChpYXwwLGhhfDAsTHwwLE98MCl8MDtMPUM7d2E9T153YTt2YT1MXnZhO1o9R2Qod2F8MCx2YXwwLDYzKXwwO189Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtaPXZhfFo7Xz1DfF87a2E9RGQodGF8MCx1YXwwLGphfDAsa2F8MCl8MDtrYT1EZChrYXwwLEN8MCxIfDAsRnwwKXwwO2phPUM7Vj1WXmthO1g9WF5qYTtHPURkKFh8MCxWfDAsSnwwLEd8MCl8MDtKPUM7dGE9R150YTt1YT1KXnVhO3ZhPUdkKHRhfDAsdWF8MCwyNCl8MDt3YT1DO3VhPUhkKHRhfDAsdWF8MCw0MCl8MDt2YT11YXx2YTt3YT1DfHdhO2phPURkKHR8MCx4fDAsa2F8MCxqYXwwKXwwO2phPURkKGphfDAsQ3wwLHZhfDAsd2F8MCl8MDtrYT1DO1g9amFeWDtWPWthXlY7dWE9R2QoWHwwLFZ8MCwxNil8MDt0YT1DO1Y9SGQoWHwwLFZ8MCw0OCl8MDt1YT1WfHVhO3RhPUN8dGE7Sj1EZCh1YXwwLHRhfDAsR3wwLEp8MCl8MDtHPUM7dmE9Sl52YTt3YT1HXndhO1Y9R2QodmF8MCx3YXwwLDYzKXwwO1g9Qzt3YT1IZCh2YXwwLHdhfDAsMSl8MDtWPXdhfFY7WD1DfFg7Z2E9RGQocGF8MCxxYXwwLGZhfDAsZ2F8MCl8MDtnYT1EZChnYXwwLEN8MCx5fDAsQXwwKXwwO2ZhPUM7ZGE9ZGFeZ2E7ZWE9ZWFeZmE7ej1EZChlYXwwLGRhfDAsRXwwLHp8MCl8MDtFPUM7cGE9el5wYTtxYT1FXnFhO3dhPUdkKHBhfDAscWF8MCwyNCl8MDt2YT1DO3FhPUhkKHBhfDAscWF8MCw0MCl8MDt3YT1xYXx3YTt2YT1DfHZhO2ZhPURkKEJ8MCxTfDAsZ2F8MCxmYXwwKXwwO2ZhPURkKGZhfDAsQ3wwLHdhfDAsdmF8MCl8MDtnYT1DO2VhPWZhXmVhO2RhPWdhXmRhO3FhPUdkKGVhfDAsZGF8MCwxNil8MDtwYT1DO2RhPUhkKGVhfDAsZGF8MCw0OCl8MDtxYT1kYXxxYTtwYT1DfHBhO0U9RGQocWF8MCxwYXwwLHp8MCxFfDApfDA7ej1DO3dhPUVed2E7dmE9el52YTtkYT1HZCh3YXwwLHZhfDAsNjMpfDA7ZWE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtkYT12YXxkYTtlYT1DfGVhO2NhPURkKFp8MCxffDAsdnwwLGNhfDApfDA7Y2E9RGQoY2F8MCxDfDAsbXwwLG98MCl8MDt2PUM7cWE9cWFeY2E7cGE9cGFedjtHPURkKHBhfDAscWF8MCxKfDAsR3wwKXwwO0o9QztaPUdeWjtfPUpeXzt2YT1HZChafDAsX3wwLDI0KXwwO3dhPUM7Xz1IZChafDAsX3wwLDQwKXwwO3ZhPV98dmE7d2E9Q3x3YTt2PURkKHJhfDAsc2F8MCxjYXwwLHZ8MCl8MDt2PURkKHZ8MCxDfDAsdmF8MCx3YXwwKXwwO2NhPUM7cGE9dl5wYTtxYT1jYV5xYTtfPUdkKHBhfDAscWF8MCwxNil8MDtaPUM7cWE9SGQocGF8MCxxYXwwLDQ4KXwwO189cWF8XztaPUN8WjtKPURkKF98MCxafDAsR3wwLEp8MCl8MDtHPUM7dmE9Sl52YTt3YT1HXndhO3FhPUdkKHZhfDAsd2F8MCw2Myl8MDtwYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO3FhPXdhfHFhO3BhPUN8cGE7b2E9RGQoVnwwLFh8MCxuYXwwLG9hfDApfDA7b2E9RGQob2F8MCxDfDAsaHwwLGx8MCl8MDtuYT1DO21hPW1hXm9hO2xhPWxhXm5hO3o9RGQobGF8MCxtYXwwLEV8MCx6fDApfDA7RT1DO1Y9el5WO1g9RV5YO3dhPUdkKFZ8MCxYfDAsMjQpfDA7dmE9QztYPUhkKFZ8MCxYfDAsNDApfDA7d2E9WHx3YTt2YT1DfHZhO25hPURkKHN8MCx1fDAsb2F8MCxuYXwwKXwwO25hPURkKG5hfDAsQ3wwLHdhfDAsdmF8MCl8MDtvYT1DO2xhPW5hXmxhO21hPW9hXm1hO1g9R2QobGF8MCxtYXwwLDE2KXwwO1Y9QzttYT1IZChsYXwwLG1hfDAsNDgpfDA7WD1tYXxYO1Y9Q3xWO0U9RGQoWHwwLFZ8MCx6fDAsRXwwKXwwO3o9Qzt3YT1FXndhO3ZhPXpedmE7bWE9R2Qod2F8MCx2YXwwLDYzKXwwO2xhPUM7dmE9SGQod2F8MCx2YXwwLDEpfDA7bWE9dmF8bWE7bGE9Q3xsYTtrYT1EZChkYXwwLGVhfDAsamF8MCxrYXwwKXwwO2thPURkKGthfDAsQ3wwLG58MCxyfDApfDA7amE9QztpYT1pYV5rYTtoYT1oYV5qYTtRPURkKGhhfDAsaWF8MCxUfDAsUXwwKXwwO1Q9QztkYT1RXmRhO2VhPVReZWE7dmE9R2QoZGF8MCxlYXwwLDI0KXwwO3dhPUM7ZWE9SGQoZGF8MCxlYXwwLDQwKXwwO3ZhPWVhfHZhO3dhPUN8d2E7amE9RGQoV3wwLFV8MCxrYXwwLGphfDApfDA7amE9RGQoamF8MCxDfDAsdmF8MCx3YXwwKXwwO2thPUM7aGE9amFeaGE7aWE9a2FeaWE7ZWE9R2QoaGF8MCxpYXwwLDE2KXwwO2RhPUM7aWE9SGQoaGF8MCxpYXwwLDQ4KXwwO2VhPWlhfGVhO2RhPUN8ZGE7VD1EZChlYXwwLGRhfDAsUXwwLFR8MCl8MDtRPUM7dmE9VF52YTt3YT1RXndhO2lhPUdkKHZhfDAsd2F8MCw2Myl8MDtoYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO2lhPXdhfGlhO2hhPUN8aGE7Z2E9RGQoYWF8MCxiYXwwLGZhfDAsZ2F8MCl8MDtnYT1EZChnYXwwLEN8MCxqfDAsWXwwKXwwO2ZhPUM7dWE9dWFeZ2E7dGE9dGFeZmE7TD1EZCh0YXwwLHVhfDAsT3wwLEx8MCl8MDtPPUM7YWE9TF5hYTtiYT1PXmJhO3dhPUdkKGFhfDAsYmF8MCwyNCl8MDt2YT1DO2JhPUhkKGFhfDAsYmF8MCw0MCl8MDt3YT1iYXx3YTt2YT1DfHZhO2ZhPURkKHB8MCwkfDAsZ2F8MCxmYXwwKXwwO2ZhPURkKGZhfDAsQ3wwLHdhfDAsdmF8MCl8MDtnYT1DO3RhPWZhXnRhO3VhPWdhXnVhO2JhPUdkKHRhfDAsdWF8MCwxNil8MDthYT1DO3VhPUhkKHRhfDAsdWF8MCw0OCl8MDtiYT11YXxiYTthYT1DfGFhO089RGQoYmF8MCxhYXwwLEx8MCxPfDApfDA7TD1DO3dhPU9ed2E7dmE9TF52YTt1YT1HZCh3YXwwLHZhfDAsNjMpfDA7dGE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDt1YT12YXx1YTt0YT1DfHRhO2NhPURkKG58MCxyfDAsdnwwLGNhfDApfDA7Y2E9RGQoY2F8MCxDfDAsdWF8MCx0YXwwKXwwO3Y9QztYPWNhXlg7Vj12XlY7UT1EZChWfDAsWHwwLFR8MCxRfDApfDA7VD1DO3VhPVFedWE7dGE9VF50YTt2YT1HZCh1YXwwLHRhfDAsMjQpfDA7d2E9Qzt0YT1IZCh1YXwwLHRhfDAsNDApfDA7dmE9dGF8dmE7d2E9Q3x3YTt2PURkKGp8MCxZfDAsY2F8MCx2fDApfDA7dj1EZCh2fDAsQ3wwLHZhfDAsd2F8MCl8MDtjYT1DO1Y9dl5WO1g9Y2FeWDt0YT1HZChWfDAsWHwwLDE2KXwwO3VhPUM7WD1IZChWfDAsWHwwLDQ4KXwwO3RhPVh8dGE7dWE9Q3x1YTtUPURkKHRhfDAsdWF8MCxRfDAsVHwwKXwwO1E9Qzt2YT1UXnZhO3dhPVFed2E7WD1HZCh2YXwwLHdhfDAsNjMpfDA7Vj1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO1g9d2F8WDtWPUN8VjtvYT1EZChxYXwwLHBhfDAsbmF8MCxvYXwwKXwwO29hPURkKG9hfDAsQ3wwLGh8MCxsfDApfDA7bmE9QztlYT1lYV5vYTtkYT1kYV5uYTtMPURkKGRhfDAsZWF8MCxPfDAsTHwwKXwwO089QztxYT1MXnFhO3BhPU9ecGE7d2E9R2QocWF8MCxwYXwwLDI0KXwwO3ZhPUM7cGE9SGQocWF8MCxwYXwwLDQwKXwwO3dhPXBhfHdhO3ZhPUN8dmE7bmE9RGQoV3wwLFV8MCxvYXwwLG5hfDApfDA7bmE9RGQobmF8MCxDfDAsd2F8MCx2YXwwKXwwO29hPUM7ZGE9bmFeZGE7ZWE9b2FeZWE7cGE9R2QoZGF8MCxlYXwwLDE2KXwwO3FhPUM7ZWE9SGQoZGF8MCxlYXwwLDQ4KXwwO3BhPWVhfHBhO3FhPUN8cWE7Tz1EZChwYXwwLHFhfDAsTHwwLE98MCl8MDtMPUM7d2E9T153YTt2YT1MXnZhO2VhPUdkKHdhfDAsdmF8MCw2Myl8MDtkYT1DO3ZhPUhkKHdhfDAsdmF8MCwxKXwwO2VhPXZhfGVhO2RhPUN8ZGE7a2E9RGQobWF8MCxsYXwwLGphfDAsa2F8MCl8MDtrYT1EZChrYXwwLEN8MCxCfDAsU3wwKXwwO2phPUM7YmE9YmFea2E7YWE9YWFeamE7Rz1EZChhYXwwLGJhfDAsSnwwLEd8MCl8MDtKPUM7bWE9R15tYTtsYT1KXmxhO3ZhPUdkKG1hfDAsbGF8MCwyNCl8MDt3YT1DO2xhPUhkKG1hfDAsbGF8MCw0MCl8MDt2YT1sYXx2YTt3YT1DfHdhO2phPURkKGV8MCxmfDAsa2F8MCxqYXwwKXwwO2phPURkKGphfDAsQ3wwLHZhfDAsd2F8MCl8MDtrYT1DO2FhPWphXmFhO2JhPWthXmJhO2xhPUdkKGFhfDAsYmF8MCwxNil8MDttYT1DO2JhPUhkKGFhfDAsYmF8MCw0OCl8MDtsYT1iYXxsYTttYT1DfG1hO0o9RGQobGF8MCxtYXwwLEd8MCxKfDApfDA7Rz1DO3ZhPUpedmE7d2E9R153YTtiYT1HZCh2YXwwLHdhfDAsNjMpfDA7YWE9Qzt3YT1IZCh2YXwwLHdhfDAsMSl8MDtiYT13YXxiYTthYT1DfGFhO2dhPURkKGlhfDAsaGF8MCxmYXwwLGdhfDApfDA7Z2E9RGQoZ2F8MCxDfDAsTXwwLEt8MCl8MDtmYT1DO189X15nYTtaPVpeZmE7ej1EZChafDAsX3wwLEV8MCx6fDApfDA7RT1DO2lhPXpeaWE7aGE9RV5oYTt3YT1HZChpYXwwLGhhfDAsMjQpfDA7dmE9QztoYT1IZChpYXwwLGhhfDAsNDApfDA7d2E9aGF8d2E7dmE9Q3x2YTtmYT1EZChyYXwwLHNhfDAsZ2F8MCxmYXwwKXwwO2ZhPURkKGZhfDAsQ3wwLHdhfDAsdmF8MCl8MDtnYT1DO1o9ZmFeWjtfPWdhXl87aGE9R2QoWnwwLF98MCwxNil8MDtpYT1DO189SGQoWnwwLF98MCw0OCl8MDtoYT1ffGhhO2lhPUN8aWE7RT1EZChoYXwwLGlhfDAsenwwLEV8MCl8MDt6PUM7d2E9RV53YTt2YT16XnZhO189R2Qod2F8MCx2YXwwLDYzKXwwO1o9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtfPXZhfF87Wj1DfFo7Y2E9RGQoZWF8MCxkYXwwLHZ8MCxjYXwwKXwwO2NhPURkKGNhfDAsQ3wwLHR8MCx4fDApfDA7dj1DO2hhPWhhXmNhO2lhPWlhXnY7Rz1EZChpYXwwLGhhfDAsSnwwLEd8MCl8MDtKPUM7ZWE9R15lYTtkYT1KXmRhO3ZhPUdkKGVhfDAsZGF8MCwyNCl8MDt3YT1DO2RhPUhkKGVhfDAsZGF8MCw0MCl8MDt2YT1kYXx2YTt3YT1DfHdhO3Y9RGQoc3wwLHV8MCxjYXwwLHZ8MCl8MDt2PURkKHZ8MCxDfDAsdmF8MCx3YXwwKXwwO2NhPUM7aWE9dl5pYTtoYT1jYV5oYTtkYT1HZChpYXwwLGhhfDAsMTYpfDA7ZWE9QztoYT1IZChpYXwwLGhhfDAsNDgpfDA7ZGE9aGF8ZGE7ZWE9Q3xlYTtKPURkKGRhfDAsZWF8MCxHfDAsSnwwKXwwO0c9Qzt2YT1KXnZhO3dhPUded2E7aGE9R2QodmF8MCx3YXwwLDYzKXwwO2lhPUM7d2E9SGQodmF8MCx3YXwwLDEpfDA7aGE9d2F8aGE7aWE9Q3xpYTtvYT1EZChiYXwwLGFhfDAsbmF8MCxvYXwwKXwwO29hPURkKG9hfDAsQ3wwLEh8MCxGfDApfDA7bmE9Qzt0YT10YV5vYTt1YT11YV5uYTt6PURkKHVhfDAsdGF8MCxFfDAsenwwKXwwO0U9QztiYT16XmJhO2FhPUVeYWE7d2E9R2QoYmF8MCxhYXwwLDI0KXwwO3ZhPUM7YWE9SGQoYmF8MCxhYXwwLDQwKXwwO3dhPWFhfHdhO3ZhPUN8dmE7bmE9RGQobXwwLG98MCxvYXwwLG5hfDApfDA7bmE9RGQobmF8MCxDfDAsd2F8MCx2YXwwKXwwO29hPUM7dWE9bmFedWE7dGE9b2FedGE7YWE9R2QodWF8MCx0YXwwLDE2KXwwO2JhPUM7dGE9SGQodWF8MCx0YXwwLDQ4KXwwO2FhPXRhfGFhO2JhPUN8YmE7RT1EZChhYXwwLGJhfDAsenwwLEV8MCl8MDt6PUM7d2E9RV53YTt2YT16XnZhO3RhPUdkKHdhfDAsdmF8MCw2Myl8MDt1YT1DO3ZhPUhkKHdhfDAsdmF8MCwxKXwwO3RhPXZhfHRhO3VhPUN8dWE7a2E9RGQoX3wwLFp8MCxqYXwwLGthfDApfDA7a2E9RGQoa2F8MCxDfDAscHwwLCR8MCl8MDtqYT1DO3BhPXBhXmthO3FhPXFhXmphO1E9RGQocWF8MCxwYXwwLFR8MCxRfDApfDA7VD1DO189UV5fO1o9VF5aO3ZhPUdkKF98MCxafDAsMjQpfDA7d2E9QztaPUhkKF98MCxafDAsNDApfDA7dmE9Wnx2YTt3YT1DfHdhO2phPURkKFJ8MCxQfDAsa2F8MCxqYXwwKXwwO2phPURkKGphfDAsQ3wwLHZhfDAsd2F8MCl8MDtrYT1DO3FhPWphXnFhO3BhPWthXnBhO1o9R2QocWF8MCxwYXwwLDE2KXwwO189QztwYT1IZChxYXwwLHBhfDAsNDgpfDA7Wj1wYXxaO189Q3xfO1Q9RGQoWnwwLF98MCxRfDAsVHwwKXwwO1E9Qzt2YT1UXnZhO3dhPVFed2E7cGE9R2QodmF8MCx3YXwwLDYzKXwwO3FhPUM7d2E9SGQodmF8MCx3YXwwLDEpfDA7cGE9d2F8cGE7cWE9Q3xxYTtnYT1EZChYfDAsVnwwLGZhfDAsZ2F8MCl8MDtnYT1EZChnYXwwLEN8MCx5fDAsQXwwKXwwO2ZhPUM7bGE9bGFeZ2E7bWE9bWFeZmE7TD1EZChtYXwwLGxhfDAsT3wwLEx8MCl8MDtPPUM7WD1MXlg7Vj1PXlY7d2E9R2QoWHwwLFZ8MCwyNCl8MDt2YT1DO1Y9SGQoWHwwLFZ8MCw0MCl8MDt3YT1WfHdhO3ZhPUN8dmE7ZmE9RGQoZ3wwLGl8MCxnYXwwLGZhfDApfDA7ZmE9RGQoZmF8MCxDfDAsd2F8MCx2YXwwKXwwO2dhPUM7bWE9ZmFebWE7bGE9Z2FebGE7Vj1HZChtYXwwLGxhfDAsMTYpfDA7WD1DO2xhPUhkKG1hfDAsbGF8MCw0OCl8MDtWPWxhfFY7WD1DfFg7Tz1EZChWfDAsWHwwLEx8MCxPfDApfDA7TD1DO3dhPU9ed2E7dmE9TF52YTtsYT1HZCh3YXwwLHZhfDAsNjMpfDA7bWE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtsYT12YXxsYTttYT1DfG1hO2NhPURkKGp8MCxZfDAsdnwwLGNhfDApfDA7Y2E9RGQoY2F8MCxDfDAsbGF8MCxtYXwwKXwwO3Y9QzthYT1jYV5hYTtiYT12XmJhO1E9RGQoYmF8MCxhYXwwLFR8MCxRfDApfDA7VD1DO2xhPVFebGE7bWE9VF5tYTt2YT1HZChsYXwwLG1hfDAsMjQpfDA7d2E9QzttYT1IZChsYXwwLG1hfDAsNDApfDA7dmE9bWF8dmE7d2E9Q3x3YTt2PURkKFJ8MCxQfDAsY2F8MCx2fDApfDA7dj1EZCh2fDAsQ3wwLHZhfDAsd2F8MCl8MDtjYT1DO2JhPXZeYmE7YWE9Y2FeYWE7bWE9R2QoYmF8MCxhYXwwLDE2KXwwO2xhPUM7YWE9SGQoYmF8MCxhYXwwLDQ4KXwwO21hPWFhfG1hO2xhPUN8bGE7VD1EZChtYXwwLGxhfDAsUXwwLFR8MCl8MDtRPUM7dmE9VF52YTt3YT1RXndhO2FhPUdkKHZhfDAsd2F8MCw2Myl8MDtiYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO2FhPXdhfGFhO2JhPUN8YmE7b2E9RGQoaGF8MCxpYXwwLG5hfDAsb2F8MCl8MDtvYT1EZChvYXwwLEN8MCxIfDAsRnwwKXwwO25hPUM7Wj1aXm9hO189X15uYTtMPURkKF98MCxafDAsT3wwLEx8MCl8MDtPPUM7aGE9TF5oYTtpYT1PXmlhO3dhPUdkKGhhfDAsaWF8MCwyNCl8MDt2YT1DO2lhPUhkKGhhfDAsaWF8MCw0MCl8MDt3YT1pYXx3YTt2YT1DfHZhO25hPURkKG58MCxyfDAsb2F8MCxuYXwwKXwwO25hPURkKG5hfDAsQ3wwLHdhfDAsdmF8MCl8MDtvYT1DO189bmFeXztaPW9hXlo7aWE9R2QoX3wwLFp8MCwxNil8MDtoYT1DO1o9SGQoX3wwLFp8MCw0OCl8MDtpYT1afGlhO2hhPUN8aGE7Tz1EZChpYXwwLGhhfDAsTHwwLE98MCl8MDtMPUM7d2E9T153YTt2YT1MXnZhO1o9R2Qod2F8MCx2YXwwLDYzKXwwO189Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtaPXZhfFo7Xz1DfF87a2E9RGQodGF8MCx1YXwwLGphfDAsa2F8MCl8MDtrYT1EZChrYXwwLEN8MCx0fDAseHwwKXwwO2phPUM7Vj1WXmthO1g9WF5qYTtHPURkKFh8MCxWfDAsSnwwLEd8MCl8MDtKPUM7dGE9R150YTt1YT1KXnVhO3ZhPUdkKHRhfDAsdWF8MCwyNCl8MDt3YT1DO3VhPUhkKHRhfDAsdWF8MCw0MCl8MDt2YT11YXx2YTt3YT1DfHdhO2phPURkKHB8MCwkfDAsa2F8MCxqYXwwKXwwO2phPURkKGphfDAsQ3wwLHZhfDAsd2F8MCl8MDtrYT1DO1g9amFeWDtWPWthXlY7dWE9R2QoWHwwLFZ8MCwxNil8MDt0YT1DO1Y9SGQoWHwwLFZ8MCw0OCl8MDt1YT1WfHVhO3RhPUN8dGE7Sj1EZCh1YXwwLHRhfDAsR3wwLEp8MCl8MDtHPUM7dmE9Sl52YTt3YT1HXndhO1Y9R2QodmF8MCx3YXwwLDYzKXwwO1g9Qzt3YT1IZCh2YXwwLHdhfDAsMSl8MDtWPXdhfFY7WD1DfFg7Z2E9RGQocGF8MCxxYXwwLGZhfDAsZ2F8MCl8MDtnYT1EZChnYXwwLEN8MCxtfDAsb3wwKXwwO2ZhPUM7ZGE9ZGFeZ2E7ZWE9ZWFeZmE7ej1EZChlYXwwLGRhfDAsRXwwLHp8MCl8MDtFPUM7cGE9el5wYTtxYT1FXnFhO3dhPUdkKHBhfDAscWF8MCwyNCl8MDt2YT1DO3FhPUhkKHBhfDAscWF8MCw0MCl8MDt3YT1xYXx3YTt2YT1DfHZhO2ZhPURkKHl8MCxBfDAsZ2F8MCxmYXwwKXwwO2ZhPURkKGZhfDAsQ3wwLHdhfDAsdmF8MCl8MDtnYT1DO2VhPWZhXmVhO2RhPWdhXmRhO3FhPUdkKGVhfDAsZGF8MCwxNil8MDtwYT1DO2RhPUhkKGVhfDAsZGF8MCw0OCl8MDtxYT1kYXxxYTtwYT1DfHBhO0U9RGQocWF8MCxwYXwwLHp8MCxFfDApfDA7ej1DO3dhPUVed2E7dmE9el52YTtkYT1HZCh3YXwwLHZhfDAsNjMpfDA7ZWE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtkYT12YXxkYTtlYT1DfGVhO2NhPURkKFp8MCxffDAsdnwwLGNhfDApfDA7Y2E9RGQoY2F8MCxDfDAscmF8MCxzYXwwKXwwO3Y9QztxYT1xYV5jYTtwYT1wYV52O0c9RGQocGF8MCxxYXwwLEp8MCxHfDApfDA7Sj1DO1o9R15aO189Sl5fO3ZhPUdkKFp8MCxffDAsMjQpfDA7d2E9QztfPUhkKFp8MCxffDAsNDApfDA7dmE9X3x2YTt3YT1DfHdhO3Y9RGQoV3wwLFV8MCxjYXwwLHZ8MCl8MDt2PURkKHZ8MCxDfDAsdmF8MCx3YXwwKXwwO2NhPUM7cGE9dl5wYTtxYT1jYV5xYTtfPUdkKHBhfDAscWF8MCwxNil8MDtaPUM7cWE9SGQocGF8MCxxYXwwLDQ4KXwwO189cWF8XztaPUN8WjtKPURkKF98MCxafDAsR3wwLEp8MCl8MDtHPUM7dmE9Sl52YTt3YT1HXndhO3FhPUdkKHZhfDAsd2F8MCw2Myl8MDtwYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO3FhPXdhfHFhO3BhPUN8cGE7b2E9RGQoVnwwLFh8MCxuYXwwLG9hfDApfDA7b2E9RGQob2F8MCxDfDAsTXwwLEt8MCl8MDtuYT1DO21hPW1hXm9hO2xhPWxhXm5hO3o9RGQobGF8MCxtYXwwLEV8MCx6fDApfDA7RT1DO1Y9el5WO1g9RV5YO3dhPUdkKFZ8MCxYfDAsMjQpfDA7dmE9QztYPUhkKFZ8MCxYfDAsNDApfDA7d2E9WHx3YTt2YT1DfHZhO25hPURkKGV8MCxmfDAsb2F8MCxuYXwwKXwwO25hPURkKG5hfDAsQ3wwLHdhfDAsdmF8MCl8MDtvYT1DO2xhPW5hXmxhO21hPW9hXm1hO1g9R2QobGF8MCxtYXwwLDE2KXwwO1Y9QzttYT1IZChsYXwwLG1hfDAsNDgpfDA7WD1tYXxYO1Y9Q3xWO0U9RGQoWHwwLFZ8MCx6fDAsRXwwKXwwO3o9Qzt3YT1FXndhO3ZhPXpedmE7bWE9R2Qod2F8MCx2YXwwLDYzKXwwO2xhPUM7dmE9SGQod2F8MCx2YXwwLDEpfDA7bWE9dmF8bWE7bGE9Q3xsYTtrYT1EZChkYXwwLGVhfDAsamF8MCxrYXwwKXwwO2thPURkKGthfDAsQ3wwLHN8MCx1fDApfDA7amE9QztpYT1pYV5rYTtoYT1oYV5qYTtRPURkKGhhfDAsaWF8MCxUfDAsUXwwKXwwO1Q9QztkYT1RXmRhO2VhPVReZWE7dmE9R2QoZGF8MCxlYXwwLDI0KXwwO3dhPUM7ZWE9SGQoZGF8MCxlYXwwLDQwKXwwO3ZhPWVhfHZhO3dhPUN8d2E7amE9RGQoZ3wwLGl8MCxrYXwwLGphfDApfDA7amE9RGQoamF8MCxDfDAsdmF8MCx3YXwwKXwwO2thPUM7aGE9amFeaGE7aWE9a2FeaWE7ZWE9R2QoaGF8MCxpYXwwLDE2KXwwO2RhPUM7aWE9SGQoaGF8MCxpYXwwLDQ4KXwwO2VhPWlhfGVhO2RhPUN8ZGE7VD1EZChlYXwwLGRhfDAsUXwwLFR8MCl8MDtRPUM7dmE9VF52YTt3YT1RXndhO2lhPUdkKHZhfDAsd2F8MCw2Myl8MDtoYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO2lhPXdhfGlhO2hhPUN8aGE7Z2E9RGQoYWF8MCxiYXwwLGZhfDAsZ2F8MCl8MDtnYT1EZChnYXwwLEN8MCxofDAsbHwwKXwwO2ZhPUM7dWE9dWFeZ2E7dGE9dGFeZmE7TD1EZCh0YXwwLHVhfDAsT3wwLEx8MCl8MDtPPUM7YWE9TF5hYTtiYT1PXmJhO3dhPUdkKGFhfDAsYmF8MCwyNCl8MDt2YT1DO2JhPUhkKGFhfDAsYmF8MCw0MCl8MDt3YT1iYXx3YTt2YT1DfHZhO2ZhPURkKEJ8MCxTfDAsZ2F8MCxmYXwwKXwwO2ZhPURkKGZhfDAsQ3wwLHdhfDAsdmF8MCl8MDtnYT1DO3RhPWZhXnRhO3VhPWdhXnVhO2JhPUdkKHRhfDAsdWF8MCwxNil8MDthYT1DO3VhPUhkKHRhfDAsdWF8MCw0OCl8MDtiYT11YXxiYTthYT1DfGFhO089RGQoYmF8MCxhYXwwLEx8MCxPfDApfDA7TD1DO3dhPU9ed2E7dmE9TF52YTt1YT1HZCh3YXwwLHZhfDAsNjMpfDA7dGE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDt1YT12YXx1YTt0YT1DfHRhO2NhPURkKHR8MCx4fDAsdnwwLGNhfDApfDA7Y2E9RGQoY2F8MCxDfDAsdWF8MCx0YXwwKXwwO3Y9QztYPWNhXlg7Vj12XlY7UT1EZChWfDAsWHwwLFR8MCxRfDApfDA7VD1DO3VhPVFedWE7dGE9VF50YTt2YT1HZCh1YXwwLHRhfDAsMjQpfDA7d2E9Qzt0YT1IZCh1YXwwLHRhfDAsNDApfDA7dmE9dGF8dmE7d2E9Q3x3YTt2PURkKGV8MCxmfDAsY2F8MCx2fDApfDA7dj1EZCh2fDAsQ3wwLHZhfDAsd2F8MCl8MDtjYT1DO1Y9dl5WO1g9Y2FeWDt0YT1HZChWfDAsWHwwLDE2KXwwO3VhPUM7WD1IZChWfDAsWHwwLDQ4KXwwO3RhPVh8dGE7dWE9Q3x1YTtUPURkKHRhfDAsdWF8MCxRfDAsVHwwKXwwO1E9Qzt2YT1UXnZhO3dhPVFed2E7WD1HZCh2YXwwLHdhfDAsNjMpfDA7Vj1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO1g9d2F8WDtWPUN8VjtvYT1EZChxYXwwLHBhfDAsbmF8MCxvYXwwKXwwO29hPURkKG9hfDAsQ3wwLHN8MCx1fDApfDA7bmE9QztlYT1lYV5vYTtkYT1kYV5uYTtMPURkKGRhfDAsZWF8MCxPfDAsTHwwKXwwO089QztxYT1MXnFhO3BhPU9ecGE7d2E9R2QocWF8MCxwYXwwLDI0KXwwO3ZhPUM7cGE9SGQocWF8MCxwYXwwLDQwKXwwO3dhPXBhfHdhO3ZhPUN8dmE7bmE9RGQobXwwLG98MCxvYXwwLG5hfDApfDA7bmE9RGQobmF8MCxDfDAsd2F8MCx2YXwwKXwwO29hPUM7ZGE9bmFeZGE7ZWE9b2FeZWE7cGE9R2QoZGF8MCxlYXwwLDE2KXwwO3FhPUM7ZWE9SGQoZGF8MCxlYXwwLDQ4KXwwO3BhPWVhfHBhO3FhPUN8cWE7Tz1EZChwYXwwLHFhfDAsTHwwLE98MCl8MDtMPUM7d2E9T153YTt2YT1MXnZhO2VhPUdkKHdhfDAsdmF8MCw2Myl8MDtkYT1DO3ZhPUhkKHdhfDAsdmF8MCwxKXwwO2VhPXZhfGVhO2RhPUN8ZGE7a2E9RGQobWF8MCxsYXwwLGphfDAsa2F8MCl8MDtrYT1EZChrYXwwLEN8MCxSfDAsUHwwKXwwO2phPUM7YmE9YmFea2E7YWE9YWFeamE7Rz1EZChhYXwwLGJhfDAsSnwwLEd8MCl8MDtKPUM7bWE9R15tYTtsYT1KXmxhO3ZhPUdkKG1hfDAsbGF8MCwyNCl8MDt3YT1DO2xhPUhkKG1hfDAsbGF8MCw0MCl8MDt2YT1sYXx2YTt3YT1DfHdhO2phPURkKE18MCxLfDAsa2F8MCxqYXwwKXwwO2phPURkKGphfDAsQ3wwLHZhfDAsd2F8MCl8MDtrYT1DO2FhPWphXmFhO2JhPWthXmJhO2xhPUdkKGFhfDAsYmF8MCwxNil8MDttYT1DO2JhPUhkKGFhfDAsYmF8MCw0OCl8MDtsYT1iYXxsYTttYT1DfG1hO0o9RGQobGF8MCxtYXwwLEd8MCxKfDApfDA7Rz1DO3ZhPUpedmE7d2E9R153YTtiYT1HZCh2YXwwLHdhfDAsNjMpfDA7YWE9Qzt3YT1IZCh2YXwwLHdhfDAsMSl8MDtiYT13YXxiYTthYT1DfGFhO2dhPURkKGlhfDAsaGF8MCxmYXwwLGdhfDApfDA7Z2E9RGQoZ2F8MCxDfDAsZ3wwLGl8MCl8MDtmYT1DO189X15nYTtaPVpeZmE7ej1EZChafDAsX3wwLEV8MCx6fDApfDA7RT1DO2lhPXpeaWE7aGE9RV5oYTt3YT1HZChpYXwwLGhhfDAsMjQpfDA7dmE9QztoYT1IZChpYXwwLGhhfDAsNDApfDA7d2E9aGF8d2E7dmE9Q3x2YTtmYT1EZChofDAsbHwwLGdhfDAsZmF8MCl8MDtmYT1EZChmYXwwLEN8MCx3YXwwLHZhfDApfDA7Z2E9QztaPWZhXlo7Xz1nYV5fO2hhPUdkKFp8MCxffDAsMTYpfDA7aWE9QztfPUhkKFp8MCxffDAsNDgpfDA7aGE9X3xoYTtpYT1DfGlhO0U9RGQoaGF8MCxpYXwwLHp8MCxFfDApfDA7ej1DO3dhPUVed2E7dmE9el52YTtfPUdkKHdhfDAsdmF8MCw2Myl8MDtaPUM7dmE9SGQod2F8MCx2YXwwLDEpfDA7Xz12YXxfO1o9Q3xaO2NhPURkKGVhfDAsZGF8MCx2fDAsY2F8MCl8MDtjYT1EZChjYXwwLEN8MCxwfDAsJHwwKXwwO3Y9QztoYT1oYV5jYTtpYT1pYV52O0c9RGQoaWF8MCxoYXwwLEp8MCxHfDApfDA7Sj1DO2VhPUdeZWE7ZGE9Sl5kYTt2YT1HZChlYXwwLGRhfDAsMjQpfDA7d2E9QztkYT1IZChlYXwwLGRhfDAsNDApfDA7dmE9ZGF8dmE7d2E9Q3x3YTt2PURkKEJ8MCxTfDAsY2F8MCx2fDApfDA7dj1EZCh2fDAsQ3wwLHZhfDAsd2F8MCl8MDtjYT1DO2lhPXZeaWE7aGE9Y2FeaGE7ZGE9R2QoaWF8MCxoYXwwLDE2KXwwO2VhPUM7aGE9SGQoaWF8MCxoYXwwLDQ4KXwwO2RhPWhhfGRhO2VhPUN8ZWE7Sj1EZChkYXwwLGVhfDAsR3wwLEp8MCl8MDtHPUM7dmE9Sl52YTt3YT1HXndhO2hhPUdkKHZhfDAsd2F8MCw2Myl8MDtpYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO2hhPXdhfGhhO2lhPUN8aWE7b2E9RGQoYmF8MCxhYXwwLG5hfDAsb2F8MCl8MDtvYT1EZChvYXwwLEN8MCxufDAscnwwKXwwO25hPUM7dGE9dGFeb2E7dWE9dWFebmE7ej1EZCh1YXwwLHRhfDAsRXwwLHp8MCl8MDtFPUM7YmE9el5iYTthYT1FXmFhO3dhPUdkKGJhfDAsYWF8MCwyNCl8MDt2YT1DO2FhPUhkKGJhfDAsYWF8MCw0MCl8MDt3YT1hYXx3YTt2YT1DfHZhO25hPURkKEh8MCxGfDAsb2F8MCxuYXwwKXwwO25hPURkKG5hfDAsQ3wwLHdhfDAsdmF8MCl8MDtvYT1DO3VhPW5hXnVhO3RhPW9hXnRhO2FhPUdkKHVhfDAsdGF8MCwxNil8MDtiYT1DO3RhPUhkKHVhfDAsdGF8MCw0OCl8MDthYT10YXxhYTtiYT1DfGJhO0U9RGQoYWF8MCxiYXwwLHp8MCxFfDApfDA7ej1DO3dhPUVed2E7dmE9el52YTt0YT1HZCh3YXwwLHZhfDAsNjMpfDA7dWE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDt0YT12YXx0YTt1YT1DfHVhO2thPURkKF98MCxafDAsamF8MCxrYXwwKXwwO2thPURkKGthfDAsQ3wwLHl8MCxBfDApfDA7amE9QztwYT1wYV5rYTtxYT1xYV5qYTtRPURkKHFhfDAscGF8MCxUfDAsUXwwKXwwO1Q9QztfPVFeXztaPVReWjt2YT1HZChffDAsWnwwLDI0KXwwO3dhPUM7Wj1IZChffDAsWnwwLDQwKXwwO3ZhPVp8dmE7d2E9Q3x3YTtqYT1EZChyYXwwLHNhfDAsa2F8MCxqYXwwKXwwO2phPURkKGphfDAsQ3wwLHZhfDAsd2F8MCl8MDtrYT1DO3FhPWphXnFhO3BhPWthXnBhO1o9R2QocWF8MCxwYXwwLDE2KXwwO189QztwYT1IZChxYXwwLHBhfDAsNDgpfDA7Wj1wYXxaO189Q3xfO1Q9RGQoWnwwLF98MCxRfDAsVHwwKXwwO1E9Qzt2YT1UXnZhO3dhPVFed2E7cGE9R2QodmF8MCx3YXwwLDYzKXwwO3FhPUM7d2E9SGQodmF8MCx3YXwwLDEpfDA7cGE9d2F8cGE7cWE9Q3xxYTtnYT1EZChYfDAsVnwwLGZhfDAsZ2F8MCl8MDtnYT1EZChnYXwwLEN8MCxXfDAsVXwwKXwwO2ZhPUM7bGE9bGFeZ2E7bWE9bWFeZmE7TD1EZChtYXwwLGxhfDAsT3wwLEx8MCl8MDtPPUM7WD1MXlg7Vj1PXlY7d2E9R2QoWHwwLFZ8MCwyNCl8MDt2YT1DO1Y9SGQoWHwwLFZ8MCw0MCl8MDt3YT1WfHdhO3ZhPUN8dmE7ZmE9RGQoanwwLFl8MCxnYXwwLGZhfDApfDA7ZmE9RGQoZmF8MCxDfDAsd2F8MCx2YXwwKXwwO2dhPUM7bWE9ZmFebWE7bGE9Z2FebGE7Vj1HZChtYXwwLGxhfDAsMTYpfDA7WD1DO2xhPUhkKG1hfDAsbGF8MCw0OCl8MDtWPWxhfFY7WD1DfFg7Tz1EZChWfDAsWHwwLEx8MCxPfDApfDA7TD1DO3dhPU9ed2E7dmE9TF52YTtsYT1HZCh3YXwwLHZhfDAsNjMpfDA7bWE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtsYT12YXxsYTttYT1DfG1hO2NhPURkKGV8MCxmfDAsdnwwLGNhfDApfDA7Y2E9RGQoY2F8MCxDfDAsbGF8MCxtYXwwKXwwO3Y9QzthYT1jYV5hYTtiYT12XmJhO1E9RGQoYmF8MCxhYXwwLFR8MCxRfDApfDA7VD1DO2xhPVFebGE7bWE9VF5tYTt2YT1HZChsYXwwLG1hfDAsMjQpfDA7d2E9QzttYT1IZChsYXwwLG1hfDAsNDApfDA7dmE9bWF8dmE7d2E9Q3x3YTt2PURkKEh8MCxGfDAsY2F8MCx2fDApfDA7dj1EZCh2fDAsQ3wwLHZhfDAsd2F8MCl8MDtjYT1DO2JhPXZeYmE7YWE9Y2FeYWE7bWE9R2QoYmF8MCxhYXwwLDE2KXwwO2xhPUM7YWE9SGQoYmF8MCxhYXwwLDQ4KXwwO21hPWFhfG1hO2xhPUN8bGE7VD1EZChtYXwwLGxhfDAsUXwwLFR8MCl8MDtRPUM7dmE9VF52YTt3YT1RXndhO2FhPUdkKHZhfDAsd2F8MCw2Myl8MDtiYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO2FhPXdhfGFhO2JhPUN8YmE7b2E9RGQoaGF8MCxpYXwwLG5hfDAsb2F8MCl8MDtvYT1EZChvYXwwLEN8MCxXfDAsVXwwKXwwO25hPUM7Wj1aXm9hO189X15uYTtMPURkKF98MCxafDAsT3wwLEx8MCl8MDtPPUM7aGE9TF5oYTtpYT1PXmlhO3dhPUdkKGhhfDAsaWF8MCwyNCl8MDt2YT1DO2lhPUhkKGhhfDAsaWF8MCw0MCl8MDt3YT1pYXx3YTt2YT1DfHZhO25hPURkKHl8MCxBfDAsb2F8MCxuYXwwKXwwO25hPURkKG5hfDAsQ3wwLHdhfDAsdmF8MCl8MDtvYT1DO189bmFeXztaPW9hXlo7aWE9R2QoX3wwLFp8MCwxNil8MDtoYT1DO1o9SGQoX3wwLFp8MCw0OCl8MDtpYT1afGlhO2hhPUN8aGE7Tz1EZChpYXwwLGhhfDAsTHwwLE98MCl8MDtMPUM7d2E9T153YTt2YT1MXnZhO1o9R2Qod2F8MCx2YXwwLDYzKXwwO189Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtaPXZhfFo7Xz1DfF87a2E9RGQodGF8MCx1YXwwLGphfDAsa2F8MCl8MDtrYT1EZChrYXwwLEN8MCxyYXwwLHNhfDApfDA7amE9QztWPVZea2E7WD1YXmphO0c9RGQoWHwwLFZ8MCxKfDAsR3wwKXwwO0o9Qzt0YT1HXnRhO3VhPUpedWE7dmE9R2QodGF8MCx1YXwwLDI0KXwwO3dhPUM7dWE9SGQodGF8MCx1YXwwLDQwKXwwO3ZhPXVhfHZhO3dhPUN8d2E7amE9RGQoQnwwLFN8MCxrYXwwLGphfDApfDA7amE9RGQoamF8MCxDfDAsdmF8MCx3YXwwKXwwO2thPUM7WD1qYV5YO1Y9a2FeVjt1YT1HZChYfDAsVnwwLDE2KXwwO3RhPUM7Vj1IZChYfDAsVnwwLDQ4KXwwO3VhPVZ8dWE7dGE9Q3x0YTtKPURkKHVhfDAsdGF8MCxHfDAsSnwwKXwwO0c9Qzt2YT1KXnZhO3dhPUded2E7Vj1HZCh2YXwwLHdhfDAsNjMpfDA7WD1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO1Y9d2F8VjtYPUN8WDtnYT1EZChwYXwwLHFhfDAsZmF8MCxnYXwwKXwwO2dhPURkKGdhfDAsQ3wwLHB8MCwkfDApfDA7ZmE9QztkYT1kYV5nYTtlYT1lYV5mYTt6PURkKGVhfDAsZGF8MCxFfDAsenwwKXwwO0U9QztwYT16XnBhO3FhPUVecWE7d2E9R2QocGF8MCxxYXwwLDI0KXwwO3ZhPUM7cWE9SGQocGF8MCxxYXwwLDQwKXwwO3dhPXFhfHdhO3ZhPUN8dmE7ZmE9RGQobXwwLG98MCxnYXwwLGZhfDApfDA7ZmE9RGQoZmF8MCxDfDAsd2F8MCx2YXwwKXwwO2dhPUM7ZWE9ZmFeZWE7ZGE9Z2FeZGE7cWE9R2QoZWF8MCxkYXwwLDE2KXwwO3BhPUM7ZGE9SGQoZWF8MCxkYXwwLDQ4KXwwO3FhPWRhfHFhO3BhPUN8cGE7RT1EZChxYXwwLHBhfDAsenwwLEV8MCl8MDt6PUM7d2E9RV53YTt2YT16XnZhO2RhPUdkKHdhfDAsdmF8MCw2Myl8MDtlYT1DO3ZhPUhkKHdhfDAsdmF8MCwxKXwwO2RhPXZhfGRhO2VhPUN8ZWE7Y2E9RGQoWnwwLF98MCx2fDAsY2F8MCl8MDtjYT1EZChjYXwwLEN8MCxSfDAsUHwwKXwwO3Y9QztxYT1xYV5jYTtwYT1wYV52O0c9RGQocGF8MCxxYXwwLEp8MCxHfDApfDA7Sj1DO1o9R15aO189Sl5fO3ZhPUdkKFp8MCxffDAsMjQpfDA7d2E9QztfPUhkKFp8MCxffDAsNDApfDA7dmE9X3x2YTt3YT1DfHdhO3Y9RGQobnwwLHJ8MCxjYXwwLHZ8MCl8MDt2PURkKHZ8MCxDfDAsdmF8MCx3YXwwKXwwO2NhPUM7cGE9dl5wYTtxYT1jYV5xYTtfPUdkKHBhfDAscWF8MCwxNil8MDtaPUM7cWE9SGQocGF8MCxxYXwwLDQ4KXwwO189cWF8XztaPUN8WjtKPURkKF98MCxafDAsR3wwLEp8MCl8MDtHPUM7dmE9Sl52YTt3YT1HXndhO3FhPUdkKHZhfDAsd2F8MCw2Myl8MDtwYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO3FhPXdhfHFhO3BhPUN8cGE7b2E9RGQoVnwwLFh8MCxuYXwwLG9hfDApfDA7b2E9RGQob2F8MCxDfDAsc3wwLHV8MCl8MDtuYT1DO21hPW1hXm9hO2xhPWxhXm5hO3o9RGQobGF8MCxtYXwwLEV8MCx6fDApfDA7RT1DO1Y9el5WO1g9RV5YO3dhPUdkKFZ8MCxYfDAsMjQpfDA7dmE9QztYPUhkKFZ8MCxYfDAsNDApfDA7d2E9WHx3YTt2YT1DfHZhO25hPURkKGh8MCxsfDAsb2F8MCxuYXwwKXwwO25hPURkKG5hfDAsQ3wwLHdhfDAsdmF8MCl8MDtvYT1DO2xhPW5hXmxhO21hPW9hXm1hO1g9R2QobGF8MCxtYXwwLDE2KXwwO1Y9QzttYT1IZChsYXwwLG1hfDAsNDgpfDA7WD1tYXxYO1Y9Q3xWO0U9RGQoWHwwLFZ8MCx6fDAsRXwwKXwwO3o9Qzt3YT1FXndhO3ZhPXpedmE7bWE9R2Qod2F8MCx2YXwwLDYzKXwwO2xhPUM7dmE9SGQod2F8MCx2YXwwLDEpfDA7bWE9dmF8bWE7bGE9Q3xsYTtrYT1EZChkYXwwLGVhfDAsamF8MCxrYXwwKXwwO2thPURkKGthfDAsQ3wwLGp8MCxZfDApfDA7amE9QztpYT1pYV5rYTtoYT1oYV5qYTtRPURkKGhhfDAsaWF8MCxUfDAsUXwwKXwwO1Q9QztkYT1RXmRhO2VhPVReZWE7dmE9R2QoZGF8MCxlYXwwLDI0KXwwO3dhPUM7ZWE9SGQoZGF8MCxlYXwwLDQwKXwwO3ZhPWVhfHZhO3dhPUN8d2E7amE9RGQodHwwLHh8MCxrYXwwLGphfDApfDA7amE9RGQoamF8MCxDfDAsdmF8MCx3YXwwKXwwO2thPUM7aGE9amFeaGE7aWE9a2FeaWE7ZWE9R2QoaGF8MCxpYXwwLDE2KXwwO2RhPUM7aWE9SGQoaGF8MCxpYXwwLDQ4KXwwO2VhPWlhfGVhO2RhPUN8ZGE7VD1EZChlYXwwLGRhfDAsUXwwLFR8MCl8MDtRPUM7dmE9VF52YTt3YT1RXndhO2lhPUdkKHZhfDAsd2F8MCw2Myl8MDtoYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO2lhPXdhfGlhO2hhPUN8aGE7Z2E9RGQoYWF8MCxiYXwwLGZhfDAsZ2F8MCl8MDtnYT1EZChnYXwwLEN8MCxnfDAsaXwwKXwwO2ZhPUM7dWE9dWFeZ2E7dGE9dGFeZmE7TD1EZCh0YXwwLHVhfDAsT3wwLEx8MCl8MDtPPUM7YWE9TF5hYTtiYT1PXmJhO3dhPUdkKGFhfDAsYmF8MCwyNCl8MDt2YT1DO2JhPUhkKGFhfDAsYmF8MCw0MCl8MDt3YT1iYXx3YTt2YT1DfHZhO2ZhPURkKE18MCxLfDAsZ2F8MCxmYXwwKXwwO2ZhPURkKGZhfDAsQ3wwLHdhfDAsdmF8MCl8MDtnYT1DO3RhPWZhXnRhO3VhPWdhXnVhO2JhPUdkKHRhfDAsdWF8MCwxNil8MDthYT1DO3VhPUhkKHRhfDAsdWF8MCw0OCl8MDtiYT11YXxiYTthYT1DfGFhO089RGQoYmF8MCxhYXwwLEx8MCxPfDApfDA7TD1DO3dhPU9ed2E7dmE9TF52YTt1YT1HZCh3YXwwLHZhfDAsNjMpfDA7dGE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDt1YT12YXx1YTt0YT1DfHRhO2NhPURkKEJ8MCxTfDAsdnwwLGNhfDApfDA7Y2E9RGQoY2F8MCxDfDAsdWF8MCx0YXwwKXwwO3Y9QztYPWNhXlg7Vj12XlY7UT1EZChWfDAsWHwwLFR8MCxRfDApfDA7VD1DO3VhPVFedWE7dGE9VF50YTt2YT1HZCh1YXwwLHRhfDAsMjQpfDA7d2E9Qzt0YT1IZCh1YXwwLHRhfDAsNDApfDA7dmE9dGF8dmE7d2E9Q3x3YTt2PURkKE18MCxLfDAsY2F8MCx2fDApfDA7dj1EZCh2fDAsQ3wwLHZhfDAsd2F8MCl8MDtjYT1DO1Y9dl5WO1g9Y2FeWDt0YT1HZChWfDAsWHwwLDE2KXwwO3VhPUM7WD1IZChWfDAsWHwwLDQ4KXwwO3RhPVh8dGE7dWE9Q3x1YTtUPURkKHRhfDAsdWF8MCxRfDAsVHwwKXwwO1E9Qzt2YT1UXnZhO3dhPVFed2E7WD1HZCh2YXwwLHdhfDAsNjMpfDA7Vj1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO1g9d2F8WDtWPUN8VjtvYT1EZChxYXwwLHBhfDAsbmF8MCxvYXwwKXwwO29hPURkKG9hfDAsQ3wwLG58MCxyfDApfDA7bmE9QztlYT1lYV5vYTtkYT1kYV5uYTtMPURkKGRhfDAsZWF8MCxPfDAsTHwwKXwwO089QztxYT1MXnFhO3BhPU9ecGE7d2E9R2QocWF8MCxwYXwwLDI0KXwwO3ZhPUM7cGE9SGQocWF8MCxwYXwwLDQwKXwwO3dhPXBhfHdhO3ZhPUN8dmE7bmE9RGQocmF8MCxzYXwwLG9hfDAsbmF8MCl8MDtuYT1EZChuYXwwLEN8MCx3YXwwLHZhfDApfDA7b2E9QztkYT1uYV5kYTtlYT1vYV5lYTtwYT1HZChkYXwwLGVhfDAsMTYpfDA7cWE9QztlYT1IZChkYXwwLGVhfDAsNDgpfDA7cGE9ZWF8cGE7cWE9Q3xxYTtPPURkKHBhfDAscWF8MCxMfDAsT3wwKXwwO0w9Qzt3YT1PXndhO3ZhPUxedmE7ZWE9R2Qod2F8MCx2YXwwLDYzKXwwO2RhPUM7dmE9SGQod2F8MCx2YXwwLDEpfDA7ZWE9dmF8ZWE7ZGE9Q3xkYTtrYT1EZChtYXwwLGxhfDAsamF8MCxrYXwwKXwwO2thPURkKGthfDAsQ3wwLGV8MCxmfDApfDA7amE9QztiYT1iYV5rYTthYT1hYV5qYTtHPURkKGFhfDAsYmF8MCxKfDAsR3wwKXwwO0o9QzttYT1HXm1hO2xhPUpebGE7dmE9R2QobWF8MCxsYXwwLDI0KXwwO3dhPUM7bGE9SGQobWF8MCxsYXwwLDQwKXwwO3ZhPWxhfHZhO3dhPUN8d2E7amE9RGQoV3wwLFV8MCxrYXwwLGphfDApfDA7amE9RGQoamF8MCxDfDAsdmF8MCx3YXwwKXwwO2thPUM7YWE9amFeYWE7YmE9a2FeYmE7bGE9R2QoYWF8MCxiYXwwLDE2KXwwO21hPUM7YmE9SGQoYWF8MCxiYXwwLDQ4KXwwO2xhPWJhfGxhO21hPUN8bWE7Sj1EZChsYXwwLG1hfDAsR3wwLEp8MCl8MDtHPUM7dmE9Sl52YTt3YT1HXndhO2JhPUdkKHZhfDAsd2F8MCw2Myl8MDthYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO2JhPXdhfGJhO2FhPUN8YWE7Z2E9RGQoaWF8MCxoYXwwLGZhfDAsZ2F8MCl8MDtnYT1EZChnYXwwLEN8MCxofDAsbHwwKXwwO2ZhPUM7Xz1fXmdhO1o9Wl5mYTt6PURkKFp8MCxffDAsRXwwLHp8MCl8MDtFPUM7aWE9el5pYTtoYT1FXmhhO3dhPUdkKGlhfDAsaGF8MCwyNCl8MDt2YT1DO2hhPUhkKGlhfDAsaGF8MCw0MCl8MDt3YT1oYXx3YTt2YT1DfHZhO2ZhPURkKGp8MCxZfDAsZ2F8MCxmYXwwKXwwO2ZhPURkKGZhfDAsQ3wwLHdhfDAsdmF8MCl8MDtnYT1DO1o9ZmFeWjtfPWdhXl87aGE9R2QoWnwwLF98MCwxNil8MDtpYT1DO189SGQoWnwwLF98MCw0OCl8MDtoYT1ffGhhO2lhPUN8aWE7RT1EZChoYXwwLGlhfDAsenwwLEV8MCl8MDt6PUM7d2E9RV53YTt2YT16XnZhO189R2Qod2F8MCx2YXwwLDYzKXwwO1o9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtfPXZhfF87Wj1DfFo7Y2E9RGQoZWF8MCxkYXwwLHZ8MCxjYXwwKXwwO2NhPURkKGNhfDAsQ3wwLEh8MCxGfDApfDA7dj1DO2hhPWhhXmNhO2lhPWlhXnY7Rz1EZChpYXwwLGhhfDAsSnwwLEd8MCl8MDtKPUM7ZWE9R15lYTtkYT1KXmRhO3ZhPUdkKGVhfDAsZGF8MCwyNCl8MDt3YT1DO2RhPUhkKGVhfDAsZGF8MCw0MCl8MDt2YT1kYXx2YTt3YT1DfHdhO3Y9RGQoUnwwLFB8MCxjYXwwLHZ8MCl8MDt2PURkKHZ8MCxDfDAsdmF8MCx3YXwwKXwwO2NhPUM7aWE9dl5pYTtoYT1jYV5oYTtkYT1HZChpYXwwLGhhfDAsMTYpfDA7ZWE9QztoYT1IZChpYXwwLGhhfDAsNDgpfDA7ZGE9aGF8ZGE7ZWE9Q3xlYTtKPURkKGRhfDAsZWF8MCxHfDAsSnwwKXwwO0c9Qzt2YT1KXnZhO3dhPUded2E7aGE9R2QodmF8MCx3YXwwLDYzKXwwO2lhPUM7d2E9SGQodmF8MCx3YXwwLDEpfDA7aGE9d2F8aGE7aWE9Q3xpYTtvYT1EZChiYXwwLGFhfDAsbmF8MCxvYXwwKXwwO29hPURkKG9hfDAsQ3wwLHl8MCxBfDApfDA7bmE9Qzt0YT10YV5vYTt1YT11YV5uYTt6PURkKHVhfDAsdGF8MCxFfDAsenwwKXwwO0U9QztiYT16XmJhO2FhPUVeYWE7d2E9R2QoYmF8MCxhYXwwLDI0KXwwO3ZhPUM7YWE9SGQoYmF8MCxhYXwwLDQwKXwwO3dhPWFhfHdhO3ZhPUN8dmE7bmE9RGQocHwwLCR8MCxvYXwwLG5hfDApfDA7bmE9RGQobmF8MCxDfDAsd2F8MCx2YXwwKXwwO29hPUM7dWE9bmFedWE7dGE9b2FedGE7YWE9R2QodWF8MCx0YXwwLDE2KXwwO2JhPUM7dGE9SGQodWF8MCx0YXwwLDQ4KXwwO2FhPXRhfGFhO2JhPUN8YmE7RT1EZChhYXwwLGJhfDAsenwwLEV8MCl8MDt6PUM7d2E9RV53YTt2YT16XnZhO3RhPUdkKHdhfDAsdmF8MCw2Myl8MDt1YT1DO3ZhPUhkKHdhfDAsdmF8MCwxKXwwO3RhPXZhfHRhO3VhPUN8dWE7a2E9RGQoX3wwLFp8MCxqYXwwLGthfDApfDA7a2E9RGQoa2F8MCxDfDAsZ3wwLGl8MCl8MDtqYT1DO3BhPXBhXmthO3FhPXFhXmphO1E9RGQocWF8MCxwYXwwLFR8MCxRfDApfDA7VD1DO189UV5fO1o9VF5aO3ZhPUdkKF98MCxafDAsMjQpfDA7d2E9QztaPUhkKF98MCxafDAsNDApfDA7dmE9Wnx2YTt3YT1DfHdhO2phPURkKHN8MCx1fDAsa2F8MCxqYXwwKXwwO2phPURkKGphfDAsQ3wwLHZhfDAsd2F8MCl8MDtrYT1DO3FhPWphXnFhO3BhPWthXnBhO1o9R2QocWF8MCxwYXwwLDE2KXwwO189QztwYT1IZChxYXwwLHBhfDAsNDgpfDA7Wj1wYXxaO189Q3xfO1Q9RGQoWnwwLF98MCxRfDAsVHwwKXwwO1E9Qzt2YT1UXnZhO3dhPVFed2E7cGE9R2QodmF8MCx3YXwwLDYzKXwwO3FhPUM7d2E9SGQodmF8MCx3YXwwLDEpfDA7cGE9d2F8cGE7cWE9Q3xxYTtnYT1EZChYfDAsVnwwLGZhfDAsZ2F8MCl8MDtnYT1EZChnYXwwLEN8MCx0fDAseHwwKXwwO2ZhPUM7bGE9bGFeZ2E7bWE9bWFeZmE7TD1EZChtYXwwLGxhfDAsT3wwLEx8MCl8MDtPPUM7WD1MXlg7Vj1PXlY7d2E9R2QoWHwwLFZ8MCwyNCl8MDt2YT1DO1Y9SGQoWHwwLFZ8MCw0MCl8MDt3YT1WfHdhO3ZhPUN8dmE7ZmE9RGQobXwwLG98MCxnYXwwLGZhfDApfDA7ZmE9RGQoZmF8MCxDfDAsd2F8MCx2YXwwKXwwO2dhPUM7bWE9ZmFebWE7bGE9Z2FebGE7Vj1HZChtYXwwLGxhfDAsMTYpfDA7WD1DO2xhPUhkKG1hfDAsbGF8MCw0OCl8MDtWPWxhfFY7WD1DfFg7Tz1EZChWfDAsWHwwLEx8MCxPfDApfDA7TD1DO3dhPU9ed2E7dmE9TF52YTtsYT1HZCh3YXwwLHZhfDAsNjMpfDA7bWE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtsYT12YXxsYTttYT1DfG1hO2NhPURkKHN8MCx1fDAsdnwwLGNhfDApfDA7Y2E9RGQoY2F8MCxDfDAsbGF8MCxtYXwwKXwwO3Y9QzthYT1jYV5hYTtiYT12XmJhO1E9RGQoYmF8MCxhYXwwLFR8MCxRfDApfDA7VD1DO2xhPVFebGE7bWE9VF5tYTt2YT1HZChsYXwwLG1hfDAsMjQpfDA7d2E9QzttYT1IZChsYXwwLG1hfDAsNDApfDA7dmE9bWF8dmE7d2E9Q3x3YTt2PURkKHl8MCxBfDAsY2F8MCx2fDApfDA7dj1EZCh2fDAsQ3wwLHZhfDAsd2F8MCl8MDtjYT1DO2JhPXZeYmE7YWE9Y2FeYWE7bWE9R2QoYmF8MCxhYXwwLDE2KXwwO2xhPUM7YWE9SGQoYmF8MCxhYXwwLDQ4KXwwO21hPWFhfG1hO2xhPUN8bGE7VD1EZChtYXwwLGxhfDAsUXwwLFR8MCl8MDtRPUM7dmE9VF52YTt3YT1RXndhO2FhPUdkKHZhfDAsd2F8MCw2Myl8MDtiYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO2FhPXdhfGFhO2JhPUN8YmE7b2E9RGQoaGF8MCxpYXwwLG5hfDAsb2F8MCl8MDtvYT1EZChvYXwwLEN8MCxyYXwwLHNhfDApfDA7bmE9QztaPVpeb2E7Xz1fXm5hO0w9RGQoX3wwLFp8MCxPfDAsTHwwKXwwO089QztoYT1MXmhhO2lhPU9eaWE7d2E9R2QoaGF8MCxpYXwwLDI0KXwwO3ZhPUM7aWE9SGQoaGF8MCxpYXwwLDQwKXwwO3dhPWlhfHdhO3ZhPUN8dmE7bmE9RGQoanwwLFl8MCxvYXwwLG5hfDApfDA7bmE9RGQobmF8MCxDfDAsd2F8MCx2YXwwKXwwO29hPUM7Xz1uYV5fO1o9b2FeWjtpYT1HZChffDAsWnwwLDE2KXwwO2hhPUM7Wj1IZChffDAsWnwwLDQ4KXwwO2lhPVp8aWE7aGE9Q3xoYTtPPURkKGlhfDAsaGF8MCxMfDAsT3wwKXwwO0w9Qzt3YT1PXndhO3ZhPUxedmE7Wj1HZCh3YXwwLHZhfDAsNjMpfDA7Xz1DO3ZhPUhkKHdhfDAsdmF8MCwxKXwwO1o9dmF8WjtfPUN8XztrYT1EZCh0YXwwLHVhfDAsamF8MCxrYXwwKXwwO2thPURkKGthfDAsQ3wwLE18MCxLfDApfDA7amE9QztWPVZea2E7WD1YXmphO0c9RGQoWHwwLFZ8MCxKfDAsR3wwKXwwO0o9Qzt0YT1HXnRhO3VhPUpedWE7dmE9R2QodGF8MCx1YXwwLDI0KXwwO3dhPUM7dWE9SGQodGF8MCx1YXwwLDQwKXwwO3ZhPXVhfHZhO3dhPUN8d2E7amE9RGQoaHwwLGx8MCxrYXwwLGphfDApfDA7amE9RGQoamF8MCxDfDAsdmF8MCx3YXwwKXwwO2thPUM7WD1qYV5YO1Y9a2FeVjt1YT1HZChYfDAsVnwwLDE2KXwwO3RhPUM7Vj1IZChYfDAsVnwwLDQ4KXwwO3VhPVZ8dWE7dGE9Q3x0YTtKPURkKHVhfDAsdGF8MCxHfDAsSnwwKXwwO0c9Qzt2YT1KXnZhO3dhPUded2E7Vj1HZCh2YXwwLHdhfDAsNjMpfDA7WD1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO1Y9d2F8VjtYPUN8WDtnYT1EZChwYXwwLHFhfDAsZmF8MCxnYXwwKXwwO2dhPURkKGdhfDAsQ3wwLFJ8MCxQfDApfDA7ZmE9QztkYT1kYV5nYTtlYT1lYV5mYTt6PURkKGVhfDAsZGF8MCxFfDAsenwwKXwwO0U9QztwYT16XnBhO3FhPUVecWE7d2E9R2QocGF8MCxxYXwwLDI0KXwwO3ZhPUM7cWE9SGQocGF8MCxxYXwwLDQwKXwwO3dhPXFhfHdhO3ZhPUN8dmE7ZmE9RGQoZ3wwLGl8MCxnYXwwLGZhfDApfDA7ZmE9RGQoZmF8MCxDfDAsd2F8MCx2YXwwKXwwO2dhPUM7ZWE9ZmFeZWE7ZGE9Z2FeZGE7cWE9R2QoZWF8MCxkYXwwLDE2KXwwO3BhPUM7ZGE9SGQoZWF8MCxkYXwwLDQ4KXwwO3FhPWRhfHFhO3BhPUN8cGE7RT1EZChxYXwwLHBhfDAsenwwLEV8MCl8MDt6PUM7d2E9RV53YTt2YT16XnZhO2RhPUdkKHdhfDAsdmF8MCw2Myl8MDtlYT1DO3ZhPUhkKHdhfDAsdmF8MCwxKXwwO2RhPXZhfGRhO2VhPUN8ZWE7Y2E9RGQoWnwwLF98MCx2fDAsY2F8MCl8MDtjYT1EZChjYXwwLEN8MCxlfDAsZnwwKXwwO3Y9QztxYT1xYV5jYTtwYT1wYV52O0c9RGQocGF8MCxxYXwwLEp8MCxHfDApfDA7Sj1DO1o9R15aO189Sl5fO3ZhPUdkKFp8MCxffDAsMjQpfDA7d2E9QztfPUhkKFp8MCxffDAsNDApfDA7dmE9X3x2YTt3YT1DfHdhO3Y9RGQodHwwLHh8MCxjYXwwLHZ8MCl8MDt2PURkKHZ8MCxDfDAsdmF8MCx3YXwwKXwwO2NhPUM7cGE9dl5wYTtxYT1jYV5xYTtfPUdkKHBhfDAscWF8MCwxNil8MDtaPUM7cWE9SGQocGF8MCxxYXwwLDQ4KXwwO189cWF8XztaPUN8WjtKPURkKF98MCxafDAsR3wwLEp8MCl8MDtHPUM7dmE9Sl52YTt3YT1HXndhO3FhPUdkKHZhfDAsd2F8MCw2Myl8MDtwYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO3FhPXdhfHFhO3BhPUN8cGE7b2E9RGQoVnwwLFh8MCxuYXwwLG9hfDApfDA7b2E9RGQob2F8MCxDfDAsQnwwLFN8MCl8MDtuYT1DO21hPW1hXm9hO2xhPWxhXm5hO3o9RGQobGF8MCxtYXwwLEV8MCx6fDApfDA7RT1DO1Y9el5WO1g9RV5YO3dhPUdkKFZ8MCxYfDAsMjQpfDA7dmE9QztYPUhkKFZ8MCxYfDAsNDApfDA7d2E9WHx3YTt2YT1DfHZhO25hPURkKG58MCxyfDAsb2F8MCxuYXwwKXwwO25hPURkKG5hfDAsQ3wwLHdhfDAsdmF8MCl8MDtvYT1DO2xhPW5hXmxhO21hPW9hXm1hO1g9R2QobGF8MCxtYXwwLDE2KXwwO1Y9QzttYT1IZChsYXwwLG1hfDAsNDgpfDA7WD1tYXxYO1Y9Q3xWO0U9RGQoWHwwLFZ8MCx6fDAsRXwwKXwwO3o9Qzt3YT1FXndhO3ZhPXpedmE7bWE9R2Qod2F8MCx2YXwwLDYzKXwwO2xhPUM7dmE9SGQod2F8MCx2YXwwLDEpfDA7bWE9dmF8bWE7bGE9Q3xsYTtrYT1EZChkYXwwLGVhfDAsamF8MCxrYXwwKXwwO2thPURkKGthfDAsQ3wwLFd8MCxVfDApfDA7amE9QztpYT1pYV5rYTtoYT1oYV5qYTtRPURkKGhhfDAsaWF8MCxUfDAsUXwwKXwwO1Q9QztkYT1RXmRhO2VhPVReZWE7dmE9R2QoZGF8MCxlYXwwLDI0KXwwO3dhPUM7ZWE9SGQoZGF8MCxlYXwwLDQwKXwwO3ZhPWVhfHZhO3dhPUN8d2E7amE9RGQocHwwLCR8MCxrYXwwLGphfDApfDA7amE9RGQoamF8MCxDfDAsdmF8MCx3YXwwKXwwO2thPUM7aGE9amFeaGE7aWE9a2FeaWE7ZWE9R2QoaGF8MCxpYXwwLDE2KXwwO2RhPUM7aWE9SGQoaGF8MCxpYXwwLDQ4KXwwO2VhPWlhfGVhO2RhPUN8ZGE7VD1EZChlYXwwLGRhfDAsUXwwLFR8MCl8MDtRPUM7dmE9VF52YTt3YT1RXndhO2lhPUdkKHZhfDAsd2F8MCw2Myl8MDtoYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO2lhPXdhfGlhO2hhPUN8aGE7Z2E9RGQoYWF8MCxiYXwwLGZhfDAsZ2F8MCl8MDtnYT1EZChnYXwwLEN8MCxtfDAsb3wwKXwwO2ZhPUM7dWE9dWFeZ2E7dGE9dGFeZmE7TD1EZCh0YXwwLHVhfDAsT3wwLEx8MCl8MDtPPUM7YWE9TF5hYTtiYT1PXmJhO3dhPUdkKGFhfDAsYmF8MCwyNCl8MDt2YT1DO2JhPUhkKGFhfDAsYmF8MCw0MCl8MDt3YT1iYXx3YTt2YT1DfHZhO2ZhPURkKEh8MCxGfDAsZ2F8MCxmYXwwKXwwO2ZhPURkKGZhfDAsQ3wwLHdhfDAsdmF8MCl8MDtnYT1DO3RhPWZhXnRhO3VhPWdhXnVhO2JhPUdkKHRhfDAsdWF8MCwxNil8MDthYT1DO3VhPUhkKHRhfDAsdWF8MCw0OCl8MDtiYT11YXxiYTthYT1DfGFhO089RGQoYmF8MCxhYXwwLEx8MCxPfDApfDA7TD1DO3dhPU9ed2E7dmE9TF52YTt1YT1HZCh3YXwwLHZhfDAsNjMpfDA7dGE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDt1YT12YXx1YTt0YT1DfHRhO2NhPURkKG18MCxvfDAsdnwwLGNhfDApfDA7Y2E9RGQoY2F8MCxDfDAsdWF8MCx0YXwwKXwwO3Y9QztYPWNhXlg7Vj12XlY7UT1EZChWfDAsWHwwLFR8MCxRfDApfDA7VD1DO3VhPVFedWE7dGE9VF50YTt2YT1HZCh1YXwwLHRhfDAsMjQpfDA7d2E9Qzt0YT1IZCh1YXwwLHRhfDAsNDApfDA7dmE9dGF8dmE7d2E9Q3x3YTt2PURkKHR8MCx4fDAsY2F8MCx2fDApfDA7dj1EZCh2fDAsQ3wwLHZhfDAsd2F8MCl8MDtjYT1DO1Y9dl5WO1g9Y2FeWDt0YT1HZChWfDAsWHwwLDE2KXwwO3VhPUM7WD1IZChWfDAsWHwwLDQ4KXwwO3RhPVh8dGE7dWE9Q3x1YTtUPURkKHRhfDAsdWF8MCxRfDAsVHwwKXwwO1E9Qzt2YT1UXnZhO3dhPVFed2E7WD1HZCh2YXwwLHdhfDAsNjMpfDA7Vj1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO1g9d2F8WDtWPUN8VjtvYT1EZChxYXwwLHBhfDAsbmF8MCxvYXwwKXwwO29hPURkKG9hfDAsQ3wwLGd8MCxpfDApfDA7bmE9QztlYT1lYV5vYTtkYT1kYV5uYTtMPURkKGRhfDAsZWF8MCxPfDAsTHwwKXwwO089QztxYT1MXnFhO3BhPU9ecGE7d2E9R2QocWF8MCxwYXwwLDI0KXwwO3ZhPUM7cGE9SGQocWF8MCxwYXwwLDQwKXwwO3dhPXBhfHdhO3ZhPUN8dmE7bmE9RGQocHwwLCR8MCxvYXwwLG5hfDApfDA7bmE9RGQobmF8MCxDfDAsd2F8MCx2YXwwKXwwO29hPUM7ZGE9bmFeZGE7ZWE9b2FeZWE7cGE9R2QoZGF8MCxlYXwwLDE2KXwwO3FhPUM7ZWE9SGQoZGF8MCxlYXwwLDQ4KXwwO3BhPWVhfHBhO3FhPUN8cWE7Tz1EZChwYXwwLHFhfDAsTHwwLE98MCl8MDtMPUM7d2E9T153YTt2YT1MXnZhO2VhPUdkKHdhfDAsdmF8MCw2Myl8MDtkYT1DO3ZhPUhkKHdhfDAsdmF8MCwxKXwwO2VhPXZhfGVhO2RhPUN8ZGE7a2E9RGQobWF8MCxsYXwwLGphfDAsa2F8MCl8MDtrYT1EZChrYXwwLEN8MCxufDAscnwwKXwwO2phPUM7YmE9YmFea2E7YWE9YWFeamE7Rz1EZChhYXwwLGJhfDAsSnwwLEd8MCl8MDtKPUM7bWE9R15tYTtsYT1KXmxhO3ZhPUdkKG1hfDAsbGF8MCwyNCl8MDt3YT1DO2xhPUhkKG1hfDAsbGF8MCw0MCl8MDt2YT1sYXx2YTt3YT1DfHdhO2phPURkKHN8MCx1fDAsa2F8MCxqYXwwKXwwO2phPURkKGphfDAsQ3wwLHZhfDAsd2F8MCl8MDtrYT1DO2FhPWphXmFhO2JhPWthXmJhO2xhPUdkKGFhfDAsYmF8MCwxNil8MDttYT1DO2JhPUhkKGFhfDAsYmF8MCw0OCl8MDtsYT1iYXxsYTttYT1DfG1hO0o9RGQobGF8MCxtYXwwLEd8MCxKfDApfDA7Rz1DO3ZhPUpedmE7d2E9R153YTtiYT1HZCh2YXwwLHdhfDAsNjMpfDA7YWE9Qzt3YT1IZCh2YXwwLHdhfDAsMSl8MDtiYT13YXxiYTthYT1DfGFhO2dhPURkKGlhfDAsaGF8MCxmYXwwLGdhfDApfDA7Z2E9RGQoZ2F8MCxDfDAsV3wwLFV8MCl8MDtmYT1DO189X15nYTtaPVpeZmE7ej1EZChafDAsX3wwLEV8MCx6fDApfDA7RT1DO2lhPXpeaWE7aGE9RV5oYTt3YT1HZChpYXwwLGhhfDAsMjQpfDA7dmE9QztoYT1IZChpYXwwLGhhfDAsNDApfDA7d2E9aGF8d2E7dmE9Q3x2YTtmYT1EZChIfDAsRnwwLGdhfDAsZmF8MCl8MDtmYT1EZChmYXwwLEN8MCx3YXwwLHZhfDApfDA7Z2E9QztaPWZhXlo7Xz1nYV5fO2hhPUdkKFp8MCxffDAsMTYpfDA7aWE9QztfPUhkKFp8MCxffDAsNDgpfDA7aGE9X3xoYTtpYT1DfGlhO0U9RGQoaGF8MCxpYXwwLHp8MCxFfDApfDA7ej1DO3dhPUVed2E7dmE9el52YTtfPUdkKHdhfDAsdmF8MCw2Myl8MDtaPUM7dmE9SGQod2F8MCx2YXwwLDEpfDA7Xz12YXxfO1o9Q3xaO2NhPURkKGVhfDAsZGF8MCx2fDAsY2F8MCl8MDtjYT1EZChjYXwwLEN8MCx5fDAsQXwwKXwwO3Y9QztoYT1oYV5jYTtpYT1pYV52O0c9RGQoaWF8MCxoYXwwLEp8MCxHfDApfDA7Sj1DO2VhPUdeZWE7ZGE9Sl5kYTt2YT1HZChlYXwwLGRhfDAsMjQpfDA7d2E9QztkYT1IZChlYXwwLGRhfDAsNDApfDA7dmE9ZGF8dmE7d2E9Q3x3YTt2PURkKE18MCxLfDAsY2F8MCx2fDApfDA7dj1EZCh2fDAsQ3wwLHZhfDAsd2F8MCl8MDtjYT1DO2lhPXZeaWE7aGE9Y2FeaGE7ZGE9R2QoaWF8MCxoYXwwLDE2KXwwO2VhPUM7aGE9SGQoaWF8MCxoYXwwLDQ4KXwwO2RhPWhhfGRhO2VhPUN8ZWE7Sj1EZChkYXwwLGVhfDAsR3wwLEp8MCl8MDtHPUM7dmE9Sl52YTt3YT1HXndhO2hhPUdkKHZhfDAsd2F8MCw2Myl8MDtpYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO2hhPXdhfGhhO2lhPUN8aWE7b2E9RGQoYmF8MCxhYXwwLG5hfDAsb2F8MCl8MDtvYT1EZChvYXwwLEN8MCxqfDAsWXwwKXwwO25hPUM7dGE9dGFeb2E7dWE9dWFebmE7ej1EZCh1YXwwLHRhfDAsRXwwLHp8MCl8MDtFPUM7YmE9el5iYTthYT1FXmFhO3dhPUdkKGJhfDAsYWF8MCwyNCl8MDt2YT1DO2FhPUhkKGJhfDAsYWF8MCw0MCl8MDt3YT1hYXx3YTt2YT1DfHZhO25hPURkKHJhfDAsc2F8MCxvYXwwLG5hfDApfDA7bmE9RGQobmF8MCxDfDAsd2F8MCx2YXwwKXwwO29hPUM7dWE9bmFedWE7dGE9b2FedGE7YWE9R2QodWF8MCx0YXwwLDE2KXwwO2JhPUM7dGE9SGQodWF8MCx0YXwwLDQ4KXwwO2FhPXRhfGFhO2JhPUN8YmE7RT1EZChhYXwwLGJhfDAsenwwLEV8MCl8MDt6PUM7d2E9RV53YTt2YT16XnZhO3RhPUdkKHdhfDAsdmF8MCw2Myl8MDt1YT1DO3ZhPUhkKHdhfDAsdmF8MCwxKXwwO3RhPXZhfHRhO3VhPUN8dWE7a2E9RGQoX3wwLFp8MCxqYXwwLGthfDApfDA7a2E9RGQoa2F8MCxDfDAsaHwwLGx8MCl8MDtqYT1DO3BhPXBhXmthO3FhPXFhXmphO1E9RGQocWF8MCxwYXwwLFR8MCxRfDApfDA7VD1DO189UV5fO1o9VF5aO3ZhPUdkKF98MCxafDAsMjQpfDA7d2E9QztaPUhkKF98MCxafDAsNDApfDA7dmE9Wnx2YTt3YT1DfHdhO2phPURkKGV8MCxmfDAsa2F8MCxqYXwwKXwwO2phPURkKGphfDAsQ3wwLHZhfDAsd2F8MCl8MDtrYT1DO3FhPWphXnFhO3BhPWthXnBhO1o9R2QocWF8MCxwYXwwLDE2KXwwO189QztwYT1IZChxYXwwLHBhfDAsNDgpfDA7Wj1wYXxaO189Q3xfO1Q9RGQoWnwwLF98MCxRfDAsVHwwKXwwO1E9Qzt2YT1UXnZhO3dhPVFed2E7cGE9R2QodmF8MCx3YXwwLDYzKXwwO3FhPUM7d2E9SGQodmF8MCx3YXwwLDEpfDA7cGE9d2F8cGE7cWE9Q3xxYTtnYT1EZChYfDAsVnwwLGZhfDAsZ2F8MCl8MDtnYT1EZChnYXwwLEN8MCxCfDAsU3wwKXwwO2ZhPUM7bGE9bGFeZ2E7bWE9bWFeZmE7TD1EZChtYXwwLGxhfDAsT3wwLEx8MCl8MDtPPUM7WD1MXlg7Vj1PXlY7d2E9R2QoWHwwLFZ8MCwyNCl8MDt2YT1DO1Y9SGQoWHwwLFZ8MCw0MCl8MDt3YT1WfHdhO3ZhPUN8dmE7ZmE9RGQoUnwwLFB8MCxnYXwwLGZhfDApfDA7ZmE9RGQoZmF8MCxDfDAsd2F8MCx2YXwwKXwwO2dhPUM7bWE9ZmFebWE7bGE9Z2FebGE7Vj1HZChtYXwwLGxhfDAsMTYpfDA7WD1DO2xhPUhkKG1hfDAsbGF8MCw0OCl8MDtWPWxhfFY7WD1DfFg7Tz1EZChWfDAsWHwwLEx8MCxPfDApfDA7TD1DO3dhPU9ed2E7dmE9TF52YTtsYT1HZCh3YXwwLHZhfDAsNjMpfDA7bWE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtsYT12YXxsYTttYT1DfG1hO2NhPURkKFJ8MCxQfDAsdnwwLGNhfDApfDA7Y2E9RGQoY2F8MCxDfDAsbGF8MCxtYXwwKXwwO3Y9QzthYT1jYV5hYTtiYT12XmJhO1E9RGQoYmF8MCxhYXwwLFR8MCxRfDApfDA7VD1DO2xhPVFebGE7bWE9VF5tYTt2YT1HZChsYXwwLG1hfDAsMjQpfDA7d2E9QzttYT1IZChsYXwwLG1hfDAsNDApfDA7dmE9bWF8dmE7d2E9Q3x3YTt2PURkKFd8MCxVfDAsY2F8MCx2fDApfDA7dj1EZCh2fDAsQ3wwLHZhfDAsd2F8MCl8MDtjYT1DO2JhPXZeYmE7YWE9Y2FeYWE7bWE9R2QoYmF8MCxhYXwwLDE2KXwwO2xhPUM7YWE9SGQoYmF8MCxhYXwwLDQ4KXwwO21hPWFhfG1hO2xhPUN8bGE7VD1EZChtYXwwLGxhfDAsUXwwLFR8MCl8MDtRPUM7dmE9VF52YTt3YT1RXndhO2FhPUdkKHZhfDAsd2F8MCw2Myl8MDtiYT1DO3dhPUhkKHZhfDAsd2F8MCwxKXwwO2FhPXdhfGFhO2JhPUN8YmE7b2E9RGQoaGF8MCxpYXwwLG5hfDAsb2F8MCl8MDtvYT1EZChvYXwwLEN8MCx0fDAseHwwKXwwO25hPUM7Wj1aXm9hO189X15uYTtMPURkKF98MCxafDAsT3wwLEx8MCl8MDtPPUM7aGE9TF5oYTtpYT1PXmlhO3dhPUdkKGhhfDAsaWF8MCwyNCl8MDt2YT1DO2lhPUhkKGhhfDAsaWF8MCw0MCl8MDt3YT1pYXx3YTt2YT1DfHZhO25hPURkKGh8MCxsfDAsb2F8MCxuYXwwKXwwO25hPURkKG5hfDAsQ3wwLHdhfDAsdmF8MCl8MDtvYT1DO189bmFeXztaPW9hXlo7aWE9R2QoX3wwLFp8MCwxNil8MDtoYT1DO1o9SGQoX3wwLFp8MCw0OCl8MDtpYT1afGlhO2hhPUN8aGE7Tz1EZChpYXwwLGhhfDAsTHwwLE98MCl8MDtMPUM7d2E9T153YTt2YT1MXnZhO1o9R2Qod2F8MCx2YXwwLDYzKXwwO189Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtaPXZhfFo7Xz1DfF87a2E9RGQodGF8MCx1YXwwLGphfDAsa2F8MCl8MDtrYT1EZChrYXwwLEN8MCxwfDAsJHwwKXwwO2phPUM7Vj1WXmthO1g9WF5qYTtHPURkKFh8MCxWfDAsSnwwLEd8MCl8MDtKPUM7dGE9R150YTt1YT1KXnVhO3ZhPUdkKHRhfDAsdWF8MCwyNCl8MDt3YT1DO3VhPUhkKHRhfDAsdWF8MCw0MCl8MDt2YT11YXx2YTt3YT1DfHdhO2phPURkKEh8MCxGfDAsa2F8MCxqYXwwKXwwO2phPURkKGphfDAsQ3wwLHZhfDAsd2F8MCl8MDtrYT1DO1g9amFeWDtWPWthXlY7dWE9R2QoWHwwLFZ8MCwxNil8MDt0YT1DO1Y9SGQoWHwwLFZ8MCw0OCl8MDt1YT1WfHVhO3RhPUN8dGE7Sj1EZCh1YXwwLHRhfDAsR3wwLEp8MCl8MDtHPUM7dmE9Sl52YTt3YT1HXndhO1Y9R2QodmF8MCx3YXwwLDYzKXwwO1g9Qzt3YT1IZCh2YXwwLHdhfDAsMSl8MDtWPXdhfFY7WD1DfFg7Z2E9RGQocGF8MCxxYXwwLGZhfDAsZ2F8MCl8MDtnYT1EZChnYXwwLEN8MCxzfDAsdXwwKXwwO2ZhPUM7ZGE9ZGFeZ2E7ZWE9ZWFeZmE7ej1EZChlYXwwLGRhfDAsRXwwLHp8MCl8MDtFPUM7cGE9el5wYTtxYT1FXnFhO3dhPUdkKHBhfDAscWF8MCwyNCl8MDt2YT1DO3FhPUhkKHBhfDAscWF8MCw0MCl8MDt3YT1xYXx3YTt2YT1DfHZhO2ZhPURkKG58MCxyfDAsZ2F8MCxmYXwwKXwwO2ZhPURkKGZhfDAsQ3wwLHdhfDAsdmF8MCl8MDtnYT1DO2VhPWZhXmVhO2RhPWdhXmRhO3FhPUdkKGVhfDAsZGF8MCwxNil8MDtwYT1DO2RhPUhkKGVhfDAsZGF8MCw0OCl8MDtxYT1kYXxxYTtwYT1DfHBhO0U9RGQocWF8MCxwYXwwLHp8MCxFfDApfDA7ej1DO3dhPUVed2E7dmE9el52YTtkYT1HZCh3YXwwLHZhfDAsNjMpfDA7ZWE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDtkYT12YXxkYTtlYT1DfGVhO2NhPURkKFp8MCxffDAsdnwwLGNhfDApfDA7Y2E9RGQoY2F8MCxDfDAsZ3wwLGl8MCl8MDt2PUM7cWE9cWFeY2E7cGE9cGFedjtHPURkKHBhfDAscWF8MCxKfDAsR3wwKXwwO0o9QztaPUdeWjtfPUpeXzt2YT1HZChafDAsX3wwLDI0KXwwO3dhPUM7Xz1IZChafDAsX3wwLDQwKXwwO3ZhPV98dmE7d2E9Q3x3YTt2PURkKGp8MCxZfDAsY2F8MCx2fDApfDA7dj1EZCh2fDAsQ3wwLHZhfDAsd2F8MCl8MDtjYT1DO3BhPXZecGE7cWE9Y2FecWE7Xz1HZChwYXwwLHFhfDAsMTYpfDA7Wj1DO3FhPUhkKHBhfDAscWF8MCw0OCl8MDtfPXFhfF87Wj1DfFo7Sj1EZChffDAsWnwwLEd8MCxKfDApfDA7Rz1DO3ZhPUpedmE7d2E9R153YTtxYT1HZCh2YXwwLHdhfDAsNjMpfDA7cGE9Qzt3YT1IZCh2YXwwLHdhfDAsMSl8MDtxYT13YXxxYTtwYT1DfHBhO29hPURkKFZ8MCxYfDAsbmF8MCxvYXwwKXwwO29hPURkKG9hfDAsQ3wwLG18MCxvfDApfDA7bmE9QzttYT1tYV5vYTtsYT1sYV5uYTt6PURkKGxhfDAsbWF8MCxFfDAsenwwKXwwO0U9QztWPXpeVjtYPUVeWDt3YT1HZChWfDAsWHwwLDI0KXwwO3ZhPUM7WD1IZChWfDAsWHwwLDQwKXwwO3dhPVh8d2E7dmE9Q3x2YTtuYT1EZChNfDAsS3wwLG9hfDAsbmF8MCl8MDtuYT1EZChuYXwwLEN8MCx3YXwwLHZhfDApfDA7b2E9QztsYT1uYV5sYTttYT1vYV5tYTtYPUdkKGxhfDAsbWF8MCwxNil8MDtWPUM7bWE9SGQobGF8MCxtYXwwLDQ4KXwwO1g9bWF8WDtWPUN8VjtFPURkKFh8MCxWfDAsenwwLEV8MCl8MDt6PUM7d2E9RV53YTt2YT16XnZhO21hPUdkKHdhfDAsdmF8MCw2Myl8MDtsYT1DO3ZhPUhkKHdhfDAsdmF8MCwxKXwwO21hPXZhfG1hO2xhPUN8bGE7a2E9RGQoZGF8MCxlYXwwLGphfDAsa2F8MCl8MDtrYT1EZChrYXwwLEN8MCxlfDAsZnwwKXwwO2phPUM7aWE9aWFea2E7aGE9aGFeamE7UT1EZChoYXwwLGlhfDAsVHwwLFF8MCl8MDtUPUM7ZGE9UV5kYTtlYT1UXmVhO3ZhPUdkKGRhfDAsZWF8MCwyNCl8MDt3YT1DO2VhPUhkKGRhfDAsZWF8MCw0MCl8MDt2YT1lYXx2YTt3YT1DfHdhO2phPURkKEJ8MCxTfDAsa2F8MCxqYXwwKXwwO2phPURkKGphfDAsQ3wwLHZhfDAsd2F8MCl8MDtrYT1DO2hhPWphXmhhO2lhPWthXmlhO2VhPUdkKGhhfDAsaWF8MCwxNil8MDtkYT1DO2lhPUhkKGhhfDAsaWF8MCw0OCl8MDtlYT1pYXxlYTtkYT1DfGRhO1Q9RGQoZWF8MCxkYXwwLFF8MCxUfDApfDA7UT1DO3ZhPVRedmE7d2E9UV53YTtpYT1HZCh2YXwwLHdhfDAsNjMpfDA7aGE9Qzt3YT1IZCh2YXwwLHdhfDAsMSl8MDtpYT13YXxpYTtoYT1DfGhhO2dhPURkKGFhfDAsYmF8MCxmYXwwLGdhfDApfDA7Z2E9RGQoZ2F8MCxDfDAscmF8MCxzYXwwKXwwO2ZhPUM7dWE9dWFeZ2E7dGE9dGFeZmE7TD1EZCh0YXwwLHVhfDAsT3wwLEx8MCl8MDtPPUM7YWE9TF5hYTtiYT1PXmJhO3dhPUdkKGFhfDAsYmF8MCwyNCl8MDt2YT1DO2JhPUhkKGFhfDAsYmF8MCw0MCl8MDt3YT1iYXx3YTt2YT1DfHZhO2ZhPURkKHl8MCxBfDAsZ2F8MCxmYXwwKXwwO2ZhPURkKGZhfDAsQ3wwLHdhfDAsdmF8MCl8MDtnYT1DO3RhPWZhXnRhO3VhPWdhXnVhO2JhPUdkKHRhfDAsdWF8MCwxNil8MDthYT1DO3VhPUhkKHRhfDAsdWF8MCw0OCl8MDtiYT11YXxiYTthYT1DfGFhO089RGQoYmF8MCxhYXwwLEx8MCxPfDApfDA7TD1DO3dhPU9ed2E7dmE9TF52YTt1YT1HZCh3YXwwLHZhfDAsNjMpfDA7dGE9Qzt2YT1IZCh3YXwwLHZhfDAsMSl8MDt1YT12YXx1YTt0YT1DfHRhO2NhPURkKHJhfDAsc2F8MCx2fDAsY2F8MCl8MDtjYT1EZChjYXwwLEN8MCx1YXwwLHRhfDApfDA7dj1DO1g9Y2FeWDtWPXZeVjtRPURkKFZ8MCxYfDAsVHwwLFF8MCl8MDtUPUM7dWE9UV51YTt0YT1UXnRhO3NhPUdkKHVhfDAsdGF8MCwyNCl8MDtyYT1DO3RhPUhkKHVhfDAsdGF8MCw0MCl8MDtzYT10YXxzYTtyYT1DfHJhO3Y9RGQobXwwLG98MCxjYXwwLHZ8MCl8MDt2PURkKHZ8MCxDfDAsc2F8MCxyYXwwKXwwO2NhPUM7Vj12XlY7WD1jYV5YO289R2QoVnwwLFh8MCwxNil8MDttPUM7WD1IZChWfDAsWHwwLDQ4KXwwO289WHxvO209Q3xtO1Q9RGQob3wwLG18MCxRfDAsVHwwKXwwO1E9QztzYT1UXnNhO3JhPVFecmE7WD1HZChzYXwwLHJhfDAsNjMpfDA7Vj1DO3JhPUhkKHNhfDAscmF8MCwxKXwwO1g9cmF8WDtWPUN8VjtvYT1EZChxYXwwLHBhfDAsbmF8MCxvYXwwKXwwOyQ9RGQob2F8MCxDfDAscHwwLCR8MCl8MDtwPUM7ZWE9ZWFeJDtkYT1kYV5wO0w9RGQoZGF8MCxlYXwwLE98MCxMfDApfDA7Tz1DO3FhPUxecWE7cGE9T15wYTtvYT1HZChxYXwwLHBhfDAsMjQpfDA7bmE9QztwYT1IZChxYXwwLHBhfDAsNDApfDA7b2E9cGF8b2E7bmE9Q3xuYTtwPURkKGd8MCxpfDAsJHwwLHB8MCl8MDtwPURkKHB8MCxDfDAsb2F8MCxuYXwwKXwwOyQ9QztkYT1wXmRhO2VhPSReZWE7aT1HZChkYXwwLGVhfDAsMTYpfDA7Zz1DO2VhPUhkKGRhfDAsZWF8MCw0OCl8MDtpPWVhfGk7Zz1DfGc7Tz1EZChpfDAsZ3wwLEx8MCxPfDApfDA7TD1DO29hPU9eb2E7bmE9TF5uYTtlYT1HZChvYXwwLG5hfDAsNjMpfDA7ZGE9QztuYT1IZChvYXwwLG5hfDAsMSl8MDtlYT1uYXxlYTtkYT1DfGRhO2thPURkKG1hfDAsbGF8MCxqYXwwLGthfDApfDA7WT1EZChrYXwwLEN8MCxqfDAsWXwwKXwwO2o9QztiYT1iYV5ZO2FhPWFhXmo7Rz1EZChhYXwwLGJhfDAsSnwwLEd8MCl8MDtKPUM7bWE9R15tYTtsYT1KXmxhO2thPUdkKG1hfDAsbGF8MCwyNCl8MDtqYT1DO2xhPUhkKG1hfDAsbGF8MCw0MCl8MDtrYT1sYXxrYTtqYT1DfGphO2o9RGQoeXwwLEF8MCxZfDAsanwwKXwwO2o9RGQoanwwLEN8MCxrYXwwLGphfDApfDA7WT1DO2FhPWpeYWE7YmE9WV5iYTtBPUdkKGFhfDAsYmF8MCwxNil8MDt5PUM7YmE9SGQoYWF8MCxiYXwwLDQ4KXwwO0E9YmF8QTt5PUN8eTtKPURkKEF8MCx5fDAsR3wwLEp8MCl8MDtHPUM7a2E9Sl5rYTtqYT1HXmphO2JhPUdkKGthfDAsamF8MCw2Myl8MDthYT1DO2phPUhkKGthfDAsamF8MCwxKXwwO2JhPWphfGJhO2FhPUN8YWE7Z2E9RGQoaWF8MCxoYXwwLGZhfDAsZ2F8MCl8MDtTPURkKGdhfDAsQ3wwLEJ8MCxTfDApfDA7Qj1DO189X15TO1o9Wl5CO3o9RGQoWnwwLF98MCxFfDAsenwwKXwwO0U9QztpYT16XmlhO2hhPUVeaGE7Z2E9R2QoaWF8MCxoYXwwLDI0KXwwO2ZhPUM7aGE9SGQoaWF8MCxoYXwwLDQwKXwwO2dhPWhhfGdhO2ZhPUN8ZmE7Qj1EZChzfDAsdXwwLFN8MCxCfDApfDA7Qj1EZChCfDAsQ3wwLGdhfDAsZmF8MCl8MDtTPUM7Wj1CXlo7Xz1TXl87dT1HZChafDAsX3wwLDE2KXwwO3M9QztfPUhkKFp8MCxffDAsNDgpfDA7dT1ffHU7cz1DfHM7RT1EZCh1fDAsc3wwLHp8MCxFfDApfDA7ej1DO2dhPUVeZ2E7ZmE9el5mYTtfPUdkKGdhfDAsZmF8MCw2Myl8MDtaPUM7ZmE9SGQoZ2F8MCxmYXwwLDEpfDA7Xz1mYXxfO1o9Q3xaO2NhPURkKGVhfDAsZGF8MCx2fDAsY2F8MCl8MDtVPURkKGNhfDAsQ3wwLFd8MCxVfDApfDA7Vz1DO3U9dV5VO3M9c15XO0c9RGQoc3wwLHV8MCxKfDAsR3wwKXwwO0o9QztlYT1HXmVhO2RhPUpeZGE7Y2E9R2QoZWF8MCxkYXwwLDI0KXwwO3Y9QztkYT1IZChlYXwwLGRhfDAsNDApfDA7Y2E9ZGF8Y2E7dj1DfHY7Vz1EZChlfDAsZnwwLFV8MCxXfDApfDA7Vz1EZChXfDAsQ3wwLGNhfDAsdnwwKXwwO1U9QztzPVdeczt1PVVedTtmPUdkKHN8MCx1fDAsMTYpfDA7ZT1DO3U9SGQoc3wwLHV8MCw0OCl8MDtmPXV8ZjtlPUN8ZTtKPURkKGZ8MCxlfDAsR3wwLEp8MCl8MDtHPUM7Y2E9Sl5jYTt2PUdedjt1PUdkKGNhfDAsdnwwLDYzKXwwO3M9Qzt2PUhkKGNhfDAsdnwwLDEpfDA7cz1DfHM7JD1EZChiYXwwLGFhfDAscHwwLCR8MCl8MDtQPURkKCR8MCxDfDAsUnwwLFB8MCl8MDtSPUM7bz1vXlA7bT1tXlI7ej1EZChtfDAsb3wwLEV8MCx6fDApfDA7RT1DO2JhPXpeYmE7YWE9RV5hYTskPUdkKGJhfDAsYWF8MCwyNCl8MDtwPUM7YWE9SGQoYmF8MCxhYXwwLDQwKXwwOyQ9YWF8JDtwPUN8cDtSPURkKHR8MCx4fDAsUHwwLFJ8MCl8MDtSPURkKFJ8MCxDfDAsJHwwLHB8MCl8MDtQPUM7bT1SXm07bz1QXm87eD1HZChtfDAsb3wwLDE2KXwwO3Q9QztvPUhkKG18MCxvfDAsNDgpfDA7eD1vfHg7dD1DfHQ7RT1EZCh4fDAsdHwwLHp8MCxFfDApfDA7ej1DOyQ9RV4kO3A9el5wO289R2QoJHwwLHB8MCw2Myl8MDttPUM7cD1IZCgkfDAscHwwLDEpfDA7bT1DfG07WT1EZChffDAsWnwwLGp8MCxZfDApfDA7Sz1EZChZfDAsQ3wwLE18MCxLfDApfDA7TT1DO2k9aV5LO2c9Z15NO1E9RGQoZ3wwLGl8MCxUfDAsUXwwKXwwO1Q9QztfPVFeXztaPVReWjtZPUdkKF98MCxafDAsMjQpfDA7aj1DO1o9SGQoX3wwLFp8MCw0MCl8MDtZPVp8WTtqPUN8ajtNPURkKG58MCxyfDAsS3wwLE18MCl8MDtNPURkKE18MCxDfDAsWXwwLGp8MCl8MDtLPUM7Zz1NXmc7aT1LXmk7cj1HZChnfDAsaXwwLDE2KXwwO249QztpPUhkKGd8MCxpfDAsNDgpfDA7cj1pfHI7bj1DfG47VD1EZChyfDAsbnwwLFF8MCxUfDApfDA7UT1DO1k9VF5ZO2o9UV5qO2k9R2QoWXwwLGp8MCw2Myl8MDtnPUM7aj1IZChZfDAsanwwLDEpfDA7Zz1DfGc7Uz1EZChYfDAsVnwwLEJ8MCxTfDApfDA7Rj1EZChTfDAsQ3wwLEh8MCxGfDApfDA7SD1DO0E9QV5GO3k9eV5IO0w9RGQoeXwwLEF8MCxPfDAsTHwwKXwwO089QztYPUxeWDtWPU9eVjtTPUdkKFh8MCxWfDAsMjQpfDA7Qj1DO1Y9SGQoWHwwLFZ8MCw0MCl8MDtTPVZ8UztCPUN8QjtIPURkKGh8MCxsfDAsRnwwLEh8MCl8MDtIPURkKEh8MCxDfDAsU3wwLEJ8MCl8MDtGPUM7eT1IXnk7QT1GXkE7bD1HZCh5fDAsQXwwLDE2KXwwO2g9QztBPUhkKHl8MCxBfDAsNDgpfDA7bD1BfGw7aD1DfGg7Tz1EZChsfDAsaHwwLEx8MCxPfDApfDA7TD1DO1M9T15TO0I9TF5CO0E9R2QoU3wwLEJ8MCw2Myl8MDt5PUM7Qj1IZChTfDAsQnwwLDEpfDA7Uz1iO1Y9UztTPVMrNHwwO1Q9V14oZFtWPj4wXXxkW1YrMT4+MF08PDh8ZFtWKzI+PjBdPDwxNnxkW1YrMz4+MF08PDI0KV5UO1E9VV4oZFtTPj4wXXxkW1MrMT4+MF08PDh8ZFtTKzI+PjBdPDwxNnxkW1MrMz4+MF08PDI0KV5RO1M9YjthW1M+PjBdPVQ7YVtTKzE+PjBdPVQ+Pjg7YVtTKzI+PjBdPVQ+PjE2O2FbUyszPj4wXT1UPj4yNDtiPWIrNHwwO2FbYj4+MF09UTthW2IrMT4+MF09UT4+ODthW2IrMj4+MF09UT4+MTY7YVtiKzM+PjBdPVE+PjI0O2I9TjtRPWI7Yj1iKzR8MDtPPVJeKGRbUT4+MF18ZFtRKzE+PjBdPDw4fGRbUSsyPj4wXTw8MTZ8ZFtRKzM+PjBdPDwyNCleTztMPVBeKGRbYj4+MF18ZFtiKzE+PjBdPDw4fGRbYisyPj4wXTw8MTZ8ZFtiKzM+PjBdPDwyNCleTDtiPU47Tj1iO2FbTj4+MF09TzthW04rMT4+MF09Tz4+ODthW04rMj4+MF09Tz4+MTY7YVtOKzM+PjBdPU8+PjI0O2I9Yis0fDA7YVtiPj4wXT1MO2FbYisxPj4wXT1MPj44O2FbYisyPj4wXT1MPj4xNjthW2IrMz4+MF09TD4+MjQ7Yj1JO0w9YjtiPWIrNHwwO0o9TV4oZFtMPj4wXXxkW0wrMT4+MF08PDh8ZFtMKzI+PjBdPDwxNnxkW0wrMz4+MF08PDI0KV5KO0c9S14oZFtiPj4wXXxkW2IrMT4+MF08PDh8ZFtiKzI+PjBdPDwxNnxkW2IrMz4+MF08PDI0KV5HO2I9STtJPWI7YVtJPj4wXT1KO2FbSSsxPj4wXT1KPj44O2FbSSsyPj4wXT1KPj4xNjthW0krMz4+MF09Sj4+MjQ7Yj1iKzR8MDthW2I+PjBdPUc7YVtiKzE+PjBdPUc+Pjg7YVtiKzI+PjBdPUc+PjE2O2FbYiszPj4wXT1HPj4yNDtiPUQ7Rz1iO2I9Yis0fDA7RT1IXihkW0c+PjBdfGRbRysxPj4wXTw8OHxkW0crMj4+MF08PDE2fGRbRyszPj4wXTw8MjQpXkU7ej1GXihkW2I+PjBdfGRbYisxPj4wXTw8OHxkW2IrMj4+MF08PDE2fGRbYiszPj4wXTw8MjQpXno7Yj1EO0Q9YjthW0Q+PjBdPUU7YVtEKzE+PjBdPUU+Pjg7YVtEKzI+PjBdPUU+PjE2O2FbRCszPj4wXT1FPj4yNDtiPWIrNHwwO2FbYj4+MF09ejthW2IrMT4+MF09ej4+ODthW2IrMj4+MF09ej4+MTY7YVtiKzM+PjBdPXo+PjI0O2I9dzt6PWI7Yj1iKzR8MDt4PShCfEEpXihkW3o+PjBdfGRbeisxPj4wXTw8OHxkW3orMj4+MF08PDE2fGRbeiszPj4wXTw8MjQpXng7dD0oQ3x5KV4oZFtiPj4wXXxkW2IrMT4+MF08PDh8ZFtiKzI+PjBdPDwxNnxkW2IrMz4+MF08PDI0KV50O2I9dzt3PWI7YVt3Pj4wXT14O2FbdysxPj4wXT14Pj44O2FbdysyPj4wXT14Pj4xNjthW3crMz4+MF09eD4+MjQ7Yj1iKzR8MDthW2I+PjBdPXQ7YVtiKzE+PjBdPXQ+Pjg7YVtiKzI+PjBdPXQ+PjE2O2FbYiszPj4wXT10Pj4yNDtiPXE7dD1iO2I9Yis0fDA7cj0odnx1KV4oZFt0Pj4wXXxkW3QrMT4+MF08PDh8ZFt0KzI+PjBdPDwxNnxkW3QrMz4+MF08PDI0KV5yO249c14oZFtiPj4wXXxkW2IrMT4+MF08PDh8ZFtiKzI+PjBdPDwxNnxkW2IrMz4+MF08PDI0KV5uO2I9cTtxPWI7YVtxPj4wXT1yO2FbcSsxPj4wXT1yPj44O2FbcSsyPj4wXT1yPj4xNjthW3ErMz4+MF09cj4+MjQ7Yj1iKzR8MDthW2I+PjBdPW47YVtiKzE+PjBdPW4+Pjg7YVtiKzI+PjBdPW4+PjE2O2FbYiszPj4wXT1uPj4yNDtiPWs7bj1iO2I9Yis0fDA7bD0ocHxvKV4oZFtuPj4wXXxkW24rMT4+MF08PDh8ZFtuKzI+PjBdPDwxNnxkW24rMz4+MF08PDI0KV5sO2g9bV4oZFtiPj4wXXxkW2IrMT4+MF08PDh8ZFtiKzI+PjBdPDwxNnxkW2IrMz4+MF08PDI0KV5oO2I9aztrPWI7YVtrPj4wXT1sO2FbaysxPj4wXT1sPj44O2FbaysyPj4wXT1sPj4xNjthW2srMz4+MF09bD4+MjQ7Yj1iKzR8MDthW2I+PjBdPWg7YVtiKzE+PjBdPWg+Pjg7YVtiKzI+PjBdPWg+PjE2O2FbYiszPj4wXT1oPj4yNDtiPWM7aD1iO2I9Yis0fDA7Zj0oanxpKV4oZFtoPj4wXXxkW2grMT4+MF08PDh8ZFtoKzI+PjBdPDwxNnxkW2grMz4+MF08PDI0KV5mO2I9Z14oZFtiPj4wXXxkW2IrMT4+MF08PDh8ZFtiKzI+PjBdPDwxNnxkW2IrMz4+MF08PDI0KV5lO2U9YzthW2U+PjBdPWY7YVtlKzE+PjBdPWY+Pjg7YVtlKzI+PjBdPWY+PjE2O2FbZSszPj4wXT1mPj4yNDtjPWMrNHwwO2FbYz4+MF09YjthW2MrMT4+MF09Yj4+ODthW2MrMj4+MF09Yj4+MTY7YVtjKzM+PjBdPWI+PjI0O3JldHVybn1mdW5jdGlvbiBCYigpe3JldHVybiA2NH1mdW5jdGlvbiBDYihiLGQsZSxmKXtiPWJ8MDtkPWR8MDtlPWV8MDtmPWZ8MDt2YXIgZz0wLGg9MCxqPTAsaz0wLGw9MCxtPTAsbj0wO249aTttPWk9aSs2MyYtNjQ7aT1pKzIwOHwwO2c9bSs2NHwwO2g9bTtqPTg7az1oKzY0fDA7ZG97Y1toPj4yXT1jW2o+PjJdO2g9aCs0fDA7aj1qKzR8MH13aGlsZSgoaHwwKTwoa3wwKSk7aD1IZChlfDAsZnwwLDMpfDA7aj1DO2s9R2QoZXwwLGZ8MCw2MSl8MDtsPW0rNzJ8MDtjW2w+PjJdPWg7Y1tsKzQ+PjJdPWo7bD1nO2NbbD4+Ml09aztjW2wrND4+Ml09QztsPW0rODB8MDtpZihmPj4+MDwwfChmfDApPT0wJmU+Pj4wPDEyOCl7SWQobHwwLGR8MCxlfDApfDA7R2IobSxiKTtpPW47cmV0dXJuIDB9aD1sO2o9ZDtrPWgrMTI4fDA7ZG97YVtoPj4wXT1hW2o+PjBdfDA7aD1oKzF8MDtqPWorMXwwfXdoaWxlKChofDApPChrfDApKTtIYihtLGwpO2c9ZCsxMjh8MDtkPURkKGV8MCxmfDAsLTEyOCwtMSl8MDtoPUM7aWYoaD4+PjA+MHwoaHwwKT09MCZkPj4+MD4xMjcpZG97SGIobSxnKTtnPWcrMTI4fDA7ZD1EZChkfDAsaHwwLC0xMjgsLTEpfDA7aD1DfXdoaWxlKGg+Pj4wPjB8KGh8MCk9PTAmZD4+PjA+MTI3KTtJZChsfDAsZ3wwLGR8MCl8MDtHYihtLGIpO2k9bjtyZXR1cm4gMH1mdW5jdGlvbiBEYihiLGQpe2I9YnwwO2Q9ZHwwO3ZhciBlPTAsZj0wLGc9MCxoPTAsaj0wLGs9MCxsPTAsbT0wLG49MDtuPWk7bT1pPWkrNjMmLTY0O2k9aSsxNnwwO2w9YiszMnwwO2U9bDtmPWNbZT4+Ml18MDtlPWNbZSs0Pj4yXXwwO2FbbSs3Pj4wXT1mO2c9R2QoZnwwLGV8MCw4KXwwO2FbbSs2Pj4wXT1nO2c9R2QoZnwwLGV8MCwxNil8MDthW20rNT4+MF09ZztnPUdkKGZ8MCxlfDAsMjQpfDA7YVttKzQ+PjBdPWc7YVttKzM+PjBdPWU7Zz1HZChmfDAsZXwwLDQwKXwwO2FbbSsyPj4wXT1nO2c9R2QoZnwwLGV8MCw0OCl8MDthW20rMT4+MF09ZztnPUdkKGZ8MCxlfDAsNTYpfDA7YVttPj4wXT1nO2c9R2QoZnwwLGV8MCwzKXwwO2c9ZyY2MztrPWc+Pj4wPDU2PzU2OjEyMDtqPWstZ3wwO2RvIGlmKChrfDApIT0oZ3wwKSl7aD1IZChqfDAsMCwzKXwwO2Y9RGQoaHwwLEN8MCxmfDAsZXwwKXwwO2U9QztoPWw7Y1toPj4yXT1mO2NbaCs0Pj4yXT1lO2g9NjQtZ3wwO2c9Yis0MCtnfDA7aWYoaj4+PjA8aD4+PjApe0lkKGd8MCwzMjc5MixqfDApfDA7YnJlYWt9SWQoZ3wwLDMyNzkyLGh8MCl8MDtrPWIrNDB8MDtFYihiLGspO2U9MzI3OTIraHwwO2c9Q2QoanwwLDAsaHwwLDApfDA7Zj1DO2lmKGY+Pj4wPjB8KGZ8MCk9PTAmZz4+PjA+NjMpe2Rve0ViKGIsZSk7ZT1lKzY0fDA7Zz1EZChnfDAsZnwwLC02NCwtMSl8MDtmPUN9d2hpbGUoZj4+PjA+MHwoZnwwKT09MCZnPj4+MD42Myk7Zj1nfWVsc2UgZj1nO0lkKGt8MCxlfDAsZnwwKXwwO2U9bDtmPWNbZT4+Ml18MDtlPWNbZSs0Pj4yXXwwfXdoaWxlKDApO2s9R2QoZnwwLGV8MCwzKXwwO2s9ayY2MztlPURkKGZ8MCxlfDAsNjQsMCl8MDtmPWw7Y1tmPj4yXT1lO2NbZis0Pj4yXT1DO2Y9NjQta3wwO2U9Yis0MCtrfDA7aWYoZj4+PjA+OCl7az1jW20+PjJdfDA7bT1jW20rND4+Ml18MDtsPWU7YVtsPj4wXT1rO2FbbCsxPj4wXT1rPj44O2FbbCsyPj4wXT1rPj4xNjthW2wrMz4+MF09az4+MjQ7ZT1lKzR8MDthW2U+PjBdPW07YVtlKzE+PjBdPW0+Pjg7YVtlKzI+PjBdPW0+PjE2O2FbZSszPj4wXT1tPj4yNDtlPWJ9ZWxzZXtJZChlfDAsbXwwLGZ8MCl8MDtoPWIrNDB8MDtFYihiLGgpO2U9bStmfDA7Zz1DZCg4LDAsZnwwLDApfDA7Zj1DO2lmKGY+Pj4wPjB8KGZ8MCk9PTAmZz4+PjA+NjMpe2Rve0ViKGIsZSk7ZT1lKzY0fDA7Zz1EZChnfDAsZnwwLC02NCwtMSl8MDtmPUN9d2hpbGUoZj4+PjA+MHwoZnwwKT09MCZnPj4+MD42Myk7Zj1nfWVsc2UgZj1nO0lkKGh8MCxlfDAsZnwwKXwwO2U9Yn1lPWNbZT4+Ml18MDthW2QrMz4+MF09ZTthW2QrMj4+MF09ZT4+Pjg7YVtkKzE+PjBdPWU+Pj4xNjthW2Q+PjBdPWU+Pj4yNDtlPWNbYis0Pj4yXXwwO2FbZCs3Pj4wXT1lO2FbZCs2Pj4wXT1lPj4+ODthW2QrNT4+MF09ZT4+PjE2O2FbZCs0Pj4wXT1lPj4+MjQ7ZT1jW2IrOD4+Ml18MDthW2QrMTE+PjBdPWU7YVtkKzEwPj4wXT1lPj4+ODthW2QrOT4+MF09ZT4+PjE2O2FbZCs4Pj4wXT1lPj4+MjQ7ZT1jW2IrMTI+PjJdfDA7YVtkKzE1Pj4wXT1lO2FbZCsxND4+MF09ZT4+Pjg7YVtkKzEzPj4wXT1lPj4+MTY7YVtkKzEyPj4wXT1lPj4+MjQ7ZT1jW2IrMTY+PjJdfDA7YVtkKzE5Pj4wXT1lO2FbZCsxOD4+MF09ZT4+Pjg7YVtkKzE3Pj4wXT1lPj4+MTY7YVtkKzE2Pj4wXT1lPj4+MjQ7ZT1jW2IrMjA+PjJdfDA7YVtkKzIzPj4wXT1lO2FbZCsyMj4+MF09ZT4+Pjg7YVtkKzIxPj4wXT1lPj4+MTY7YVtkKzIwPj4wXT1lPj4+MjQ7ZT1jW2IrMjQ+PjJdfDA7YVtkKzI3Pj4wXT1lO2FbZCsyNj4+MF09ZT4+Pjg7YVtkKzI1Pj4wXT1lPj4+MTY7YVtkKzI0Pj4wXT1lPj4+MjQ7ZT1jW2IrMjg+PjJdfDA7YVtkKzMxPj4wXT1lO2FbZCszMD4+MF09ZT4+Pjg7YVtkKzI5Pj4wXT1lPj4+MTY7YVtkKzI4Pj4wXT1lPj4+MjQ7ZT1iKzEwNHwwO2Rve2FbYj4+MF09MDtiPWIrMXwwfXdoaWxlKChifDApPChlfDApKTtpPW47cmV0dXJufWZ1bmN0aW9uIEViKGEsYil7YT1hfDA7Yj1ifDA7dmFyIGU9MCxmPTAsZz0wLGg9MCxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MCxwPTAscT0wLHI9MCxzPTAsdD0wLHU9MDtnPWk7Zj1pPWkrNjMmLTY0O2k9aSsyNTZ8MDtlPTA7ZG97aD1iKyhlPDwyKXwwO2NbZisoZTw8Mik+PjJdPShkW2grMj4+MF18MCk8PDh8KGRbaCszPj4wXXwwKXwoZFtoKzE+PjBdfDApPDwxNnwoZFtoPj4wXXwwKTw8MjQ7ZT1lKzF8MH13aGlsZSgoZXwwKSE9MTYpO2I9Y1tmPj4yXXwwO2U9MTY7ZG97aD1jW2YrKGUrLTI8PDIpPj4yXXwwO2o9YjtiPWNbZisoZSstMTU8PDIpPj4yXXwwO2NbZisoZTw8Mik+PjJdPWorKGNbZisoZSstNzw8Mik+PjJdfDApKygoaD4+PjE5fGg8PDEzKV5oPj4+MTBeKGg+Pj4xN3xoPDwxNSkpKygoYj4+PjE4fGI8PDE0KV5iPj4+M14oYj4+Pjd8Yjw8MjUpKTtlPWUrMXwwfXdoaWxlKChlfDApIT02NCk7dT1jW2E+PjJdfDA7cz1hKzR8MDt0PWNbcz4+Ml18MDtxPWErOHwwO3I9Y1txPj4yXXwwO289YSsxMnwwO209YSsxNnwwO249Y1ttPj4yXXwwO2s9YSsyMHwwO2w9Y1trPj4yXXwwO2U9YSsyNHwwO2I9Y1tlPj4yXXwwO2o9YSsyOHwwO2g9KGNbaj4+Ml18MCkrMTExNjM1MjQwOCsoY1tmPj4yXXwwKSsoKG4+Pj42fG48PDI2KV4obj4+PjExfG48PDIxKV4obj4+PjI1fG48PDcpKSsoKGJebCkmbl5iKXwwO3A9KGNbbz4+Ml18MCkraHwwO2g9KChyfHQpJnV8ciZ0KSsoKHU+Pj4yfHU8PDMwKV4odT4+PjEzfHU8PDE5KV4odT4+PjIyfHU8PDEwKSkraHwwO2I9YisxODk5NDQ3NDQxKyhjW2YrND4+Ml18MCkrKChwPj4+NnxwPDwyNileKHA+Pj4xMXxwPDwyMSleKHA+Pj4yNXxwPDw3KSkrKChsXm4pJnBebCl8MDtyPXIrYnwwO2I9KCh0fHUpJmh8dCZ1KSsoKGg+Pj4yfGg8PDMwKV4oaD4+PjEzfGg8PDE5KV4oaD4+PjIyfGg8PDEwKSkrYnwwO2w9bCstMTI0NTY0MzgyNSsoY1tmKzg+PjJdfDApKygocj4+PjZ8cjw8MjYpXihyPj4+MTF8cjw8MjEpXihyPj4+MjV8cjw8NykpKygobl5wKSZyXm4pfDA7dD10K2x8MDtsPSgodXxoKSZifHUmaCkrKChiPj4+MnxiPDwzMCleKGI+Pj4xM3xiPDwxOSleKGI+Pj4yMnxiPDwxMCkpK2x8MDtuPW4rLTM3Mzk1NzcyMysoY1tmKzEyPj4yXXwwKSsoKHQ+Pj42fHQ8PDI2KV4odD4+PjExfHQ8PDIxKV4odD4+PjI1fHQ8PDcpKSsoKHBecikmdF5wKXwwO3U9dStufDA7bj0oKGh8YikmbHxoJmIpKygobD4+PjJ8bDw8MzApXihsPj4+MTN8bDw8MTkpXihsPj4+MjJ8bDw8MTApKStufDA7cD1wKzk2MTk4NzE2MysoY1tmKzE2Pj4yXXwwKSsoKHU+Pj42fHU8PDI2KV4odT4+PjExfHU8PDIxKV4odT4+PjI1fHU8PDcpKSsoKHJedCkmdV5yKXwwO2g9aCtwfDA7cD0oKGJ8bCkmbnxiJmwpKygobj4+PjJ8bjw8MzApXihuPj4+MTN8bjw8MTkpXihuPj4+MjJ8bjw8MTApKStwfDA7cj1yKzE1MDg5NzA5OTMrKGNbZisyMD4+Ml18MCkrKChoPj4+NnxoPDwyNileKGg+Pj4xMXxoPDwyMSleKGg+Pj4yNXxoPDw3KSkrKCh0XnUpJmhedCl8MDtiPWIrcnwwO3I9KChsfG4pJnB8bCZuKSsoKHA+Pj4yfHA8PDMwKV4ocD4+PjEzfHA8PDE5KV4ocD4+PjIyfHA8PDEwKSkrcnwwO3Q9dCstMTg0MTMzMTU0OCsoY1tmKzI0Pj4yXXwwKSsoKGI+Pj42fGI8PDI2KV4oYj4+PjExfGI8PDIxKV4oYj4+PjI1fGI8PDcpKSsoKHVeaCkmYl51KXwwO2w9bCt0fDA7dD0oKG58cCkmcnxuJnApKygocj4+PjJ8cjw8MzApXihyPj4+MTN8cjw8MTkpXihyPj4+MjJ8cjw8MTApKSt0fDA7dT11Ky0xNDI0MjA0MDc1KyhjW2YrMjg+PjJdfDApKygobD4+PjZ8bDw8MjYpXihsPj4+MTF8bDw8MjEpXihsPj4+MjV8bDw8NykpKygoaF5iKSZsXmgpfDA7bj1uK3V8MDt1PSgocHxyKSZ0fHAmcikrKCh0Pj4+Mnx0PDwzMCleKHQ+Pj4xM3x0PDwxOSleKHQ+Pj4yMnx0PDwxMCkpK3V8MDtoPWgrLTY3MDU4NjIxNisoY1tmKzMyPj4yXXwwKSsoKG4+Pj42fG48PDI2KV4obj4+PjExfG48PDIxKV4obj4+PjI1fG48PDcpKSsoKGJebCkmbl5iKXwwO3A9cCtofDA7aD0oKHJ8dCkmdXxyJnQpKygodT4+PjJ8dTw8MzApXih1Pj4+MTN8dTw8MTkpXih1Pj4+MjJ8dTw8MTApKStofDA7Yj1iKzMxMDU5ODQwMSsoY1tmKzM2Pj4yXXwwKSsoKHA+Pj42fHA8PDI2KV4ocD4+PjExfHA8PDIxKV4ocD4+PjI1fHA8PDcpKSsoKGxebikmcF5sKXwwO3I9citifDA7Yj0oKHR8dSkmaHx0JnUpKygoaD4+PjJ8aDw8MzApXihoPj4+MTN8aDw8MTkpXihoPj4+MjJ8aDw8MTApKStifDA7bD1sKzYwNzIyNTI3OCsoY1tmKzQwPj4yXXwwKSsoKHI+Pj42fHI8PDI2KV4ocj4+PjExfHI8PDIxKV4ocj4+PjI1fHI8PDcpKSsoKG5ecCkmcl5uKXwwO3Q9dCtsfDA7bD0oKHV8aCkmYnx1JmgpKygoYj4+PjJ8Yjw8MzApXihiPj4+MTN8Yjw8MTkpXihiPj4+MjJ8Yjw8MTApKStsfDA7bj1uKzE0MjY4ODE5ODcrKGNbZis0ND4+Ml18MCkrKCh0Pj4+Nnx0PDwyNileKHQ+Pj4xMXx0PDwyMSleKHQ+Pj4yNXx0PDw3KSkrKChwXnIpJnRecCl8MDt1PXUrbnwwO249KChofGIpJmx8aCZiKSsoKGw+Pj4yfGw8PDMwKV4obD4+PjEzfGw8PDE5KV4obD4+PjIyfGw8PDEwKSkrbnwwO3A9cCsxOTI1MDc4Mzg4KyhjW2YrNDg+PjJdfDApKygodT4+PjZ8dTw8MjYpXih1Pj4+MTF8dTw8MjEpXih1Pj4+MjV8dTw8NykpKygocl50KSZ1XnIpfDA7aD1oK3B8MDtwPSgoYnxsKSZufGImbCkrKChuPj4+MnxuPDwzMCleKG4+Pj4xM3xuPDwxOSleKG4+Pj4yMnxuPDwxMCkpK3B8MDtyPXIrLTIxMzI4ODkwOTArKGNbZis1Mj4+Ml18MCkrKChoPj4+NnxoPDwyNileKGg+Pj4xMXxoPDwyMSleKGg+Pj4yNXxoPDw3KSkrKCh0XnUpJmhedCl8MDtiPWIrcnwwO3I9KChsfG4pJnB8bCZuKSsoKHA+Pj4yfHA8PDMwKV4ocD4+PjEzfHA8PDE5KV4ocD4+PjIyfHA8PDEwKSkrcnwwO3Q9dCstMTY4MDA3OTE5MysoY1tmKzU2Pj4yXXwwKSsoKGI+Pj42fGI8PDI2KV4oYj4+PjExfGI8PDIxKV4oYj4+PjI1fGI8PDcpKSsoKHVeaCkmYl51KXwwO2w9bCt0fDA7dD0oKG58cCkmcnxuJnApKygocj4+PjJ8cjw8MzApXihyPj4+MTN8cjw8MTkpXihyPj4+MjJ8cjw8MTApKSt0fDA7dT11Ky0xMDQ2NzQ0NzE2KyhjW2YrNjA+PjJdfDApKygobD4+PjZ8bDw8MjYpXihsPj4+MTF8bDw8MjEpXihsPj4+MjV8bDw8NykpKygoaF5iKSZsXmgpfDA7bj1uK3V8MDt1PSgocHxyKSZ0fHAmcikrKCh0Pj4+Mnx0PDwzMCleKHQ+Pj4xM3x0PDwxOSleKHQ+Pj4yMnx0PDwxMCkpK3V8MDtoPWgrLTQ1OTU3Njg5NSsoY1tmKzY0Pj4yXXwwKSsoKG4+Pj42fG48PDI2KV4obj4+PjExfG48PDIxKV4obj4+PjI1fG48PDcpKSsoKGJebCkmbl5iKXwwO3A9cCtofDA7aD0oKHJ8dCkmdXxyJnQpKygodT4+PjJ8dTw8MzApXih1Pj4+MTN8dTw8MTkpXih1Pj4+MjJ8dTw8MTApKStofDA7Yj1iKy0yNzI3NDI1MjIrKGNbZis2OD4+Ml18MCkrKChwPj4+NnxwPDwyNileKHA+Pj4xMXxwPDwyMSleKHA+Pj4yNXxwPDw3KSkrKChsXm4pJnBebCl8MDtyPXIrYnwwO2I9KCh0fHUpJmh8dCZ1KSsoKGg+Pj4yfGg8PDMwKV4oaD4+PjEzfGg8PDE5KV4oaD4+PjIyfGg8PDEwKSkrYnwwO2w9bCsyNjQzNDcwNzgrKGNbZis3Mj4+Ml18MCkrKChyPj4+NnxyPDwyNileKHI+Pj4xMXxyPDwyMSleKHI+Pj4yNXxyPDw3KSkrKChuXnApJnJebil8MDt0PXQrbHwwO2w9KCh1fGgpJmJ8dSZoKSsoKGI+Pj4yfGI8PDMwKV4oYj4+PjEzfGI8PDE5KV4oYj4+PjIyfGI8PDEwKSkrbHwwO249bis2MDQ4MDc2MjgrKGNbZis3Nj4+Ml18MCkrKCh0Pj4+Nnx0PDwyNileKHQ+Pj4xMXx0PDwyMSleKHQ+Pj4yNXx0PDw3KSkrKChwXnIpJnRecCl8MDt1PXUrbnwwO249KChofGIpJmx8aCZiKSsoKGw+Pj4yfGw8PDMwKV4obD4+PjEzfGw8PDE5KV4obD4+PjIyfGw8PDEwKSkrbnwwO3A9cCs3NzAyNTU5ODMrKGNbZis4MD4+Ml18MCkrKCh1Pj4+Nnx1PDwyNileKHU+Pj4xMXx1PDwyMSleKHU+Pj4yNXx1PDw3KSkrKChyXnQpJnVecil8MDtoPWgrcHwwO3A9KChifGwpJm58YiZsKSsoKG4+Pj4yfG48PDMwKV4obj4+PjEzfG48PDE5KV4obj4+PjIyfG48PDEwKSkrcHwwO3I9cisxMjQ5MTUwMTIyKyhjW2YrODQ+PjJdfDApKygoaD4+PjZ8aDw8MjYpXihoPj4+MTF8aDw8MjEpXihoPj4+MjV8aDw8NykpKygodF51KSZoXnQpfDA7Yj1iK3J8MDtyPSgobHxuKSZwfGwmbikrKChwPj4+MnxwPDwzMCleKHA+Pj4xM3xwPDwxOSleKHA+Pj4yMnxwPDwxMCkpK3J8MDt0PXQrMTU1NTA4MTY5MisoY1tmKzg4Pj4yXXwwKSsoKGI+Pj42fGI8PDI2KV4oYj4+PjExfGI8PDIxKV4oYj4+PjI1fGI8PDcpKSsoKHVeaCkmYl51KXwwO2w9bCt0fDA7dD0oKG58cCkmcnxuJnApKygocj4+PjJ8cjw8MzApXihyPj4+MTN8cjw8MTkpXihyPj4+MjJ8cjw8MTApKSt0fDA7dT11KzE5OTYwNjQ5ODYrKGNbZis5Mj4+Ml18MCkrKChsPj4+NnxsPDwyNileKGw+Pj4xMXxsPDwyMSleKGw+Pj4yNXxsPDw3KSkrKChoXmIpJmxeaCl8MDtuPW4rdXwwO3U9KChwfHIpJnR8cCZyKSsoKHQ+Pj4yfHQ8PDMwKV4odD4+PjEzfHQ8PDE5KV4odD4+PjIyfHQ8PDEwKSkrdXwwO2g9aCstMTc0MDc0NjQxNCsoY1tmKzk2Pj4yXXwwKSsoKG4+Pj42fG48PDI2KV4obj4+PjExfG48PDIxKV4obj4+PjI1fG48PDcpKSsoKGJebCkmbl5iKXwwO3A9cCtofDA7aD0oKHJ8dCkmdXxyJnQpKygodT4+PjJ8dTw8MzApXih1Pj4+MTN8dTw8MTkpXih1Pj4+MjJ8dTw8MTApKStofDA7Yj1iKy0xNDczMTMyOTQ3KyhjW2YrMTAwPj4yXXwwKSsoKHA+Pj42fHA8PDI2KV4ocD4+PjExfHA8PDIxKV4ocD4+PjI1fHA8PDcpKSsoKGxebikmcF5sKXwwO3I9citifDA7Yj0oKHR8dSkmaHx0JnUpKygoaD4+PjJ8aDw8MzApXihoPj4+MTN8aDw8MTkpXihoPj4+MjJ8aDw8MTApKStifDA7bD1sKy0xMzQxOTcwNDg4KyhjW2YrMTA0Pj4yXXwwKSsoKHI+Pj42fHI8PDI2KV4ocj4+PjExfHI8PDIxKV4ocj4+PjI1fHI8PDcpKSsoKG5ecCkmcl5uKXwwO3Q9dCtsfDA7bD0oKHV8aCkmYnx1JmgpKygoYj4+PjJ8Yjw8MzApXihiPj4+MTN8Yjw8MTkpXihiPj4+MjJ8Yjw8MTApKStsfDA7bj1uKy0xMDg0NjUzNjI1KyhjW2YrMTA4Pj4yXXwwKSsoKHQ+Pj42fHQ8PDI2KV4odD4+PjExfHQ8PDIxKV4odD4+PjI1fHQ8PDcpKSsoKHBecikmdF5wKXwwO3U9dStufDA7bj0oKGh8YikmbHxoJmIpKygobD4+PjJ8bDw8MzApXihsPj4+MTN8bDw8MTkpXihsPj4+MjJ8bDw8MTApKStufDA7cD1wKy05NTgzOTU0MDUrKGNbZisxMTI+PjJdfDApKygodT4+PjZ8dTw8MjYpXih1Pj4+MTF8dTw8MjEpXih1Pj4+MjV8dTw8NykpKygocl50KSZ1XnIpfDA7aD1oK3B8MDtwPSgoYnxsKSZufGImbCkrKChuPj4+MnxuPDwzMCleKG4+Pj4xM3xuPDwxOSleKG4+Pj4yMnxuPDwxMCkpK3B8MDtyPXIrLTcxMDQzODU4NSsoY1tmKzExNj4+Ml18MCkrKChoPj4+NnxoPDwyNileKGg+Pj4xMXxoPDwyMSleKGg+Pj4yNXxoPDw3KSkrKCh0XnUpJmhedCl8MDtiPWIrcnwwO3I9KChsfG4pJnB8bCZuKSsoKHA+Pj4yfHA8PDMwKV4ocD4+PjEzfHA8PDE5KV4ocD4+PjIyfHA8PDEwKSkrcnwwO3Q9dCsxMTM5MjY5OTMrKGNbZisxMjA+PjJdfDApKygoYj4+PjZ8Yjw8MjYpXihiPj4+MTF8Yjw8MjEpXihiPj4+MjV8Yjw8NykpKygodV5oKSZiXnUpfDA7bD1sK3R8MDt0PSgobnxwKSZyfG4mcCkrKChyPj4+MnxyPDwzMCleKHI+Pj4xM3xyPDwxOSleKHI+Pj4yMnxyPDwxMCkpK3R8MDt1PXUrMzM4MjQxODk1KyhjW2YrMTI0Pj4yXXwwKSsoKGw+Pj42fGw8PDI2KV4obD4+PjExfGw8PDIxKV4obD4+PjI1fGw8PDcpKSsoKGheYikmbF5oKXwwO249bit1fDA7dT0oKHB8cikmdHxwJnIpKygodD4+PjJ8dDw8MzApXih0Pj4+MTN8dDw8MTkpXih0Pj4+MjJ8dDw8MTApKSt1fDA7aD1oKzY2NjMwNzIwNSsoY1tmKzEyOD4+Ml18MCkrKChuPj4+NnxuPDwyNileKG4+Pj4xMXxuPDwyMSleKG4+Pj4yNXxuPDw3KSkrKChiXmwpJm5eYil8MDtwPXAraHwwO2g9KChyfHQpJnV8ciZ0KSsoKHU+Pj4yfHU8PDMwKV4odT4+PjEzfHU8PDE5KV4odT4+PjIyfHU8PDEwKSkraHwwO2I9Yis3NzM1Mjk5MTIrKGNbZisxMzI+PjJdfDApKygocD4+PjZ8cDw8MjYpXihwPj4+MTF8cDw8MjEpXihwPj4+MjV8cDw8NykpKygobF5uKSZwXmwpfDA7cj1yK2J8MDtiPSgodHx1KSZofHQmdSkrKChoPj4+MnxoPDwzMCleKGg+Pj4xM3xoPDwxOSleKGg+Pj4yMnxoPDwxMCkpK2J8MDtsPWwrMTI5NDc1NzM3MisoY1tmKzEzNj4+Ml18MCkrKChyPj4+NnxyPDwyNileKHI+Pj4xMXxyPDwyMSleKHI+Pj4yNXxyPDw3KSkrKChuXnApJnJebil8MDt0PXQrbHwwO2w9KCh1fGgpJmJ8dSZoKSsoKGI+Pj4yfGI8PDMwKV4oYj4+PjEzfGI8PDE5KV4oYj4+PjIyfGI8PDEwKSkrbHwwO249bisxMzk2MTgyMjkxKyhjW2YrMTQwPj4yXXwwKSsoKHQ+Pj42fHQ8PDI2KV4odD4+PjExfHQ8PDIxKV4odD4+PjI1fHQ8PDcpKSsoKHBecikmdF5wKXwwO3U9dStufDA7bj0oKGh8YikmbHxoJmIpKygobD4+PjJ8bDw8MzApXihsPj4+MTN8bDw8MTkpXihsPj4+MjJ8bDw8MTApKStufDA7cD1wKzE2OTUxODM3MDArKGNbZisxNDQ+PjJdfDApKygodT4+PjZ8dTw8MjYpXih1Pj4+MTF8dTw8MjEpXih1Pj4+MjV8dTw8NykpKygocl50KSZ1XnIpfDA7aD1oK3B8MDtwPSgoYnxsKSZufGImbCkrKChuPj4+MnxuPDwzMCleKG4+Pj4xM3xuPDwxOSleKG4+Pj4yMnxuPDwxMCkpK3B8MDtyPXIrMTk4NjY2MTA1MSsoY1tmKzE0OD4+Ml18MCkrKChoPj4+NnxoPDwyNileKGg+Pj4xMXxoPDwyMSleKGg+Pj4yNXxoPDw3KSkrKCh0XnUpJmhedCl8MDtiPWIrcnwwO3I9KChsfG4pJnB8bCZuKSsoKHA+Pj4yfHA8PDMwKV4ocD4+PjEzfHA8PDE5KV4ocD4+PjIyfHA8PDEwKSkrcnwwO3Q9dCstMjExNzk0MDk0NisoY1tmKzE1Mj4+Ml18MCkrKChiPj4+NnxiPDwyNileKGI+Pj4xMXxiPDwyMSleKGI+Pj4yNXxiPDw3KSkrKCh1XmgpJmJedSl8MDtsPWwrdHwwO3Q9KChufHApJnJ8biZwKSsoKHI+Pj4yfHI8PDMwKV4ocj4+PjEzfHI8PDE5KV4ocj4+PjIyfHI8PDEwKSkrdHwwO3U9dSstMTgzODAxMTI1OSsoY1tmKzE1Nj4+Ml18MCkrKChsPj4+NnxsPDwyNileKGw+Pj4xMXxsPDwyMSleKGw+Pj4yNXxsPDw3KSkrKChoXmIpJmxeaCl8MDtuPW4rdXwwO3U9KChwfHIpJnR8cCZyKSsoKHQ+Pj4yfHQ8PDMwKV4odD4+PjEzfHQ8PDE5KV4odD4+PjIyfHQ8PDEwKSkrdXwwO2g9aCstMTU2NDQ4MTM3NSsoY1tmKzE2MD4+Ml18MCkrKChuPj4+NnxuPDwyNileKG4+Pj4xMXxuPDwyMSleKG4+Pj4yNXxuPDw3KSkrKChiXmwpJm5eYil8MDtwPXAraHwwO2g9KChyfHQpJnV8ciZ0KSsoKHU+Pj4yfHU8PDMwKV4odT4+PjEzfHU8PDE5KV4odT4+PjIyfHU8PDEwKSkraHwwO2I9YistMTQ3NDY2NDg4NSsoY1tmKzE2ND4+Ml18MCkrKChwPj4+NnxwPDwyNileKHA+Pj4xMXxwPDwyMSleKHA+Pj4yNXxwPDw3KSkrKChsXm4pJnBebCl8MDtyPXIrYnwwO2I9KCh0fHUpJmh8dCZ1KSsoKGg+Pj4yfGg8PDMwKV4oaD4+PjEzfGg8PDE5KV4oaD4+PjIyfGg8PDEwKSkrYnwwO2w9bCstMTAzNTIzNjQ5NisoY1tmKzE2OD4+Ml18MCkrKChyPj4+NnxyPDwyNileKHI+Pj4xMXxyPDwyMSleKHI+Pj4yNXxyPDw3KSkrKChuXnApJnJebil8MDt0PXQrbHwwO2w9KCh1fGgpJmJ8dSZoKSsoKGI+Pj4yfGI8PDMwKV4oYj4+PjEzfGI8PDE5KV4oYj4+PjIyfGI8PDEwKSkrbHwwO249bistOTQ5MjAyNTI1KyhjW2YrMTcyPj4yXXwwKSsoKHQ+Pj42fHQ8PDI2KV4odD4+PjExfHQ8PDIxKV4odD4+PjI1fHQ8PDcpKSsoKHBecikmdF5wKXwwO3U9dStufDA7bj0oKGh8YikmbHxoJmIpKygobD4+PjJ8bDw8MzApXihsPj4+MTN8bDw8MTkpXihsPj4+MjJ8bDw8MTApKStufDA7cD1wKy03Nzg5MDE0NzkrKGNbZisxNzY+PjJdfDApKygodT4+PjZ8dTw8MjYpXih1Pj4+MTF8dTw8MjEpXih1Pj4+MjV8dTw8NykpKygocl50KSZ1XnIpfDA7aD1oK3B8MDtwPSgoYnxsKSZufGImbCkrKChuPj4+MnxuPDwzMCleKG4+Pj4xM3xuPDwxOSleKG4+Pj4yMnxuPDwxMCkpK3B8MDtyPXIrLTY5NDYxNDQ5MisoY1tmKzE4MD4+Ml18MCkrKChoPj4+NnxoPDwyNileKGg+Pj4xMXxoPDwyMSleKGg+Pj4yNXxoPDw3KSkrKCh0XnUpJmhedCl8MDtiPWIrcnwwO3I9KChsfG4pJnB8bCZuKSsoKHA+Pj4yfHA8PDMwKV4ocD4+PjEzfHA8PDE5KV4ocD4+PjIyfHA8PDEwKSkrcnwwO3Q9dCstMjAwMzk1Mzg3KyhjW2YrMTg0Pj4yXXwwKSsoKGI+Pj42fGI8PDI2KV4oYj4+PjExfGI8PDIxKV4oYj4+PjI1fGI8PDcpKSsoKHVeaCkmYl51KXwwO2w9bCt0fDA7dD0oKG58cCkmcnxuJnApKygocj4+PjJ8cjw8MzApXihyPj4+MTN8cjw8MTkpXihyPj4+MjJ8cjw8MTApKSt0fDA7dT11KzI3NTQyMzM0NCsoY1tmKzE4OD4+Ml18MCkrKChsPj4+NnxsPDwyNileKGw+Pj4xMXxsPDwyMSleKGw+Pj4yNXxsPDw3KSkrKChoXmIpJmxeaCl8MDtuPW4rdXwwO3U9KChwfHIpJnR8cCZyKSsoKHQ+Pj4yfHQ8PDMwKV4odD4+PjEzfHQ8PDE5KV4odD4+PjIyfHQ8PDEwKSkrdXwwO2g9aCs0MzAyMjc3MzQrKGNbZisxOTI+PjJdfDApKygobj4+PjZ8bjw8MjYpXihuPj4+MTF8bjw8MjEpXihuPj4+MjV8bjw8NykpKygoYl5sKSZuXmIpfDA7cD1wK2h8MDtoPSgocnx0KSZ1fHImdCkrKCh1Pj4+Mnx1PDwzMCleKHU+Pj4xM3x1PDwxOSleKHU+Pj4yMnx1PDwxMCkpK2h8MDtiPWIrNTA2OTQ4NjE2KyhjW2YrMTk2Pj4yXXwwKSsoKHA+Pj42fHA8PDI2KV4ocD4+PjExfHA8PDIxKV4ocD4+PjI1fHA8PDcpKSsoKGxebikmcF5sKXwwO3I9citifDA7Yj0oKHR8dSkmaHx0JnUpKygoaD4+PjJ8aDw8MzApXihoPj4+MTN8aDw8MTkpXihoPj4+MjJ8aDw8MTApKStifDA7bD1sKzY1OTA2MDU1NisoY1tmKzIwMD4+Ml18MCkrKChyPj4+NnxyPDwyNileKHI+Pj4xMXxyPDwyMSleKHI+Pj4yNXxyPDw3KSkrKChuXnApJnJebil8MDt0PXQrbHwwO2w9KCh1fGgpJmJ8dSZoKSsoKGI+Pj4yfGI8PDMwKV4oYj4+PjEzfGI8PDE5KV4oYj4+PjIyfGI8PDEwKSkrbHwwO249bis4ODM5OTc4NzcrKGNbZisyMDQ+PjJdfDApKygodD4+PjZ8dDw8MjYpXih0Pj4+MTF8dDw8MjEpXih0Pj4+MjV8dDw8NykpKygocF5yKSZ0XnApfDA7dT11K258MDtuPSgoaHxiKSZsfGgmYikrKChsPj4+MnxsPDwzMCleKGw+Pj4xM3xsPDwxOSleKGw+Pj4yMnxsPDwxMCkpK258MDtwPXArOTU4MTM5NTcxKyhjW2YrMjA4Pj4yXXwwKSsoKHU+Pj42fHU8PDI2KV4odT4+PjExfHU8PDIxKV4odT4+PjI1fHU8PDcpKSsoKHJedCkmdV5yKXwwO2g9aCtwfDA7cD0oKGJ8bCkmbnxiJmwpKygobj4+PjJ8bjw8MzApXihuPj4+MTN8bjw8MTkpXihuPj4+MjJ8bjw8MTApKStwfDA7cj1yKzEzMjI4MjIyMTgrKGNbZisyMTI+PjJdfDApKygoaD4+PjZ8aDw8MjYpXihoPj4+MTF8aDw8MjEpXihoPj4+MjV8aDw8NykpKygodF51KSZoXnQpfDA7Yj1iK3J8MDtyPSgobHxuKSZwfGwmbikrKChwPj4+MnxwPDwzMCleKHA+Pj4xM3xwPDwxOSleKHA+Pj4yMnxwPDwxMCkpK3J8MDt0PXQrMTUzNzAwMjA2MysoY1tmKzIxNj4+Ml18MCkrKChiPj4+NnxiPDwyNileKGI+Pj4xMXxiPDwyMSleKGI+Pj4yNXxiPDw3KSkrKCh1XmgpJmJedSl8MDtsPWwrdHwwO3Q9KChufHApJnJ8biZwKSsoKHI+Pj4yfHI8PDMwKV4ocj4+PjEzfHI8PDE5KV4ocj4+PjIyfHI8PDEwKSkrdHwwO3U9dSsxNzQ3ODczNzc5KyhjW2YrMjIwPj4yXXwwKSsoKGw+Pj42fGw8PDI2KV4obD4+PjExfGw8PDIxKV4obD4+PjI1fGw8PDcpKSsoKGheYikmbF5oKXwwO249bit1fDA7dT0oKHB8cikmdHxwJnIpKygodD4+PjJ8dDw8MzApXih0Pj4+MTN8dDw8MTkpXih0Pj4+MjJ8dDw8MTApKSt1fDA7aD1oKzE5NTU1NjIyMjIrKGNbZisyMjQ+PjJdfDApKygobj4+PjZ8bjw8MjYpXihuPj4+MTF8bjw8MjEpXihuPj4+MjV8bjw8NykpKygoYl5sKSZuXmIpfDA7cD1wK2h8MDtoPSgocnx0KSZ1fHImdCkrKCh1Pj4+Mnx1PDwzMCleKHU+Pj4xM3x1PDwxOSleKHU+Pj4yMnx1PDwxMCkpK2h8MDtiPWIrMjAyNDEwNDgxNSsoY1tmKzIyOD4+Ml18MCkrKChwPj4+NnxwPDwyNileKHA+Pj4xMXxwPDwyMSleKHA+Pj4yNXxwPDw3KSkrKChsXm4pJnBebCl8MDtyPXIrYnwwO2I9KCh0fHUpJmh8dCZ1KSsoKGg+Pj4yfGg8PDMwKV4oaD4+PjEzfGg8PDE5KV4oaD4+PjIyfGg8PDEwKSkrYnwwO2w9bCstMjA2NzIzNjg0NCsoY1tmKzIzMj4+Ml18MCkrKChyPj4+NnxyPDwyNileKHI+Pj4xMXxyPDwyMSleKHI+Pj4yNXxyPDw3KSkrKChuXnApJnJebil8MDt0PXQrbHwwO2w9KCh1fGgpJmJ8dSZoKSsoKGI+Pj4yfGI8PDMwKV4oYj4+PjEzfGI8PDE5KV4oYj4+PjIyfGI8PDEwKSkrbHwwO249bistMTkzMzExNDg3MisoY1tmKzIzNj4+Ml18MCkrKCh0Pj4+Nnx0PDwyNileKHQ+Pj4xMXx0PDwyMSleKHQ+Pj4yNXx0PDw3KSkrKChwXnIpJnRecCl8MDt1PXUrbnwwO249KChofGIpJmx8aCZiKSsoKGw+Pj4yfGw8PDMwKV4obD4+PjEzfGw8PDE5KV4obD4+PjIyfGw8PDEwKSkrbnwwO3A9cCstMTg2NjUzMDgyMisoY1tmKzI0MD4+Ml18MCkrKCh1Pj4+Nnx1PDwyNileKHU+Pj4xMXx1PDwyMSleKHU+Pj4yNXx1PDw3KSkrKChyXnQpJnVecil8MDtoPWgrcHwwO3A9KChifGwpJm58YiZsKSsoKG4+Pj4yfG48PDMwKV4obj4+PjEzfG48PDE5KV4obj4+PjIyfG48PDEwKSkrcHwwO3I9cistMTUzODIzMzEwOSsoY1tmKzI0ND4+Ml18MCkrKChoPj4+NnxoPDwyNileKGg+Pj4xMXxoPDwyMSleKGg+Pj4yNXxoPDw3KSkrKCh0XnUpJmhedCl8MDtiPWIrcnwwO3I9KChsfG4pJnB8bCZuKSsoKHA+Pj4yfHA8PDMwKV4ocD4+PjEzfHA8PDE5KV4ocD4+PjIyfHA8PDEwKSkrcnwwO3Q9dCstMTA5MDkzNTgxNysoY1tmKzI0OD4+Ml18MCkrKChiPj4+NnxiPDwyNileKGI+Pj4xMXxiPDwyMSleKGI+Pj4yNXxiPDw3KSkrKCh1XmgpJmJedSl8MDtsPWwrdHwwO3Q9KChufHApJnJ8biZwKSsoKHI+Pj4yfHI8PDMwKV4ocj4+PjEzfHI8PDE5KV4ocj4+PjIyfHI8PDEwKSkrdHwwO2Y9dSstOTY1NjQxOTk4KyhjW2YrMjUyPj4yXXwwKSsoKGw+Pj42fGw8PDI2KV4obD4+PjExfGw8PDIxKV4obD4+PjI1fGw8PDcpKSsoKGheYikmbF5oKXwwO2NbYT4+Ml09KGNbYT4+Ml18MCkrKCgocHxyKSZ0fHAmcikrKCh0Pj4+Mnx0PDwzMCleKHQ+Pj4xM3x0PDwxOSleKHQ+Pj4yMnx0PDwxMCkpK2YpO2Nbcz4+Ml09KGNbcz4+Ml18MCkrdDtjW3E+PjJdPShjW3E+PjJdfDApK3I7Y1tvPj4yXT0oY1tvPj4yXXwwKStwO2NbbT4+Ml09KGNbbT4+Ml18MCkrKG4rZik7Y1trPj4yXT0oY1trPj4yXXwwKStsO2NbZT4+Ml09KGNbZT4+Ml18MCkrYjtjW2o+PjJdPShjW2o+PjJdfDApK2g7aT1nO3JldHVybn1mdW5jdGlvbiBGYihhLGIsZCxlKXthPWF8MDtiPWJ8MDtkPWR8MDtlPWV8MDt2YXIgZj0wLGc9MCxoPTAsaT0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wO2o9YSs3MnwwO209ajtvPWNbbT4+Ml18MDttPWNbbSs0Pj4yXXwwO2s9R2Qob3wwLG18MCwzKXwwO2s9ayYxMjc7bD1IZChkfDAsZXwwLDMpfDA7bj1DO2g9R2QoZHwwLGV8MCw2MSl8MDtpPUM7bT1EZChvfDAsbXwwLGx8MCxufDApfDA7bz1DO2Nbaj4+Ml09bTtjW2orND4+Ml09bztqPWErNjR8MDtnPWo7Zj1jW2c+PjJdfDA7Zz1jW2crND4+Ml18MDtpZihvPj4+MDxuPj4+MHwob3wwKT09KG58MCkmbT4+PjA8bD4+PjApe2Y9RGQoZnwwLGd8MCwxLDApfDA7Zz1DO289ajtjW28+PjJdPWY7Y1tvKzQ+PjJdPWd9aD1EZChmfDAsZ3wwLGh8MCxpfDApfDA7Zz1qO2NbZz4+Ml09aDtjW2crND4+Ml09QztnPUNkKDEyOCwwLGt8MCwwKXwwO2g9QztmPWErODAra3wwO2lmKGg+Pj4wPmU+Pj4wfChofDApPT0oZXwwKSZnPj4+MD5kPj4+MCl7SWQoZnwwLGJ8MCxkfDApfDA7cmV0dXJufUlkKGZ8MCxifDAsZ3wwKXwwO2k9YSs4MHwwO0hiKGEsaSk7Zj1iK2d8MDtnPUNkKGR8MCxlfDAsZ3wwLGh8MCl8MDtoPUM7aWYoaD4+PjA+MHwoaHwwKT09MCZnPj4+MD4xMjcpZG97SGIoYSxmKTtmPWYrMTI4fDA7Zz1EZChnfDAsaHwwLC0xMjgsLTEpfDA7aD1DfXdoaWxlKGg+Pj4wPjB8KGh8MCk9PTAmZz4+PjA+MTI3KTtJZChpfDAsZnwwLGd8MCl8MDtyZXR1cm59ZnVuY3Rpb24gR2IoYixkKXtiPWJ8MDtkPWR8MDt2YXIgZT0wLGY9MCxnPTAsaD0wLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wLHA9MCxxPTAscj0wLHM9MCx0PTAsdT0wO3M9aTtlPWk9aSs2MyYtNjQ7aT1pKzE2fDA7cj1iKzY0fDA7Zj1yO2c9Y1tmPj4yXXwwO2Y9Y1tmKzQ+PjJdfDA7YVtlKzc+PjBdPWc7cT1HZChnfDAsZnwwLDgpfDA7YVtlKzY+PjBdPXE7cT1HZChnfDAsZnwwLDE2KXwwO2FbZSs1Pj4wXT1xO3E9R2QoZ3wwLGZ8MCwyNCl8MDthW2UrND4+MF09cTthW2UrMz4+MF09ZjtxPUdkKGd8MCxmfDAsNDApfDA7YVtlKzI+PjBdPXE7cT1HZChnfDAsZnwwLDQ4KXwwO2FbZSsxPj4wXT1xO3E9R2QoZ3wwLGZ8MCw1Nil8MDthW2U+PjBdPXE7cT1iKzcyfDA7aj1xO2g9Y1tqPj4yXXwwO2o9Y1tqKzQ+PjJdfDA7YVtlKzE1Pj4wXT1oO249R2QoaHwwLGp8MCw4KXwwO2FbZSsxND4+MF09bjtuPUdkKGh8MCxqfDAsMTYpfDA7YVtlKzEzPj4wXT1uO249R2QoaHwwLGp8MCwyNCl8MDthW2UrMTI+PjBdPW47YVtlKzExPj4wXT1qO249R2QoaHwwLGp8MCw0MCl8MDthW2UrMTA+PjBdPW47bj1HZChofDAsanwwLDQ4KXwwO2FbZSs5Pj4wXT1uO249R2QoaHwwLGp8MCw1Nil8MDthW2UrOD4+MF09bjtuPUdkKGh8MCxqfDAsMyl8MDtuPW4mMTI3O289MDwwfDA9PTAmbj4+PjA8MTEyO289Q2QoKG8/MTEyOjI0MCl8MCwobz8wOjApfDAsbnwwLDApfDA7cD1DO209SGQob3wwLHB8MCwzKXwwO3Q9QztrPUdkKG98MCxwfDAsNjEpfDA7bD1DO2o9RGQobXwwLHR8MCxofDAsanwwKXwwO2g9Qzt1PXE7Y1t1Pj4yXT1qO2NbdSs0Pj4yXT1oO2lmKGg+Pj4wPHQ+Pj4wfChofDApPT0odHwwKSZqPj4+MDxtPj4+MCl7Zz1EZChnfDAsZnwwLDEsMCl8MDtmPUM7dT1yO2NbdT4+Ml09ZztjW3UrND4+Ml09Zn1nPURkKGd8MCxmfDAsa3wwLGx8MCl8MDtmPUM7bD1yO2NbbD4+Ml09ZztjW2wrND4+Ml09ZjtsPUNkKDEyOCwwLG58MCwwKXwwO209QztrPWIrODArbnwwO2lmKHA+Pj4wPG0+Pj4wfChwfDApPT0obXwwKSZvPj4+MDxsPj4+MClJZChrfDAsMzI4NTYsb3wwKXwwO2Vsc2V7SWQoa3wwLDMyODU2LGx8MCl8MDtqPWIrODB8MDtIYihiLGopO2Y9MzI4NTYrbHwwO2c9Q2Qob3wwLHB8MCxsfDAsbXwwKXwwO2g9QztpZihoPj4+MD4wfChofDApPT0wJmc+Pj4wPjEyNylkb3tIYihiLGYpO2Y9ZisxMjh8MDtnPURkKGd8MCxofDAsLTEyOCwtMSl8MDtoPUN9d2hpbGUoaD4+PjA+MHwoaHwwKT09MCZnPj4+MD4xMjcpO0lkKGp8MCxmfDAsZ3wwKXwwO2g9cTtmPXI7aj1jW2g+PjJdfDA7aD1jW2grND4+Ml18MDtnPWNbZj4+Ml18MDtmPWNbZis0Pj4yXXwwfWs9R2QoanwwLGh8MCwzKXwwO2s9ayYxMjc7dD1EZChqfDAsaHwwLDEyOCwwKXwwO3U9cTtjW3U+PjJdPXQ7Y1t1KzQ+PjJdPUM7aWYoaD4+PjA+NDI5NDk2NzI5NXwoaHwwKT09LTEmaj4+PjA+NDI5NDk2NzE2Nyl7Zz1EZChnfDAsZnwwLDEsMCl8MDtmPUM7dT1yO2NbdT4+Ml09ZztjW3UrND4+Ml09Zn1oPXI7Y1toPj4yXT1nO2NbaCs0Pj4yXT1mO2c9Q2QoMTI4LDAsa3wwLDApfDA7aD1DO2Y9Yis4MCtrfDA7aWYoaD4+PjA+MHwoaHwwKT09MCZnPj4+MD4xNil7Zz1mO2Y9ZysxNnwwO2Rve2FbZz4+MF09YVtlPj4wXXwwO2c9ZysxfDA7ZT1lKzF8MH13aGlsZSgoZ3wwKTwoZnwwKSl9ZWxzZXtJZChmfDAsZXwwLGd8MCl8MDtqPWIrODB8MDtIYihiLGopO2U9ZStnfDA7Zj1DZCgxNiwwLGd8MCxofDApfDA7Zz1DO2lmKGc+Pj4wPjB8KGd8MCk9PTAmZj4+PjA+MTI3KWRve0hiKGIsZSk7ZT1lKzEyOHwwO2Y9RGQoZnwwLGd8MCwtMTI4LC0xKXwwO2c9Q313aGlsZShnPj4+MD4wfChnfDApPT0wJmY+Pj4wPjEyNyk7SWQoanwwLGV8MCxmfDApfDB9ZT0wO2Rve3U9ZCsoZTw8Myl8MDt0PWIrKGU8PDMpfDA7cj1jW3Q+PjJdfDA7dD1jW3QrND4+Ml18MDthW3UrNz4+MF09cjtxPUdkKHJ8MCx0fDAsOCl8MDthW3UrNj4+MF09cTtxPUdkKHJ8MCx0fDAsMTYpfDA7YVt1KzU+PjBdPXE7cT1HZChyfDAsdHwwLDI0KXwwO2FbdSs0Pj4wXT1xO2FbdSszPj4wXT10O3E9R2QocnwwLHR8MCw0MCl8MDthW3UrMj4+MF09cTtxPUdkKHJ8MCx0fDAsNDgpfDA7YVt1KzE+PjBdPXE7dD1HZChyfDAsdHwwLDU2KXwwO2FbdT4+MF09dDtlPWUrMXwwfXdoaWxlKChlfDApIT04KTtGZChifDAsMCwyMDgpfDA7aT1zO3JldHVybn1cbmZ1bmN0aW9uIHlkKGEpe2E9YXwwO3ZhciBiPTAsZD0wLGU9MCxmPTAsZz0wLGg9MCxpPTAsaj0wLGs9MCxsPTAsbT0wLG49MCxvPTAscD0wLHE9MCxyPTAscz0wLHQ9MCx1PTAsdj0wLHc9MCx4PTAseT0wLHo9MCxBPTAsQj0wLEM9MCxEPTAsRT0wLEY9MCxHPTA7ZG8gaWYoYT4+PjA8MjQ1KXtvPWE+Pj4wPDExPzE2OmErMTEmLTg7YT1vPj4+MztqPWNbODAyMF18MDtiPWo+Pj5hO2lmKGImMyl7Yj0oYiYxXjEpK2F8MDtkPTMyMTIwKyhiPDwxPDwyKXwwO2U9ZCs4fDA7Zj1jW2U+PjJdfDA7Zz1mKzh8MDtoPWNbZz4+Ml18MDtkbyBpZigoZHwwKSE9KGh8MCkpe2lmKGg+Pj4wPChjWzgwMjRdfDApPj4+MClyYSgpO2E9aCsxMnwwO2lmKChjW2E+PjJdfDApPT0oZnwwKSl7Y1thPj4yXT1kO2NbZT4+Ml09aDticmVha31lbHNlIHJhKCl9ZWxzZSBjWzgwMjBdPWomfigxPDxiKTt3aGlsZSgwKTtHPWI8PDM7Y1tmKzQ+PjJdPUd8MztHPWYrRys0fDA7Y1tHPj4yXT1jW0c+PjJdfDE7Rz1nO3JldHVybiBHfDB9aD1jWzgwMjJdfDA7aWYobz4+PjA+aD4+PjApe2lmKGIpe2Q9Mjw8YTtkPWI8PGEmKGR8MC1kKTtkPShkJjAtZCkrLTF8MDtpPWQ+Pj4xMiYxNjtkPWQ+Pj5pO2Y9ZD4+PjUmODtkPWQ+Pj5mO2c9ZD4+PjImNDtkPWQ+Pj5nO2U9ZD4+PjEmMjtkPWQ+Pj5lO2I9ZD4+PjEmMTtiPShmfGl8Z3xlfGIpKyhkPj4+Yil8MDtkPTMyMTIwKyhiPDwxPDwyKXwwO2U9ZCs4fDA7Zz1jW2U+PjJdfDA7aT1nKzh8MDtmPWNbaT4+Ml18MDtkbyBpZigoZHwwKSE9KGZ8MCkpe2lmKGY+Pj4wPChjWzgwMjRdfDApPj4+MClyYSgpO2E9ZisxMnwwO2lmKChjW2E+PjJdfDApPT0oZ3wwKSl7Y1thPj4yXT1kO2NbZT4+Ml09ZjtrPWNbODAyMl18MDticmVha31lbHNlIHJhKCl9ZWxzZXtjWzgwMjBdPWomfigxPDxiKTtrPWh9d2hpbGUoMCk7aD0oYjw8Myktb3wwO2NbZys0Pj4yXT1vfDM7ZT1nK298MDtjW2UrND4+Ml09aHwxO2NbZStoPj4yXT1oO2lmKGspe2Y9Y1s4MDI1XXwwO2I9az4+PjM7ZD0zMjEyMCsoYjw8MTw8Mil8MDthPWNbODAyMF18MDtiPTE8PGI7aWYoYSZiKXthPWQrOHwwO2I9Y1thPj4yXXwwO2lmKGI+Pj4wPChjWzgwMjRdfDApPj4+MClyYSgpO2Vsc2V7bD1hO209Yn19ZWxzZXtjWzgwMjBdPWF8YjtsPWQrOHwwO209ZH1jW2w+PjJdPWY7Y1ttKzEyPj4yXT1mO2NbZis4Pj4yXT1tO2NbZisxMj4+Ml09ZH1jWzgwMjJdPWg7Y1s4MDI1XT1lO0c9aTtyZXR1cm4gR3wwfWE9Y1s4MDIxXXwwO2lmKGEpe2k9KGEmMC1hKSstMXwwO0Y9aT4+PjEyJjE2O2k9aT4+PkY7RT1pPj4+NSY4O2k9aT4+PkU7Rz1pPj4+MiY0O2k9aT4+Pkc7Yj1pPj4+MSYyO2k9aT4+PmI7aj1pPj4+MSYxO2o9Y1szMjM4NCsoKEV8RnxHfGJ8aikrKGk+Pj5qKTw8Mik+PjJdfDA7aT0oY1tqKzQ+PjJdJi04KS1vfDA7Yj1qO3doaWxlKDEpe2E9Y1tiKzE2Pj4yXXwwO2lmKCFhKXthPWNbYisyMD4+Ml18MDtpZighYSlicmVha31iPShjW2ErND4+Ml0mLTgpLW98MDtHPWI+Pj4wPGk+Pj4wO2k9Rz9iOmk7Yj1hO2o9Rz9hOmp9Zj1jWzgwMjRdfDA7aWYoaj4+PjA8Zj4+PjApcmEoKTtoPWorb3wwO2lmKGo+Pj4wPj1oPj4+MClyYSgpO2c9Y1tqKzI0Pj4yXXwwO2Q9Y1tqKzEyPj4yXXwwO2RvIGlmKChkfDApPT0oanwwKSl7Yj1qKzIwfDA7YT1jW2I+PjJdfDA7aWYoIWEpe2I9aisxNnwwO2E9Y1tiPj4yXXwwO2lmKCFhKXtuPTA7YnJlYWt9fXdoaWxlKDEpe2Q9YSsyMHwwO2U9Y1tkPj4yXXwwO2lmKGUpe2E9ZTtiPWQ7Y29udGludWV9ZD1hKzE2fDA7ZT1jW2Q+PjJdfDA7aWYoIWUpYnJlYWs7ZWxzZXthPWU7Yj1kfX1pZihiPj4+MDxmPj4+MClyYSgpO2Vsc2V7Y1tiPj4yXT0wO249YTticmVha319ZWxzZXtlPWNbais4Pj4yXXwwO2lmKGU+Pj4wPGY+Pj4wKXJhKCk7YT1lKzEyfDA7aWYoKGNbYT4+Ml18MCkhPShqfDApKXJhKCk7Yj1kKzh8MDtpZigoY1tiPj4yXXwwKT09KGp8MCkpe2NbYT4+Ml09ZDtjW2I+PjJdPWU7bj1kO2JyZWFrfWVsc2UgcmEoKX13aGlsZSgwKTtkbyBpZihnKXthPWNbaisyOD4+Ml18MDtiPTMyMzg0KyhhPDwyKXwwO2lmKChqfDApPT0oY1tiPj4yXXwwKSl7Y1tiPj4yXT1uO2lmKCFuKXtjWzgwMjFdPWNbODAyMV0mfigxPDxhKTticmVha319ZWxzZXtpZihnPj4+MDwoY1s4MDI0XXwwKT4+PjApcmEoKTthPWcrMTZ8MDtpZigoY1thPj4yXXwwKT09KGp8MCkpY1thPj4yXT1uO2Vsc2UgY1tnKzIwPj4yXT1uO2lmKCFuKWJyZWFrfWI9Y1s4MDI0XXwwO2lmKG4+Pj4wPGI+Pj4wKXJhKCk7Y1tuKzI0Pj4yXT1nO2E9Y1tqKzE2Pj4yXXwwO2RvIGlmKGEpaWYoYT4+PjA8Yj4+PjApcmEoKTtlbHNle2NbbisxNj4+Ml09YTtjW2ErMjQ+PjJdPW47YnJlYWt9d2hpbGUoMCk7YT1jW2orMjA+PjJdfDA7aWYoYSlpZihhPj4+MDwoY1s4MDI0XXwwKT4+PjApcmEoKTtlbHNle2NbbisyMD4+Ml09YTtjW2ErMjQ+PjJdPW47YnJlYWt9fXdoaWxlKDApO2lmKGk+Pj4wPDE2KXtHPWkrb3wwO2Nbais0Pj4yXT1HfDM7Rz1qK0crNHwwO2NbRz4+Ml09Y1tHPj4yXXwxfWVsc2V7Y1tqKzQ+PjJdPW98MztjW2grND4+Ml09aXwxO2NbaCtpPj4yXT1pO2E9Y1s4MDIyXXwwO2lmKGEpe2U9Y1s4MDI1XXwwO2I9YT4+PjM7ZD0zMjEyMCsoYjw8MTw8Mil8MDthPWNbODAyMF18MDtiPTE8PGI7aWYoYSZiKXthPWQrOHwwO2I9Y1thPj4yXXwwO2lmKGI+Pj4wPChjWzgwMjRdfDApPj4+MClyYSgpO2Vsc2V7cD1hO3E9Yn19ZWxzZXtjWzgwMjBdPWF8YjtwPWQrOHwwO3E9ZH1jW3A+PjJdPWU7Y1txKzEyPj4yXT1lO2NbZSs4Pj4yXT1xO2NbZSsxMj4+Ml09ZH1jWzgwMjJdPWk7Y1s4MDI1XT1ofUc9ais4fDA7cmV0dXJuIEd8MH19fWVsc2UgaWYoYT4+PjA8PTQyOTQ5NjcyMzEpe2E9YSsxMXwwO289YSYtODtrPWNbODAyMV18MDtpZihrKXtkPTAtb3wwO2E9YT4+Pjg7aWYoYSlpZihvPj4+MD4xNjc3NzIxNSlqPTMxO2Vsc2V7cT0oYSsxMDQ4MzIwfDApPj4+MTYmODt6PWE8PHE7cD0oeis1MjAxOTJ8MCk+Pj4xNiY0O3o9ejw8cDtqPSh6KzI0NTc2MHwwKT4+PjE2JjI7aj0xNC0ocHxxfGopKyh6PDxqPj4+MTUpfDA7aj1vPj4+KGorN3wwKSYxfGo8PDF9ZWxzZSBqPTA7Yj1jWzMyMzg0KyhqPDwyKT4+Ml18MDthOmRvIGlmKCFiKXthPTA7Yj0wO3o9ODZ9ZWxzZXtmPWQ7YT0wO2g9bzw8KChqfDApPT0zMT8wOjI1LShqPj4+MSl8MCk7aT1iO2I9MDt3aGlsZSgxKXtlPWNbaSs0Pj4yXSYtODtkPWUtb3wwO2lmKGQ+Pj4wPGY+Pj4wKWlmKChlfDApPT0ob3wwKSl7YT1pO2I9aTt6PTkwO2JyZWFrIGF9ZWxzZSBiPWk7ZWxzZSBkPWY7ZT1jW2krMjA+PjJdfDA7aT1jW2krMTYrKGg+Pj4zMTw8Mik+PjJdfDA7YT0oZXwwKT09MHwoZXwwKT09KGl8MCk/YTplO2U9KGl8MCk9PTA7aWYoZSl7ej04NjticmVha31lbHNle2Y9ZDtoPWg8PChlJjFeMSl9fX13aGlsZSgwKTtpZigoenwwKT09ODYpe2lmKChhfDApPT0wJihifDApPT0wKXthPTI8PGo7YT1rJihhfDAtYSk7aWYoIWEpYnJlYWs7cT0oYSYwLWEpKy0xfDA7bT1xPj4+MTImMTY7cT1xPj4+bTtsPXE+Pj41Jjg7cT1xPj4+bDtuPXE+Pj4yJjQ7cT1xPj4+bjtwPXE+Pj4xJjI7cT1xPj4+cDthPXE+Pj4xJjE7YT1jWzMyMzg0KygobHxtfG58cHxhKSsocT4+PmEpPDwyKT4+Ml18MH1pZighYSl7aT1kO2o9Yn1lbHNlIHo9OTB9aWYoKHp8MCk9PTkwKXdoaWxlKDEpe3o9MDtxPShjW2ErND4+Ml0mLTgpLW98MDtlPXE+Pj4wPGQ+Pj4wO2Q9ZT9xOmQ7Yj1lP2E6YjtlPWNbYSsxNj4+Ml18MDtpZihlKXthPWU7ej05MDtjb250aW51ZX1hPWNbYSsyMD4+Ml18MDtpZighYSl7aT1kO2o9YjticmVha31lbHNlIHo9OTB9aWYoKGp8MCkhPTA/aT4+PjA8KChjWzgwMjJdfDApLW98MCk+Pj4wOjApe2Y9Y1s4MDI0XXwwO2lmKGo+Pj4wPGY+Pj4wKXJhKCk7aD1qK298MDtpZihqPj4+MD49aD4+PjApcmEoKTtnPWNbaisyND4+Ml18MDtkPWNbaisxMj4+Ml18MDtkbyBpZigoZHwwKT09KGp8MCkpe2I9aisyMHwwO2E9Y1tiPj4yXXwwO2lmKCFhKXtiPWorMTZ8MDthPWNbYj4+Ml18MDtpZighYSl7cz0wO2JyZWFrfX13aGlsZSgxKXtkPWErMjB8MDtlPWNbZD4+Ml18MDtpZihlKXthPWU7Yj1kO2NvbnRpbnVlfWQ9YSsxNnwwO2U9Y1tkPj4yXXwwO2lmKCFlKWJyZWFrO2Vsc2V7YT1lO2I9ZH19aWYoYj4+PjA8Zj4+PjApcmEoKTtlbHNle2NbYj4+Ml09MDtzPWE7YnJlYWt9fWVsc2V7ZT1jW2orOD4+Ml18MDtpZihlPj4+MDxmPj4+MClyYSgpO2E9ZSsxMnwwO2lmKChjW2E+PjJdfDApIT0oanwwKSlyYSgpO2I9ZCs4fDA7aWYoKGNbYj4+Ml18MCk9PShqfDApKXtjW2E+PjJdPWQ7Y1tiPj4yXT1lO3M9ZDticmVha31lbHNlIHJhKCl9d2hpbGUoMCk7ZG8gaWYoZyl7YT1jW2orMjg+PjJdfDA7Yj0zMjM4NCsoYTw8Mil8MDtpZigoanwwKT09KGNbYj4+Ml18MCkpe2NbYj4+Ml09cztpZighcyl7Y1s4MDIxXT1jWzgwMjFdJn4oMTw8YSk7YnJlYWt9fWVsc2V7aWYoZz4+PjA8KGNbODAyNF18MCk+Pj4wKXJhKCk7YT1nKzE2fDA7aWYoKGNbYT4+Ml18MCk9PShqfDApKWNbYT4+Ml09cztlbHNlIGNbZysyMD4+Ml09cztpZighcylicmVha31iPWNbODAyNF18MDtpZihzPj4+MDxiPj4+MClyYSgpO2NbcysyND4+Ml09ZzthPWNbaisxNj4+Ml18MDtkbyBpZihhKWlmKGE+Pj4wPGI+Pj4wKXJhKCk7ZWxzZXtjW3MrMTY+PjJdPWE7Y1thKzI0Pj4yXT1zO2JyZWFrfXdoaWxlKDApO2E9Y1tqKzIwPj4yXXwwO2lmKGEpaWYoYT4+PjA8KGNbODAyNF18MCk+Pj4wKXJhKCk7ZWxzZXtjW3MrMjA+PjJdPWE7Y1thKzI0Pj4yXT1zO2JyZWFrfX13aGlsZSgwKTtkbyBpZihpPj4+MD49MTYpe2Nbais0Pj4yXT1vfDM7Y1toKzQ+PjJdPWl8MTtjW2graT4+Ml09aTthPWk+Pj4zO2lmKGk+Pj4wPDI1Nil7ZD0zMjEyMCsoYTw8MTw8Mil8MDtiPWNbODAyMF18MDthPTE8PGE7aWYoYiZhKXthPWQrOHwwO2I9Y1thPj4yXXwwO2lmKGI+Pj4wPChjWzgwMjRdfDApPj4+MClyYSgpO2Vsc2V7dD1hO3Y9Yn19ZWxzZXtjWzgwMjBdPWJ8YTt0PWQrOHwwO3Y9ZH1jW3Q+PjJdPWg7Y1t2KzEyPj4yXT1oO2NbaCs4Pj4yXT12O2NbaCsxMj4+Ml09ZDticmVha31hPWk+Pj44O2lmKGEpaWYoaT4+PjA+MTY3NzcyMTUpZD0zMTtlbHNle0Y9KGErMTA0ODMyMHwwKT4+PjE2Jjg7Rz1hPDxGO0U9KEcrNTIwMTkyfDApPj4+MTYmNDtHPUc8PEU7ZD0oRysyNDU3NjB8MCk+Pj4xNiYyO2Q9MTQtKEV8RnxkKSsoRzw8ZD4+PjE1KXwwO2Q9aT4+PihkKzd8MCkmMXxkPDwxfWVsc2UgZD0wO2U9MzIzODQrKGQ8PDIpfDA7Y1toKzI4Pj4yXT1kO2E9aCsxNnwwO2NbYSs0Pj4yXT0wO2NbYT4+Ml09MDthPWNbODAyMV18MDtiPTE8PGQ7aWYoIShhJmIpKXtjWzgwMjFdPWF8YjtjW2U+PjJdPWg7Y1toKzI0Pj4yXT1lO2NbaCsxMj4+Ml09aDtjW2grOD4+Ml09aDticmVha31kPWk8PCgoZHwwKT09MzE/MDoyNS0oZD4+PjEpfDApO2U9Y1tlPj4yXXwwO3doaWxlKDEpe2lmKChjW2UrND4+Ml0mLTh8MCk9PShpfDApKXt6PTE0ODticmVha31iPWUrMTYrKGQ+Pj4zMTw8Mil8MDthPWNbYj4+Ml18MDtpZighYSl7ej0xNDU7YnJlYWt9ZWxzZXtkPWQ8PDE7ZT1hfX1pZigoenwwKT09MTQ1KWlmKGI+Pj4wPChjWzgwMjRdfDApPj4+MClyYSgpO2Vsc2V7Y1tiPj4yXT1oO2NbaCsyND4+Ml09ZTtjW2grMTI+PjJdPWg7Y1toKzg+PjJdPWg7YnJlYWt9ZWxzZSBpZigoenwwKT09MTQ4KXthPWUrOHwwO2I9Y1thPj4yXXwwO0c9Y1s4MDI0XXwwO2lmKGI+Pj4wPj1HPj4+MCZlPj4+MD49Rz4+PjApe2NbYisxMj4+Ml09aDtjW2E+PjJdPWg7Y1toKzg+PjJdPWI7Y1toKzEyPj4yXT1lO2NbaCsyND4+Ml09MDticmVha31lbHNlIHJhKCl9fWVsc2V7Rz1pK298MDtjW2orND4+Ml09R3wzO0c9aitHKzR8MDtjW0c+PjJdPWNbRz4+Ml18MX13aGlsZSgwKTtHPWorOHwwO3JldHVybiBHfDB9fX1lbHNlIG89LTE7d2hpbGUoMCk7ZD1jWzgwMjJdfDA7aWYoZD4+PjA+PW8+Pj4wKXthPWQtb3wwO2I9Y1s4MDI1XXwwO2lmKGE+Pj4wPjE1KXtHPWIrb3wwO2NbODAyNV09RztjWzgwMjJdPWE7Y1tHKzQ+PjJdPWF8MTtjW0crYT4+Ml09YTtjW2IrND4+Ml09b3wzfWVsc2V7Y1s4MDIyXT0wO2NbODAyNV09MDtjW2IrND4+Ml09ZHwzO0c9YitkKzR8MDtjW0c+PjJdPWNbRz4+Ml18MX1HPWIrOHwwO3JldHVybiBHfDB9YT1jWzgwMjNdfDA7aWYoYT4+PjA+bz4+PjApe0U9YS1vfDA7Y1s4MDIzXT1FO0c9Y1s4MDI2XXwwO0Y9RytvfDA7Y1s4MDI2XT1GO2NbRis0Pj4yXT1FfDE7Y1tHKzQ+PjJdPW98MztHPUcrOHwwO3JldHVybiBHfDB9ZG8gaWYoIShjWzgxMzhdfDApKXthPW5hKDMwKXwwO2lmKCEoYSstMSZhKSl7Y1s4MTQwXT1hO2NbODEzOV09YTtjWzgxNDFdPS0xO2NbODE0Ml09LTE7Y1s4MTQzXT0wO2NbODEzMV09MDtjWzgxMzhdPSh0YSgwKXwwKSYtMTZeMTQzMTY1NTc2ODticmVha31lbHNlIHJhKCl9d2hpbGUoMCk7aD1vKzQ4fDA7ZT1jWzgxNDBdfDA7aT1vKzQ3fDA7ZD1lK2l8MDtlPTAtZXwwO2o9ZCZlO2lmKGo+Pj4wPD1vPj4+MCl7Rz0wO3JldHVybiBHfDB9YT1jWzgxMzBdfDA7aWYoKGF8MCkhPTA/KHQ9Y1s4MTI4XXwwLHY9dCtqfDAsdj4+PjA8PXQ+Pj4wfHY+Pj4wPmE+Pj4wKTowKXtHPTA7cmV0dXJuIEd8MH1iOmRvIGlmKCEoY1s4MTMxXSY0KSl7Yj1jWzgwMjZdfDA7YzpkbyBpZihiKXtmPTMyNTI4O3doaWxlKDEpe2E9Y1tmPj4yXXwwO2lmKGE+Pj4wPD1iPj4+MD8ocj1mKzR8MCwoYSsoY1tyPj4yXXwwKXwwKT4+PjA+Yj4+PjApOjApYnJlYWs7YT1jW2YrOD4+Ml18MDtpZighYSl7ej0xNzM7YnJlYWsgY31lbHNlIGY9YX1hPWQtKGNbODAyM118MCkmZTtpZihhPj4+MDwyMTQ3NDgzNjQ3KXtiPXNhKGF8MCl8MDtpZigoYnwwKT09KChjW2Y+PjJdfDApKyhjW3I+PjJdfDApfDApKXtpZigoYnwwKSE9KC0xfDApKXtoPWI7Zz1hO3o9MTkzO2JyZWFrIGJ9fWVsc2Ugej0xODN9fWVsc2Ugej0xNzM7d2hpbGUoMCk7ZG8gaWYoKHp8MCk9PTE3Mz8odT1zYSgwKXwwLCh1fDApIT0oLTF8MCkpOjApe2E9dTtiPWNbODEzOV18MDtkPWIrLTF8MDtpZighKGQmYSkpYT1qO2Vsc2UgYT1qLWErKGQrYSYwLWIpfDA7Yj1jWzgxMjhdfDA7ZD1iK2F8MDtpZihhPj4+MD5vPj4+MCZhPj4+MDwyMTQ3NDgzNjQ3KXt2PWNbODEzMF18MDtpZigodnwwKSE9MD9kPj4+MDw9Yj4+PjB8ZD4+PjA+dj4+PjA6MClicmVhaztiPXNhKGF8MCl8MDtpZigoYnwwKT09KHV8MCkpe2g9dTtnPWE7ej0xOTM7YnJlYWsgYn1lbHNlIHo9MTgzfX13aGlsZSgwKTtkOmRvIGlmKCh6fDApPT0xODMpe2Q9MC1hfDA7ZG8gaWYoaD4+PjA+YT4+PjAmKGE+Pj4wPDIxNDc0ODM2NDcmKGJ8MCkhPSgtMXwwKSk/KHc9Y1s4MTQwXXwwLHc9aS1hK3cmMC13LHc+Pj4wPDIxNDc0ODM2NDcpOjApaWYoKHNhKHd8MCl8MCk9PSgtMXwwKSl7c2EoZHwwKXwwO2JyZWFrIGR9ZWxzZXthPXcrYXwwO2JyZWFrfXdoaWxlKDApO2lmKChifDApIT0oLTF8MCkpe2g9YjtnPWE7ej0xOTM7YnJlYWsgYn19d2hpbGUoMCk7Y1s4MTMxXT1jWzgxMzFdfDQ7ej0xOTB9ZWxzZSB6PTE5MDt3aGlsZSgwKTtpZigoKCh6fDApPT0xOTA/aj4+PjA8MjE0NzQ4MzY0NzowKT8oeD1zYShqfDApfDAseT1zYSgwKXwwLHg+Pj4wPHk+Pj4wJigoeHwwKSE9KC0xfDApJih5fDApIT0oLTF8MCkpKTowKT8oZz15LXh8MCxnPj4+MD4obys0MHwwKT4+PjApOjApe2g9eDt6PTE5M31pZigoenwwKT09MTkzKXthPShjWzgxMjhdfDApK2d8MDtjWzgxMjhdPWE7aWYoYT4+PjA+KGNbODEyOV18MCk+Pj4wKWNbODEyOV09YTtrPWNbODAyNl18MDtkbyBpZihrKXtmPTMyNTI4O3doaWxlKDEpe2E9Y1tmPj4yXXwwO2I9Zis0fDA7ZD1jW2I+PjJdfDA7aWYoKGh8MCk9PShhK2R8MCkpe3o9MjAzO2JyZWFrfWU9Y1tmKzg+PjJdfDA7aWYoIWUpYnJlYWs7ZWxzZSBmPWV9aWYoKCh6fDApPT0yMDM/KGNbZisxMj4+Ml0mOHwwKT09MDowKT9rPj4+MDxoPj4+MCZrPj4+MD49YT4+PjA6MCl7Y1tiPj4yXT1kK2c7Rz1rKzh8MDtHPShHJjd8MCk9PTA/MDowLUcmNztGPWsrR3wwO0c9Zy1HKyhjWzgwMjNdfDApfDA7Y1s4MDI2XT1GO2NbODAyM109RztjW0YrND4+Ml09R3wxO2NbRitHKzQ+PjJdPTQwO2NbODAyN109Y1s4MTQyXTticmVha31hPWNbODAyNF18MDtpZihoPj4+MDxhPj4+MCl7Y1s4MDI0XT1oO2k9aH1lbHNlIGk9YTtiPWgrZ3wwO2E9MzI1Mjg7d2hpbGUoMSl7aWYoKGNbYT4+Ml18MCk9PShifDApKXt6PTIxMTticmVha31hPWNbYSs4Pj4yXXwwO2lmKCFhKXtiPTMyNTI4O2JyZWFrfX1pZigoenwwKT09MjExKWlmKCEoY1thKzEyPj4yXSY4KSl7Y1thPj4yXT1oO209YSs0fDA7Y1ttPj4yXT0oY1ttPj4yXXwwKStnO209aCs4fDA7bT1oKygobSY3fDApPT0wPzA6MC1tJjcpfDA7YT1iKzh8MDthPWIrKChhJjd8MCk9PTA/MDowLWEmNyl8MDtsPW0rb3wwO2o9YS1tLW98MDtjW20rND4+Ml09b3wzO2RvIGlmKChhfDApIT0oa3wwKSl7aWYoKGF8MCk9PShjWzgwMjVdfDApKXtHPShjWzgwMjJdfDApK2p8MDtjWzgwMjJdPUc7Y1s4MDI1XT1sO2NbbCs0Pj4yXT1HfDE7Y1tsK0c+PjJdPUc7YnJlYWt9Yj1jW2ErND4+Ml18MDtpZigoYiYzfDApPT0xKXtoPWImLTg7Zj1iPj4+MztlOmRvIGlmKGI+Pj4wPj0yNTYpe2c9Y1thKzI0Pj4yXXwwO2U9Y1thKzEyPj4yXXwwO2RvIGlmKChlfDApPT0oYXwwKSl7ZT1hKzE2fDA7ZD1lKzR8MDtiPWNbZD4+Ml18MDtpZighYil7Yj1jW2U+PjJdfDA7aWYoIWIpe0U9MDticmVha31lbHNlIGQ9ZX13aGlsZSgxKXtlPWIrMjB8MDtmPWNbZT4+Ml18MDtpZihmKXtiPWY7ZD1lO2NvbnRpbnVlfWU9YisxNnwwO2Y9Y1tlPj4yXXwwO2lmKCFmKWJyZWFrO2Vsc2V7Yj1mO2Q9ZX19aWYoZD4+PjA8aT4+PjApcmEoKTtlbHNle2NbZD4+Ml09MDtFPWI7YnJlYWt9fWVsc2V7Zj1jW2ErOD4+Ml18MDtpZihmPj4+MDxpPj4+MClyYSgpO2I9ZisxMnwwO2lmKChjW2I+PjJdfDApIT0oYXwwKSlyYSgpO2Q9ZSs4fDA7aWYoKGNbZD4+Ml18MCk9PShhfDApKXtjW2I+PjJdPWU7Y1tkPj4yXT1mO0U9ZTticmVha31lbHNlIHJhKCl9d2hpbGUoMCk7aWYoIWcpYnJlYWs7Yj1jW2ErMjg+PjJdfDA7ZD0zMjM4NCsoYjw8Mil8MDtkbyBpZigoYXwwKSE9KGNbZD4+Ml18MCkpe2lmKGc+Pj4wPChjWzgwMjRdfDApPj4+MClyYSgpO2I9ZysxNnwwO2lmKChjW2I+PjJdfDApPT0oYXwwKSljW2I+PjJdPUU7ZWxzZSBjW2crMjA+PjJdPUU7aWYoIUUpYnJlYWsgZX1lbHNle2NbZD4+Ml09RTtpZihFKWJyZWFrO2NbODAyMV09Y1s4MDIxXSZ+KDE8PGIpO2JyZWFrIGV9d2hpbGUoMCk7ZT1jWzgwMjRdfDA7aWYoRT4+PjA8ZT4+PjApcmEoKTtjW0UrMjQ+PjJdPWc7Yj1hKzE2fDA7ZD1jW2I+PjJdfDA7ZG8gaWYoZClpZihkPj4+MDxlPj4+MClyYSgpO2Vsc2V7Y1tFKzE2Pj4yXT1kO2NbZCsyND4+Ml09RTticmVha313aGlsZSgwKTtiPWNbYis0Pj4yXXwwO2lmKCFiKWJyZWFrO2lmKGI+Pj4wPChjWzgwMjRdfDApPj4+MClyYSgpO2Vsc2V7Y1tFKzIwPj4yXT1iO2NbYisyND4+Ml09RTticmVha319ZWxzZXtkPWNbYSs4Pj4yXXwwO2U9Y1thKzEyPj4yXXwwO2I9MzIxMjArKGY8PDE8PDIpfDA7ZG8gaWYoKGR8MCkhPShifDApKXtpZihkPj4+MDxpPj4+MClyYSgpO2lmKChjW2QrMTI+PjJdfDApPT0oYXwwKSlicmVhaztyYSgpfXdoaWxlKDApO2lmKChlfDApPT0oZHwwKSl7Y1s4MDIwXT1jWzgwMjBdJn4oMTw8Zik7YnJlYWt9ZG8gaWYoKGV8MCk9PShifDApKUI9ZSs4fDA7ZWxzZXtpZihlPj4+MDxpPj4+MClyYSgpO2I9ZSs4fDA7aWYoKGNbYj4+Ml18MCk9PShhfDApKXtCPWI7YnJlYWt9cmEoKX13aGlsZSgwKTtjW2QrMTI+PjJdPWU7Y1tCPj4yXT1kfXdoaWxlKDApO2E9YStofDA7Zj1oK2p8MH1lbHNlIGY9ajthPWErNHwwO2NbYT4+Ml09Y1thPj4yXSYtMjtjW2wrND4+Ml09ZnwxO2NbbCtmPj4yXT1mO2E9Zj4+PjM7aWYoZj4+PjA8MjU2KXtkPTMyMTIwKyhhPDwxPDwyKXwwO2I9Y1s4MDIwXXwwO2E9MTw8YTtkbyBpZighKGImYSkpe2NbODAyMF09YnxhO0Y9ZCs4fDA7Rz1kfWVsc2V7YT1kKzh8MDtiPWNbYT4+Ml18MDtpZihiPj4+MD49KGNbODAyNF18MCk+Pj4wKXtGPWE7Rz1iO2JyZWFrfXJhKCl9d2hpbGUoMCk7Y1tGPj4yXT1sO2NbRysxMj4+Ml09bDtjW2wrOD4+Ml09RztjW2wrMTI+PjJdPWQ7YnJlYWt9YT1mPj4+ODtkbyBpZighYSlkPTA7ZWxzZXtpZihmPj4+MD4xNjc3NzIxNSl7ZD0zMTticmVha31GPShhKzEwNDgzMjB8MCk+Pj4xNiY4O0c9YTw8RjtFPShHKzUyMDE5MnwwKT4+PjE2JjQ7Rz1HPDxFO2Q9KEcrMjQ1NzYwfDApPj4+MTYmMjtkPTE0LShFfEZ8ZCkrKEc8PGQ+Pj4xNSl8MDtkPWY+Pj4oZCs3fDApJjF8ZDw8MX13aGlsZSgwKTtlPTMyMzg0KyhkPDwyKXwwO2NbbCsyOD4+Ml09ZDthPWwrMTZ8MDtjW2ErND4+Ml09MDtjW2E+PjJdPTA7YT1jWzgwMjFdfDA7Yj0xPDxkO2lmKCEoYSZiKSl7Y1s4MDIxXT1hfGI7Y1tlPj4yXT1sO2NbbCsyND4+Ml09ZTtjW2wrMTI+PjJdPWw7Y1tsKzg+PjJdPWw7YnJlYWt9ZD1mPDwoKGR8MCk9PTMxPzA6MjUtKGQ+Pj4xKXwwKTtlPWNbZT4+Ml18MDt3aGlsZSgxKXtpZigoY1tlKzQ+PjJdJi04fDApPT0oZnwwKSl7ej0yODE7YnJlYWt9Yj1lKzE2KyhkPj4+MzE8PDIpfDA7YT1jW2I+PjJdfDA7aWYoIWEpe3o9Mjc4O2JyZWFrfWVsc2V7ZD1kPDwxO2U9YX19aWYoKHp8MCk9PTI3OClpZihiPj4+MDwoY1s4MDI0XXwwKT4+PjApcmEoKTtlbHNle2NbYj4+Ml09bDtjW2wrMjQ+PjJdPWU7Y1tsKzEyPj4yXT1sO2NbbCs4Pj4yXT1sO2JyZWFrfWVsc2UgaWYoKHp8MCk9PTI4MSl7YT1lKzh8MDtiPWNbYT4+Ml18MDtHPWNbODAyNF18MDtpZihiPj4+MD49Rz4+PjAmZT4+PjA+PUc+Pj4wKXtjW2IrMTI+PjJdPWw7Y1thPj4yXT1sO2NbbCs4Pj4yXT1iO2NbbCsxMj4+Ml09ZTtjW2wrMjQ+PjJdPTA7YnJlYWt9ZWxzZSByYSgpfX1lbHNle0c9KGNbODAyM118MCkranwwO2NbODAyM109RztjWzgwMjZdPWw7Y1tsKzQ+PjJdPUd8MX13aGlsZSgwKTtHPW0rOHwwO3JldHVybiBHfDB9ZWxzZSBiPTMyNTI4O3doaWxlKDEpe2E9Y1tiPj4yXXwwO2lmKGE+Pj4wPD1rPj4+MD8oQT1hKyhjW2IrND4+Ml18MCl8MCxBPj4+MD5rPj4+MCk6MClicmVhaztiPWNbYis4Pj4yXXwwfWY9QSstNDd8MDtiPWYrOHwwO2I9ZisoKGImN3wwKT09MD8wOjAtYiY3KXwwO2Y9aysxNnwwO2I9Yj4+PjA8Zj4+PjA/azpiO2E9Yis4fDA7ZD1oKzh8MDtkPShkJjd8MCk9PTA/MDowLWQmNztHPWgrZHwwO2Q9ZystNDAtZHwwO2NbODAyNl09RztjWzgwMjNdPWQ7Y1tHKzQ+PjJdPWR8MTtjW0crZCs0Pj4yXT00MDtjWzgwMjddPWNbODE0Ml07ZD1iKzR8MDtjW2Q+PjJdPTI3O2NbYT4+Ml09Y1s4MTMyXTtjW2ErND4+Ml09Y1s4MTMzXTtjW2ErOD4+Ml09Y1s4MTM0XTtjW2ErMTI+PjJdPWNbODEzNV07Y1s4MTMyXT1oO2NbODEzM109ZztjWzgxMzVdPTA7Y1s4MTM0XT1hO2E9YisyNHwwO2Rve2E9YSs0fDA7Y1thPj4yXT03fXdoaWxlKChhKzR8MCk+Pj4wPEE+Pj4wKTtpZigoYnwwKSE9KGt8MCkpe2c9Yi1rfDA7Y1tkPj4yXT1jW2Q+PjJdJi0yO2Nbays0Pj4yXT1nfDE7Y1tiPj4yXT1nO2E9Zz4+PjM7aWYoZz4+PjA8MjU2KXtkPTMyMTIwKyhhPDwxPDwyKXwwO2I9Y1s4MDIwXXwwO2E9MTw8YTtpZihiJmEpe2E9ZCs4fDA7Yj1jW2E+PjJdfDA7aWYoYj4+PjA8KGNbODAyNF18MCk+Pj4wKXJhKCk7ZWxzZXtDPWE7RD1ifX1lbHNle2NbODAyMF09YnxhO0M9ZCs4fDA7RD1kfWNbQz4+Ml09aztjW0QrMTI+PjJdPWs7Y1trKzg+PjJdPUQ7Y1trKzEyPj4yXT1kO2JyZWFrfWE9Zz4+Pjg7aWYoYSlpZihnPj4+MD4xNjc3NzIxNSlkPTMxO2Vsc2V7Rj0oYSsxMDQ4MzIwfDApPj4+MTYmODtHPWE8PEY7RT0oRys1MjAxOTJ8MCk+Pj4xNiY0O0c9Rzw8RTtkPShHKzI0NTc2MHwwKT4+PjE2JjI7ZD0xNC0oRXxGfGQpKyhHPDxkPj4+MTUpfDA7ZD1nPj4+KGQrN3wwKSYxfGQ8PDF9ZWxzZSBkPTA7ZT0zMjM4NCsoZDw8Mil8MDtjW2srMjg+PjJdPWQ7Y1trKzIwPj4yXT0wO2NbZj4+Ml09MDthPWNbODAyMV18MDtiPTE8PGQ7aWYoIShhJmIpKXtjWzgwMjFdPWF8YjtjW2U+PjJdPWs7Y1trKzI0Pj4yXT1lO2NbaysxMj4+Ml09aztjW2srOD4+Ml09azticmVha31kPWc8PCgoZHwwKT09MzE/MDoyNS0oZD4+PjEpfDApO2U9Y1tlPj4yXXwwO3doaWxlKDEpe2lmKChjW2UrND4+Ml0mLTh8MCk9PShnfDApKXt6PTMwNzticmVha31iPWUrMTYrKGQ+Pj4zMTw8Mil8MDthPWNbYj4+Ml18MDtpZighYSl7ej0zMDQ7YnJlYWt9ZWxzZXtkPWQ8PDE7ZT1hfX1pZigoenwwKT09MzA0KWlmKGI+Pj4wPChjWzgwMjRdfDApPj4+MClyYSgpO2Vsc2V7Y1tiPj4yXT1rO2NbaysyND4+Ml09ZTtjW2srMTI+PjJdPWs7Y1trKzg+PjJdPWs7YnJlYWt9ZWxzZSBpZigoenwwKT09MzA3KXthPWUrOHwwO2I9Y1thPj4yXXwwO0c9Y1s4MDI0XXwwO2lmKGI+Pj4wPj1HPj4+MCZlPj4+MD49Rz4+PjApe2NbYisxMj4+Ml09aztjW2E+PjJdPWs7Y1trKzg+PjJdPWI7Y1trKzEyPj4yXT1lO2NbaysyND4+Ml09MDticmVha31lbHNlIHJhKCl9fX1lbHNle0c9Y1s4MDI0XXwwO2lmKChHfDApPT0wfGg+Pj4wPEc+Pj4wKWNbODAyNF09aDtjWzgxMzJdPWg7Y1s4MTMzXT1nO2NbODEzNV09MDtjWzgwMjldPWNbODEzOF07Y1s4MDI4XT0tMTthPTA7ZG97Rz0zMjEyMCsoYTw8MTw8Mil8MDtjW0crMTI+PjJdPUc7Y1tHKzg+PjJdPUc7YT1hKzF8MH13aGlsZSgoYXwwKSE9MzIpO0c9aCs4fDA7Rz0oRyY3fDApPT0wPzA6MC1HJjc7Rj1oK0d8MDtHPWcrLTQwLUd8MDtjWzgwMjZdPUY7Y1s4MDIzXT1HO2NbRis0Pj4yXT1HfDE7Y1tGK0crND4+Ml09NDA7Y1s4MDI3XT1jWzgxNDJdfXdoaWxlKDApO2E9Y1s4MDIzXXwwO2lmKGE+Pj4wPm8+Pj4wKXtFPWEtb3wwO2NbODAyM109RTtHPWNbODAyNl18MDtGPUcrb3wwO2NbODAyNl09RjtjW0YrND4+Ml09RXwxO2NbRys0Pj4yXT1vfDM7Rz1HKzh8MDtyZXR1cm4gR3wwfX1pZighKGNbNzk3OV18MCkpYT0zMTk2NDtlbHNlIGE9Y1sob2EoKXwwKSs2MD4+Ml18MDtjW2E+PjJdPTEyO0c9MDtyZXR1cm4gR3wwfWZ1bmN0aW9uIHpkKGEpe2E9YXwwO3ZhciBiPTAsZD0wLGU9MCxmPTAsZz0wLGg9MCxpPTAsaj0wLGs9MCxsPTAsbT0wLG49MCxvPTAscD0wLHE9MDtpZighYSlyZXR1cm47ZD1hKy04fDA7aD1jWzgwMjRdfDA7aWYoZD4+PjA8aD4+PjApcmEoKTthPWNbYSstND4+Ml18MDtiPWEmMztpZigoYnwwKT09MSlyYSgpO2U9YSYtODttPWQrZXwwO2RvIGlmKCEoYSYxKSl7YT1jW2Q+PjJdfDA7aWYoIWIpcmV0dXJuO2s9ZCsoMC1hKXwwO2o9YStlfDA7aWYoaz4+PjA8aD4+PjApcmEoKTtpZigoa3wwKT09KGNbODAyNV18MCkpe2E9bSs0fDA7Yj1jW2E+PjJdfDA7aWYoKGImM3wwKSE9Myl7cT1rO2Y9ajticmVha31jWzgwMjJdPWo7Y1thPj4yXT1iJi0yO2Nbays0Pj4yXT1qfDE7Y1trK2o+PjJdPWo7cmV0dXJufWU9YT4+PjM7aWYoYT4+PjA8MjU2KXtiPWNbays4Pj4yXXwwO2Q9Y1trKzEyPj4yXXwwO2E9MzIxMjArKGU8PDE8PDIpfDA7aWYoKGJ8MCkhPShhfDApKXtpZihiPj4+MDxoPj4+MClyYSgpO2lmKChjW2IrMTI+PjJdfDApIT0oa3wwKSlyYSgpfWlmKChkfDApPT0oYnwwKSl7Y1s4MDIwXT1jWzgwMjBdJn4oMTw8ZSk7cT1rO2Y9ajticmVha31pZigoZHwwKSE9KGF8MCkpe2lmKGQ+Pj4wPGg+Pj4wKXJhKCk7YT1kKzh8MDtpZigoY1thPj4yXXwwKT09KGt8MCkpZz1hO2Vsc2UgcmEoKX1lbHNlIGc9ZCs4fDA7Y1tiKzEyPj4yXT1kO2NbZz4+Ml09YjtxPWs7Zj1qO2JyZWFrfWc9Y1trKzI0Pj4yXXwwO2Q9Y1trKzEyPj4yXXwwO2RvIGlmKChkfDApPT0oa3wwKSl7ZD1rKzE2fDA7Yj1kKzR8MDthPWNbYj4+Ml18MDtpZighYSl7YT1jW2Q+PjJdfDA7aWYoIWEpe2k9MDticmVha31lbHNlIGI9ZH13aGlsZSgxKXtkPWErMjB8MDtlPWNbZD4+Ml18MDtpZihlKXthPWU7Yj1kO2NvbnRpbnVlfWQ9YSsxNnwwO2U9Y1tkPj4yXXwwO2lmKCFlKWJyZWFrO2Vsc2V7YT1lO2I9ZH19aWYoYj4+PjA8aD4+PjApcmEoKTtlbHNle2NbYj4+Ml09MDtpPWE7YnJlYWt9fWVsc2V7ZT1jW2srOD4+Ml18MDtpZihlPj4+MDxoPj4+MClyYSgpO2E9ZSsxMnwwO2lmKChjW2E+PjJdfDApIT0oa3wwKSlyYSgpO2I9ZCs4fDA7aWYoKGNbYj4+Ml18MCk9PShrfDApKXtjW2E+PjJdPWQ7Y1tiPj4yXT1lO2k9ZDticmVha31lbHNlIHJhKCl9d2hpbGUoMCk7aWYoZyl7YT1jW2srMjg+PjJdfDA7Yj0zMjM4NCsoYTw8Mil8MDtpZigoa3wwKT09KGNbYj4+Ml18MCkpe2NbYj4+Ml09aTtpZighaSl7Y1s4MDIxXT1jWzgwMjFdJn4oMTw8YSk7cT1rO2Y9ajticmVha319ZWxzZXtpZihnPj4+MDwoY1s4MDI0XXwwKT4+PjApcmEoKTthPWcrMTZ8MDtpZigoY1thPj4yXXwwKT09KGt8MCkpY1thPj4yXT1pO2Vsc2UgY1tnKzIwPj4yXT1pO2lmKCFpKXtxPWs7Zj1qO2JyZWFrfX1kPWNbODAyNF18MDtpZihpPj4+MDxkPj4+MClyYSgpO2NbaSsyND4+Ml09ZzthPWsrMTZ8MDtiPWNbYT4+Ml18MDtkbyBpZihiKWlmKGI+Pj4wPGQ+Pj4wKXJhKCk7ZWxzZXtjW2krMTY+PjJdPWI7Y1tiKzI0Pj4yXT1pO2JyZWFrfXdoaWxlKDApO2E9Y1thKzQ+PjJdfDA7aWYoYSlpZihhPj4+MDwoY1s4MDI0XXwwKT4+PjApcmEoKTtlbHNle2NbaSsyMD4+Ml09YTtjW2ErMjQ+PjJdPWk7cT1rO2Y9ajticmVha31lbHNle3E9aztmPWp9fWVsc2V7cT1rO2Y9an19ZWxzZXtxPWQ7Zj1lfXdoaWxlKDApO2lmKHE+Pj4wPj1tPj4+MClyYSgpO2E9bSs0fDA7Yj1jW2E+PjJdfDA7aWYoIShiJjEpKXJhKCk7aWYoIShiJjIpKXtpZigobXwwKT09KGNbODAyNl18MCkpe3A9KGNbODAyM118MCkrZnwwO2NbODAyM109cDtjWzgwMjZdPXE7Y1txKzQ+PjJdPXB8MTtpZigocXwwKSE9KGNbODAyNV18MCkpcmV0dXJuO2NbODAyNV09MDtjWzgwMjJdPTA7cmV0dXJufWlmKChtfDApPT0oY1s4MDI1XXwwKSl7cD0oY1s4MDIyXXwwKStmfDA7Y1s4MDIyXT1wO2NbODAyNV09cTtjW3ErND4+Ml09cHwxO2NbcStwPj4yXT1wO3JldHVybn1mPShiJi04KStmfDA7ZT1iPj4+MztkbyBpZihiPj4+MD49MjU2KXtnPWNbbSsyND4+Ml18MDthPWNbbSsxMj4+Ml18MDtkbyBpZigoYXwwKT09KG18MCkpe2Q9bSsxNnwwO2I9ZCs0fDA7YT1jW2I+PjJdfDA7aWYoIWEpe2E9Y1tkPj4yXXwwO2lmKCFhKXtuPTA7YnJlYWt9ZWxzZSBiPWR9d2hpbGUoMSl7ZD1hKzIwfDA7ZT1jW2Q+PjJdfDA7aWYoZSl7YT1lO2I9ZDtjb250aW51ZX1kPWErMTZ8MDtlPWNbZD4+Ml18MDtpZighZSlicmVhaztlbHNle2E9ZTtiPWR9fWlmKGI+Pj4wPChjWzgwMjRdfDApPj4+MClyYSgpO2Vsc2V7Y1tiPj4yXT0wO249YTticmVha319ZWxzZXtiPWNbbSs4Pj4yXXwwO2lmKGI+Pj4wPChjWzgwMjRdfDApPj4+MClyYSgpO2Q9YisxMnwwO2lmKChjW2Q+PjJdfDApIT0obXwwKSlyYSgpO2U9YSs4fDA7aWYoKGNbZT4+Ml18MCk9PShtfDApKXtjW2Q+PjJdPWE7Y1tlPj4yXT1iO249YTticmVha31lbHNlIHJhKCl9d2hpbGUoMCk7aWYoZyl7YT1jW20rMjg+PjJdfDA7Yj0zMjM4NCsoYTw8Mil8MDtpZigobXwwKT09KGNbYj4+Ml18MCkpe2NbYj4+Ml09bjtpZighbil7Y1s4MDIxXT1jWzgwMjFdJn4oMTw8YSk7YnJlYWt9fWVsc2V7aWYoZz4+PjA8KGNbODAyNF18MCk+Pj4wKXJhKCk7YT1nKzE2fDA7aWYoKGNbYT4+Ml18MCk9PShtfDApKWNbYT4+Ml09bjtlbHNlIGNbZysyMD4+Ml09bjtpZighbilicmVha31kPWNbODAyNF18MDtpZihuPj4+MDxkPj4+MClyYSgpO2NbbisyND4+Ml09ZzthPW0rMTZ8MDtiPWNbYT4+Ml18MDtkbyBpZihiKWlmKGI+Pj4wPGQ+Pj4wKXJhKCk7ZWxzZXtjW24rMTY+PjJdPWI7Y1tiKzI0Pj4yXT1uO2JyZWFrfXdoaWxlKDApO2E9Y1thKzQ+PjJdfDA7aWYoYSlpZihhPj4+MDwoY1s4MDI0XXwwKT4+PjApcmEoKTtlbHNle2NbbisyMD4+Ml09YTtjW2ErMjQ+PjJdPW47YnJlYWt9fX1lbHNle2I9Y1ttKzg+PjJdfDA7ZD1jW20rMTI+PjJdfDA7YT0zMjEyMCsoZTw8MTw8Mil8MDtpZigoYnwwKSE9KGF8MCkpe2lmKGI+Pj4wPChjWzgwMjRdfDApPj4+MClyYSgpO2lmKChjW2IrMTI+PjJdfDApIT0obXwwKSlyYSgpfWlmKChkfDApPT0oYnwwKSl7Y1s4MDIwXT1jWzgwMjBdJn4oMTw8ZSk7YnJlYWt9aWYoKGR8MCkhPShhfDApKXtpZihkPj4+MDwoY1s4MDI0XXwwKT4+PjApcmEoKTthPWQrOHwwO2lmKChjW2E+PjJdfDApPT0obXwwKSlsPWE7ZWxzZSByYSgpfWVsc2UgbD1kKzh8MDtjW2IrMTI+PjJdPWQ7Y1tsPj4yXT1ifXdoaWxlKDApO2NbcSs0Pj4yXT1mfDE7Y1txK2Y+PjJdPWY7aWYoKHF8MCk9PShjWzgwMjVdfDApKXtjWzgwMjJdPWY7cmV0dXJufX1lbHNle2NbYT4+Ml09YiYtMjtjW3ErND4+Ml09ZnwxO2NbcStmPj4yXT1mfWE9Zj4+PjM7aWYoZj4+PjA8MjU2KXtkPTMyMTIwKyhhPDwxPDwyKXwwO2I9Y1s4MDIwXXwwO2E9MTw8YTtpZihiJmEpe2E9ZCs4fDA7Yj1jW2E+PjJdfDA7aWYoYj4+PjA8KGNbODAyNF18MCk+Pj4wKXJhKCk7ZWxzZXtvPWE7cD1ifX1lbHNle2NbODAyMF09YnxhO289ZCs4fDA7cD1kfWNbbz4+Ml09cTtjW3ArMTI+PjJdPXE7Y1txKzg+PjJdPXA7Y1txKzEyPj4yXT1kO3JldHVybn1hPWY+Pj44O2lmKGEpaWYoZj4+PjA+MTY3NzcyMTUpZD0zMTtlbHNle289KGErMTA0ODMyMHwwKT4+PjE2Jjg7cD1hPDxvO249KHArNTIwMTkyfDApPj4+MTYmNDtwPXA8PG47ZD0ocCsyNDU3NjB8MCk+Pj4xNiYyO2Q9MTQtKG58b3xkKSsocDw8ZD4+PjE1KXwwO2Q9Zj4+PihkKzd8MCkmMXxkPDwxfWVsc2UgZD0wO2U9MzIzODQrKGQ8PDIpfDA7Y1txKzI4Pj4yXT1kO2NbcSsyMD4+Ml09MDtjW3ErMTY+PjJdPTA7YT1jWzgwMjFdfDA7Yj0xPDxkO2RvIGlmKGEmYil7ZD1mPDwoKGR8MCk9PTMxPzA6MjUtKGQ+Pj4xKXwwKTtlPWNbZT4+Ml18MDt3aGlsZSgxKXtpZigoY1tlKzQ+PjJdJi04fDApPT0oZnwwKSl7YT0xMzA7YnJlYWt9Yj1lKzE2KyhkPj4+MzE8PDIpfDA7YT1jW2I+PjJdfDA7aWYoIWEpe2E9MTI3O2JyZWFrfWVsc2V7ZD1kPDwxO2U9YX19aWYoKGF8MCk9PTEyNylpZihiPj4+MDwoY1s4MDI0XXwwKT4+PjApcmEoKTtlbHNle2NbYj4+Ml09cTtjW3ErMjQ+PjJdPWU7Y1txKzEyPj4yXT1xO2NbcSs4Pj4yXT1xO2JyZWFrfWVsc2UgaWYoKGF8MCk9PTEzMCl7YT1lKzh8MDtiPWNbYT4+Ml18MDtwPWNbODAyNF18MDtpZihiPj4+MD49cD4+PjAmZT4+PjA+PXA+Pj4wKXtjW2IrMTI+PjJdPXE7Y1thPj4yXT1xO2NbcSs4Pj4yXT1iO2NbcSsxMj4+Ml09ZTtjW3ErMjQ+PjJdPTA7YnJlYWt9ZWxzZSByYSgpfX1lbHNle2NbODAyMV09YXxiO2NbZT4+Ml09cTtjW3ErMjQ+PjJdPWU7Y1txKzEyPj4yXT1xO2NbcSs4Pj4yXT1xfXdoaWxlKDApO3E9KGNbODAyOF18MCkrLTF8MDtjWzgwMjhdPXE7aWYoIXEpYT0zMjUzNjtlbHNlIHJldHVybjt3aGlsZSgxKXthPWNbYT4+Ml18MDtpZighYSlicmVhaztlbHNlIGE9YSs4fDB9Y1s4MDI4XT0tMTtyZXR1cm59ZnVuY3Rpb24gQWQoYSxiKXthPWF8MDtiPWJ8MDt2YXIgZD0wLGU9MCxmPTAsZz0wLGg9MCxpPTAsaj0wLGs9MCxsPTAsbT0wLG49MCxvPTAscD0wLHE9MCxyPTA7bz1hK2J8MDtkPWNbYSs0Pj4yXXwwO2RvIGlmKCEoZCYxKSl7Zz1jW2E+PjJdfDA7aWYoIShkJjMpKXJldHVybjtsPWErKDAtZyl8MDtrPWcrYnwwO2k9Y1s4MDI0XXwwO2lmKGw+Pj4wPGk+Pj4wKXJhKCk7aWYoKGx8MCk9PShjWzgwMjVdfDApKXthPW8rNHwwO2Q9Y1thPj4yXXwwO2lmKChkJjN8MCkhPTMpe3I9bDtmPWs7YnJlYWt9Y1s4MDIyXT1rO2NbYT4+Ml09ZCYtMjtjW2wrND4+Ml09a3wxO2NbbCtrPj4yXT1rO3JldHVybn1lPWc+Pj4zO2lmKGc+Pj4wPDI1Nil7YT1jW2wrOD4+Ml18MDtiPWNbbCsxMj4+Ml18MDtkPTMyMTIwKyhlPDwxPDwyKXwwO2lmKChhfDApIT0oZHwwKSl7aWYoYT4+PjA8aT4+PjApcmEoKTtpZigoY1thKzEyPj4yXXwwKSE9KGx8MCkpcmEoKX1pZigoYnwwKT09KGF8MCkpe2NbODAyMF09Y1s4MDIwXSZ+KDE8PGUpO3I9bDtmPWs7YnJlYWt9aWYoKGJ8MCkhPShkfDApKXtpZihiPj4+MDxpPj4+MClyYSgpO2Q9Yis4fDA7aWYoKGNbZD4+Ml18MCk9PShsfDApKWg9ZDtlbHNlIHJhKCl9ZWxzZSBoPWIrOHwwO2NbYSsxMj4+Ml09YjtjW2g+PjJdPWE7cj1sO2Y9azticmVha31nPWNbbCsyND4+Ml18MDtiPWNbbCsxMj4+Ml18MDtkbyBpZigoYnwwKT09KGx8MCkpe2I9bCsxNnwwO2E9Yis0fDA7ZD1jW2E+PjJdfDA7aWYoIWQpe2Q9Y1tiPj4yXXwwO2lmKCFkKXtqPTA7YnJlYWt9ZWxzZSBhPWJ9d2hpbGUoMSl7Yj1kKzIwfDA7ZT1jW2I+PjJdfDA7aWYoZSl7ZD1lO2E9Yjtjb250aW51ZX1iPWQrMTZ8MDtlPWNbYj4+Ml18MDtpZighZSlicmVhaztlbHNle2Q9ZTthPWJ9fWlmKGE+Pj4wPGk+Pj4wKXJhKCk7ZWxzZXtjW2E+PjJdPTA7aj1kO2JyZWFrfX1lbHNle2U9Y1tsKzg+PjJdfDA7aWYoZT4+PjA8aT4+PjApcmEoKTtkPWUrMTJ8MDtpZigoY1tkPj4yXXwwKSE9KGx8MCkpcmEoKTthPWIrOHwwO2lmKChjW2E+PjJdfDApPT0obHwwKSl7Y1tkPj4yXT1iO2NbYT4+Ml09ZTtqPWI7YnJlYWt9ZWxzZSByYSgpfXdoaWxlKDApO2lmKGcpe2Q9Y1tsKzI4Pj4yXXwwO2E9MzIzODQrKGQ8PDIpfDA7aWYoKGx8MCk9PShjW2E+PjJdfDApKXtjW2E+PjJdPWo7aWYoIWope2NbODAyMV09Y1s4MDIxXSZ+KDE8PGQpO3I9bDtmPWs7YnJlYWt9fWVsc2V7aWYoZz4+PjA8KGNbODAyNF18MCk+Pj4wKXJhKCk7ZD1nKzE2fDA7aWYoKGNbZD4+Ml18MCk9PShsfDApKWNbZD4+Ml09ajtlbHNlIGNbZysyMD4+Ml09ajtpZighail7cj1sO2Y9azticmVha319Yj1jWzgwMjRdfDA7aWYoaj4+PjA8Yj4+PjApcmEoKTtjW2orMjQ+PjJdPWc7ZD1sKzE2fDA7YT1jW2Q+PjJdfDA7ZG8gaWYoYSlpZihhPj4+MDxiPj4+MClyYSgpO2Vsc2V7Y1tqKzE2Pj4yXT1hO2NbYSsyND4+Ml09ajticmVha313aGlsZSgwKTtkPWNbZCs0Pj4yXXwwO2lmKGQpaWYoZD4+PjA8KGNbODAyNF18MCk+Pj4wKXJhKCk7ZWxzZXtjW2orMjA+PjJdPWQ7Y1tkKzI0Pj4yXT1qO3I9bDtmPWs7YnJlYWt9ZWxzZXtyPWw7Zj1rfX1lbHNle3I9bDtmPWt9fWVsc2V7cj1hO2Y9Yn13aGlsZSgwKTtoPWNbODAyNF18MDtpZihvPj4+MDxoPj4+MClyYSgpO2Q9bys0fDA7YT1jW2Q+PjJdfDA7aWYoIShhJjIpKXtpZigob3wwKT09KGNbODAyNl18MCkpe3E9KGNbODAyM118MCkrZnwwO2NbODAyM109cTtjWzgwMjZdPXI7Y1tyKzQ+PjJdPXF8MTtpZigocnwwKSE9KGNbODAyNV18MCkpcmV0dXJuO2NbODAyNV09MDtjWzgwMjJdPTA7cmV0dXJufWlmKChvfDApPT0oY1s4MDI1XXwwKSl7cT0oY1s4MDIyXXwwKStmfDA7Y1s4MDIyXT1xO2NbODAyNV09cjtjW3IrND4+Ml09cXwxO2NbcitxPj4yXT1xO3JldHVybn1mPShhJi04KStmfDA7ZT1hPj4+MztkbyBpZihhPj4+MD49MjU2KXtnPWNbbysyND4+Ml18MDtiPWNbbysxMj4+Ml18MDtkbyBpZigoYnwwKT09KG98MCkpe2I9bysxNnwwO2E9Yis0fDA7ZD1jW2E+PjJdfDA7aWYoIWQpe2Q9Y1tiPj4yXXwwO2lmKCFkKXtuPTA7YnJlYWt9ZWxzZSBhPWJ9d2hpbGUoMSl7Yj1kKzIwfDA7ZT1jW2I+PjJdfDA7aWYoZSl7ZD1lO2E9Yjtjb250aW51ZX1iPWQrMTZ8MDtlPWNbYj4+Ml18MDtpZighZSlicmVhaztlbHNle2Q9ZTthPWJ9fWlmKGE+Pj4wPGg+Pj4wKXJhKCk7ZWxzZXtjW2E+PjJdPTA7bj1kO2JyZWFrfX1lbHNle2U9Y1tvKzg+PjJdfDA7aWYoZT4+PjA8aD4+PjApcmEoKTtkPWUrMTJ8MDtpZigoY1tkPj4yXXwwKSE9KG98MCkpcmEoKTthPWIrOHwwO2lmKChjW2E+PjJdfDApPT0ob3wwKSl7Y1tkPj4yXT1iO2NbYT4+Ml09ZTtuPWI7YnJlYWt9ZWxzZSByYSgpfXdoaWxlKDApO2lmKGcpe2Q9Y1tvKzI4Pj4yXXwwO2E9MzIzODQrKGQ8PDIpfDA7aWYoKG98MCk9PShjW2E+PjJdfDApKXtjW2E+PjJdPW47aWYoIW4pe2NbODAyMV09Y1s4MDIxXSZ+KDE8PGQpO2JyZWFrfX1lbHNle2lmKGc+Pj4wPChjWzgwMjRdfDApPj4+MClyYSgpO2Q9ZysxNnwwO2lmKChjW2Q+PjJdfDApPT0ob3wwKSljW2Q+PjJdPW47ZWxzZSBjW2crMjA+PjJdPW47aWYoIW4pYnJlYWt9Yj1jWzgwMjRdfDA7aWYobj4+PjA8Yj4+PjApcmEoKTtjW24rMjQ+PjJdPWc7ZD1vKzE2fDA7YT1jW2Q+PjJdfDA7ZG8gaWYoYSlpZihhPj4+MDxiPj4+MClyYSgpO2Vsc2V7Y1tuKzE2Pj4yXT1hO2NbYSsyND4+Ml09bjticmVha313aGlsZSgwKTtkPWNbZCs0Pj4yXXwwO2lmKGQpaWYoZD4+PjA8KGNbODAyNF18MCk+Pj4wKXJhKCk7ZWxzZXtjW24rMjA+PjJdPWQ7Y1tkKzI0Pj4yXT1uO2JyZWFrfX19ZWxzZXthPWNbbys4Pj4yXXwwO2I9Y1tvKzEyPj4yXXwwO2Q9MzIxMjArKGU8PDE8PDIpfDA7aWYoKGF8MCkhPShkfDApKXtpZihhPj4+MDxoPj4+MClyYSgpO2lmKChjW2ErMTI+PjJdfDApIT0ob3wwKSlyYSgpfWlmKChifDApPT0oYXwwKSl7Y1s4MDIwXT1jWzgwMjBdJn4oMTw8ZSk7YnJlYWt9aWYoKGJ8MCkhPShkfDApKXtpZihiPj4+MDxoPj4+MClyYSgpO2Q9Yis4fDA7aWYoKGNbZD4+Ml18MCk9PShvfDApKW09ZDtlbHNlIHJhKCl9ZWxzZSBtPWIrOHwwO2NbYSsxMj4+Ml09YjtjW20+PjJdPWF9d2hpbGUoMCk7Y1tyKzQ+PjJdPWZ8MTtjW3IrZj4+Ml09ZjtpZigocnwwKT09KGNbODAyNV18MCkpe2NbODAyMl09ZjtyZXR1cm59fWVsc2V7Y1tkPj4yXT1hJi0yO2Nbcis0Pj4yXT1mfDE7Y1tyK2Y+PjJdPWZ9ZD1mPj4+MztpZihmPj4+MDwyNTYpe2I9MzIxMjArKGQ8PDE8PDIpfDA7YT1jWzgwMjBdfDA7ZD0xPDxkO2lmKGEmZCl7ZD1iKzh8MDthPWNbZD4+Ml18MDtpZihhPj4+MDwoY1s4MDI0XXwwKT4+PjApcmEoKTtlbHNle3A9ZDtxPWF9fWVsc2V7Y1s4MDIwXT1hfGQ7cD1iKzh8MDtxPWJ9Y1twPj4yXT1yO2NbcSsxMj4+Ml09cjtjW3IrOD4+Ml09cTtjW3IrMTI+PjJdPWI7cmV0dXJufWQ9Zj4+Pjg7aWYoZClpZihmPj4+MD4xNjc3NzIxNSliPTMxO2Vsc2V7cD0oZCsxMDQ4MzIwfDApPj4+MTYmODtxPWQ8PHA7bz0ocSs1MjAxOTJ8MCk+Pj4xNiY0O3E9cTw8bztiPShxKzI0NTc2MHwwKT4+PjE2JjI7Yj0xNC0ob3xwfGIpKyhxPDxiPj4+MTUpfDA7Yj1mPj4+KGIrN3wwKSYxfGI8PDF9ZWxzZSBiPTA7ZT0zMjM4NCsoYjw8Mil8MDtjW3IrMjg+PjJdPWI7Y1tyKzIwPj4yXT0wO2NbcisxNj4+Ml09MDtkPWNbODAyMV18MDthPTE8PGI7aWYoIShkJmEpKXtjWzgwMjFdPWR8YTtjW2U+PjJdPXI7Y1tyKzI0Pj4yXT1lO2NbcisxMj4+Ml09cjtjW3IrOD4+Ml09cjtyZXR1cm59Yj1mPDwoKGJ8MCk9PTMxPzA6MjUtKGI+Pj4xKXwwKTtlPWNbZT4+Ml18MDt3aGlsZSgxKXtpZigoY1tlKzQ+PjJdJi04fDApPT0oZnwwKSl7ZD0xMjc7YnJlYWt9YT1lKzE2KyhiPj4+MzE8PDIpfDA7ZD1jW2E+PjJdfDA7aWYoIWQpe2Q9MTI0O2JyZWFrfWVsc2V7Yj1iPDwxO2U9ZH19aWYoKGR8MCk9PTEyNCl7aWYoYT4+PjA8KGNbODAyNF18MCk+Pj4wKXJhKCk7Y1thPj4yXT1yO2NbcisyND4+Ml09ZTtjW3IrMTI+PjJdPXI7Y1tyKzg+PjJdPXI7cmV0dXJufWVsc2UgaWYoKGR8MCk9PTEyNyl7ZD1lKzh8MDthPWNbZD4+Ml18MDtxPWNbODAyNF18MDtpZighKGE+Pj4wPj1xPj4+MCZlPj4+MD49cT4+PjApKXJhKCk7Y1thKzEyPj4yXT1yO2NbZD4+Ml09cjtjW3IrOD4+Ml09YTtjW3IrMTI+PjJdPWU7Y1tyKzI0Pj4yXT0wO3JldHVybn19ZnVuY3Rpb24gQmQoKXt9ZnVuY3Rpb24gQ2QoYSxiLGMsZCl7YT1hfDA7Yj1ifDA7Yz1jfDA7ZD1kfDA7ZD1iLWQtKGM+Pj4wPmE+Pj4wfDApPj4+MDtyZXR1cm4gKEM9ZCxhLWM+Pj4wfDApfDB9ZnVuY3Rpb24gRGQoYSxiLGMsZCl7YT1hfDA7Yj1ifDA7Yz1jfDA7ZD1kfDA7Yz1hK2M+Pj4wO3JldHVybiAoQz1iK2QrKGM+Pj4wPGE+Pj4wfDApPj4+MCxjfDApfDB9ZnVuY3Rpb24gRWQoYSxiLGMpe2E9YXwwO2I9YnwwO2M9Y3wwO2lmKChjfDApPDMyKXtDPWI+PmM7cmV0dXJuIGE+Pj5jfChiJigxPDxjKS0xKTw8MzItY31DPShifDApPDA/LTE6MDtyZXR1cm4gYj4+Yy0zMnwwfWZ1bmN0aW9uIEZkKGIsZCxlKXtiPWJ8MDtkPWR8MDtlPWV8MDt2YXIgZj0wLGc9MCxoPTAsaT0wO2Y9YitlfDA7aWYoKGV8MCk+PTIwKXtkPWQmMjU1O2g9YiYzO2k9ZHxkPDw4fGQ8PDE2fGQ8PDI0O2c9ZiZ+MztpZihoKXtoPWIrNC1ofDA7d2hpbGUoKGJ8MCk8KGh8MCkpe2FbYj4+MF09ZDtiPWIrMXwwfX13aGlsZSgoYnwwKTwoZ3wwKSl7Y1tiPj4yXT1pO2I9Yis0fDB9fXdoaWxlKChifDApPChmfDApKXthW2I+PjBdPWQ7Yj1iKzF8MH1yZXR1cm4gYi1lfDB9ZnVuY3Rpb24gR2QoYSxiLGMpe2E9YXwwO2I9YnwwO2M9Y3wwO2lmKChjfDApPDMyKXtDPWI+Pj5jO3JldHVybiBhPj4+Y3woYiYoMTw8YyktMSk8PDMyLWN9Qz0wO3JldHVybiBiPj4+Yy0zMnwwfWZ1bmN0aW9uIEhkKGEsYixjKXthPWF8MDtiPWJ8MDtjPWN8MDtpZigoY3wwKTwzMil7Qz1iPDxjfChhJigxPDxjKS0xPDwzMi1jKT4+PjMyLWM7cmV0dXJuIGE8PGN9Qz1hPDxjLTMyO3JldHVybiAwfWZ1bmN0aW9uIElkKGIsZCxlKXtiPWJ8MDtkPWR8MDtlPWV8MDt2YXIgZj0wO2lmKChlfDApPj00MDk2KXJldHVybiB2YShifDAsZHwwLGV8MCl8MDtmPWJ8MDtpZigoYiYzKT09KGQmMykpe3doaWxlKGImMyl7aWYoIWUpcmV0dXJuIGZ8MDthW2I+PjBdPWFbZD4+MF18MDtiPWIrMXwwO2Q9ZCsxfDA7ZT1lLTF8MH13aGlsZSgoZXwwKT49NCl7Y1tiPj4yXT1jW2Q+PjJdO2I9Yis0fDA7ZD1kKzR8MDtlPWUtNHwwfX13aGlsZSgoZXwwKT4wKXthW2I+PjBdPWFbZD4+MF18MDtiPWIrMXwwO2Q9ZCsxfDA7ZT1lLTF8MH1yZXR1cm4gZnwwfWZ1bmN0aW9uIEpkKGIsYyxkKXtiPWJ8MDtjPWN8MDtkPWR8MDt2YXIgZT0wO2lmKChjfDApPChifDApJihifDApPChjK2R8MCkpe2U9YjtjPWMrZHwwO2I9YitkfDA7d2hpbGUoKGR8MCk+MCl7Yj1iLTF8MDtjPWMtMXwwO2Q9ZC0xfDA7YVtiPj4wXT1hW2M+PjBdfDB9Yj1lfWVsc2UgSWQoYixjLGQpfDA7cmV0dXJuIGJ8MH1mdW5jdGlvbiBLZChiKXtiPWJ8MDt2YXIgYz0wO2M9YVttKyhiJjI1NSk+PjBdfDA7aWYoKGN8MCk8OClyZXR1cm4gY3wwO2M9YVttKyhiPj44JjI1NSk+PjBdfDA7aWYoKGN8MCk8OClyZXR1cm4gYys4fDA7Yz1hW20rKGI+PjE2JjI1NSk+PjBdfDA7aWYoKGN8MCk8OClyZXR1cm4gYysxNnwwO3JldHVybiAoYVttKyhiPj4+MjQpPj4wXXwwKSsyNHwwfWZ1bmN0aW9uIExkKGEsYil7YT1hfDA7Yj1ifDA7dmFyIGM9MCxkPTAsZT0wLGY9MDtmPWEmNjU1MzU7ZT1iJjY1NTM1O2M9XyhlLGYpfDA7ZD1hPj4+MTY7YT0oYz4+PjE2KSsoXyhlLGQpfDApfDA7ZT1iPj4+MTY7Yj1fKGUsZil8MDtyZXR1cm4gKEM9KGE+Pj4xNikrKF8oZSxkKXwwKSsoKChhJjY1NTM1KStifDApPj4+MTYpfDAsYStiPDwxNnxjJjY1NTM1fDApfDB9ZnVuY3Rpb24gTWQoYSxiLGMsZCl7YT1hfDA7Yj1ifDA7Yz1jfDA7ZD1kfDA7dmFyIGU9MCxmPTAsZz0wLGg9MCxpPTAsaj0wO2o9Yj4+MzF8KChifDApPDA/LTE6MCk8PDE7aT0oKGJ8MCk8MD8tMTowKT4+MzF8KChifDApPDA/LTE6MCk8PDE7Zj1kPj4zMXwoKGR8MCk8MD8tMTowKTw8MTtlPSgoZHwwKTwwPy0xOjApPj4zMXwoKGR8MCk8MD8tMTowKTw8MTtoPUNkKGpeYSxpXmIsaixpKXwwO2c9QzthPWZeajtiPWVeaTtyZXR1cm4gQ2QoKFJkKGgsZyxDZChmXmMsZV5kLGYsZSl8MCxDLDApfDApXmEsQ15iLGEsYil8MH1mdW5jdGlvbiBOZChhLGIsZCxlKXthPWF8MDtiPWJ8MDtkPWR8MDtlPWV8MDt2YXIgZj0wLGc9MCxoPTAsaj0wLGs9MCxsPTA7Zj1pO2k9aSsxNnwwO2o9ZnwwO2g9Yj4+MzF8KChifDApPDA/LTE6MCk8PDE7Zz0oKGJ8MCk8MD8tMTowKT4+MzF8KChifDApPDA/LTE6MCk8PDE7bD1lPj4zMXwoKGV8MCk8MD8tMTowKTw8MTtrPSgoZXwwKTwwPy0xOjApPj4zMXwoKGV8MCk8MD8tMTowKTw8MTthPUNkKGheYSxnXmIsaCxnKXwwO2I9QztSZChhLGIsQ2QobF5kLGteZSxsLGspfDAsQyxqKXwwO2U9Q2QoY1tqPj4yXV5oLGNbais0Pj4yXV5nLGgsZyl8MDtkPUM7aT1mO3JldHVybiAoQz1kLGUpfDB9ZnVuY3Rpb24gT2QoYSxiLGMsZCl7YT1hfDA7Yj1ifDA7Yz1jfDA7ZD1kfDA7dmFyIGU9MCxmPTA7ZT1hO2Y9YztjPUxkKGUsZil8MDthPUM7cmV0dXJuIChDPShfKGIsZil8MCkrKF8oZCxlKXwwKSthfGEmMCxjfDB8MCl8MH1mdW5jdGlvbiBQZChhLGIsYyxkKXthPWF8MDtiPWJ8MDtjPWN8MDtkPWR8MDtyZXR1cm4gUmQoYSxiLGMsZCwwKXwwfWZ1bmN0aW9uIFFkKGEsYixkLGUpe2E9YXwwO2I9YnwwO2Q9ZHwwO2U9ZXwwO3ZhciBmPTAsZz0wO2c9aTtpPWkrMTZ8MDtmPWd8MDtSZChhLGIsZCxlLGYpfDA7aT1nO3JldHVybiAoQz1jW2YrND4+Ml18MCxjW2Y+PjJdfDApfDB9ZnVuY3Rpb24gUmQoYSxiLGQsZSxmKXthPWF8MDtiPWJ8MDtkPWR8MDtlPWV8MDtmPWZ8MDt2YXIgZz0wLGg9MCxpPTAsaj0wLGs9MCxsPTAsbT0wLG49MCxvPTAscD0wO2w9YTtqPWI7az1qO2g9ZDtuPWU7aT1uO2lmKCFrKXtnPShmfDApIT0wO2lmKCFpKXtpZihnKXtjW2Y+PjJdPShsPj4+MCklKGg+Pj4wKTtjW2YrND4+Ml09MH1uPTA7Zj0obD4+PjApLyhoPj4+MCk+Pj4wO3JldHVybiAoQz1uLGYpfDB9ZWxzZXtpZighZyl7bj0wO2Y9MDtyZXR1cm4gKEM9bixmKXwwfWNbZj4+Ml09YXwwO2NbZis0Pj4yXT1iJjA7bj0wO2Y9MDtyZXR1cm4gKEM9bixmKXwwfX1nPShpfDApPT0wO2RvIGlmKGgpe2lmKCFnKXtnPShhYShpfDApfDApLShhYShrfDApfDApfDA7aWYoZz4+PjA8PTMxKXttPWcrMXwwO2k9MzEtZ3wwO2I9Zy0zMT4+MzE7aD1tO2E9bD4+PihtPj4+MCkmYnxrPDxpO2I9az4+PihtPj4+MCkmYjtnPTA7aT1sPDxpO2JyZWFrfWlmKCFmKXtuPTA7Zj0wO3JldHVybiAoQz1uLGYpfDB9Y1tmPj4yXT1hfDA7Y1tmKzQ+PjJdPWp8YiYwO249MDtmPTA7cmV0dXJuIChDPW4sZil8MH1nPWgtMXwwO2lmKGcmaCl7aT0oYWEoaHwwKXwwKSszMy0oYWEoa3wwKXwwKXwwO3A9NjQtaXwwO209MzItaXwwO2o9bT4+MzE7bz1pLTMyfDA7Yj1vPj4zMTtoPWk7YT1tLTE+PjMxJms+Pj4obz4+PjApfChrPDxtfGw+Pj4oaT4+PjApKSZiO2I9YiZrPj4+KGk+Pj4wKTtnPWw8PHAmajtpPShrPDxwfGw+Pj4obz4+PjApKSZqfGw8PG0maS0zMz4+MzE7YnJlYWt9aWYoZil7Y1tmPj4yXT1nJmw7Y1tmKzQ+PjJdPTB9aWYoKGh8MCk9PTEpe289anxiJjA7cD1hfDB8MDtyZXR1cm4gKEM9byxwKXwwfWVsc2V7cD1LZChofDApfDA7bz1rPj4+KHA+Pj4wKXwwO3A9azw8MzItcHxsPj4+KHA+Pj4wKXwwO3JldHVybiAoQz1vLHApfDB9fWVsc2V7aWYoZyl7aWYoZil7Y1tmPj4yXT0oaz4+PjApJShoPj4+MCk7Y1tmKzQ+PjJdPTB9bz0wO3A9KGs+Pj4wKS8oaD4+PjApPj4+MDtyZXR1cm4gKEM9byxwKXwwfWlmKCFsKXtpZihmKXtjW2Y+PjJdPTA7Y1tmKzQ+PjJdPShrPj4+MCklKGk+Pj4wKX1vPTA7cD0oaz4+PjApLyhpPj4+MCk+Pj4wO3JldHVybiAoQz1vLHApfDB9Zz1pLTF8MDtpZighKGcmaSkpe2lmKGYpe2NbZj4+Ml09YXwwO2NbZis0Pj4yXT1nJmt8YiYwfW89MDtwPWs+Pj4oKEtkKGl8MCl8MCk+Pj4wKTtyZXR1cm4gKEM9byxwKXwwfWc9KGFhKGl8MCl8MCktKGFhKGt8MCl8MCl8MDtpZihnPj4+MDw9MzApe2I9ZysxfDA7aT0zMS1nfDA7aD1iO2E9azw8aXxsPj4+KGI+Pj4wKTtiPWs+Pj4oYj4+PjApO2c9MDtpPWw8PGk7YnJlYWt9aWYoIWYpe289MDtwPTA7cmV0dXJuIChDPW8scCl8MH1jW2Y+PjJdPWF8MDtjW2YrND4+Ml09anxiJjA7bz0wO3A9MDtyZXR1cm4gKEM9byxwKXwwfXdoaWxlKDApO2lmKCFoKXtrPWk7aj0wO2k9MH1lbHNle209ZHwwfDA7bD1ufGUmMDtrPURkKG18MCxsfDAsLTEsLTEpfDA7ZD1DO2o9aTtpPTA7ZG97ZT1qO2o9Zz4+PjMxfGo8PDE7Zz1pfGc8PDE7ZT1hPDwxfGU+Pj4zMXwwO249YT4+PjMxfGI8PDF8MDtDZChrLGQsZSxuKXwwO3A9QztvPXA+PjMxfCgocHwwKTwwPy0xOjApPDwxO2k9byYxO2E9Q2QoZSxuLG8mbSwoKChwfDApPDA/LTE6MCk+PjMxfCgocHwwKTwwPy0xOjApPDwxKSZsKXwwO2I9QztoPWgtMXwwfXdoaWxlKChofDApIT0wKTtrPWo7aj0wfWg9MDtpZihmKXtjW2Y+PjJdPWE7Y1tmKzQ+PjJdPWJ9bz0oZ3wwKT4+PjMxfChrfGgpPDwxfChoPDwxfGc+Pj4zMSkmMHxqO3A9KGc8PDF8MD4+PjMxKSYtMnxpO3JldHVybiAoQz1vLHApfDB9ZnVuY3Rpb24gU2QoYSl7YT1hfDA7cmV0dXJuIERhW2EmMzFdKCl8MH1mdW5jdGlvbiBUZCgpe3JldHVybiBlYSgwKXwwfWZ1bmN0aW9uIFVkKCl7cmV0dXJuIGVhKDEpfDB9ZnVuY3Rpb24gVmQoKXtyZXR1cm4gZWEoMil8MH1mdW5jdGlvbiBXZCgpe3JldHVybiBlYSgzKXwwfWZ1bmN0aW9uIFhkKCl7cmV0dXJuIGVhKDQpfDB9ZnVuY3Rpb24gWWQoKXtyZXR1cm4gZWEoNSl8MH1mdW5jdGlvbiBaZCgpe3JldHVybiBlYSg2KXwwfWZ1bmN0aW9uIF9kKCl7cmV0dXJuIGVhKDcpfDB9ZnVuY3Rpb24gJGQoYSxiKXthPWF8MDtiPWJ8MDtyZXR1cm4gRWFbYSYzMV0oYnwwKXwwfWZ1bmN0aW9uIGFlKGEpe2E9YXwwO3JldHVybiBnYSgwLGF8MCl8MH1mdW5jdGlvbiBiZShhKXthPWF8MDtyZXR1cm4gZ2EoMSxhfDApfDB9ZnVuY3Rpb24gY2UoYSl7YT1hfDA7cmV0dXJuIGdhKDIsYXwwKXwwfWZ1bmN0aW9uIGRlKGEpe2E9YXwwO3JldHVybiBnYSgzLGF8MCl8MH1mdW5jdGlvbiBlZShhKXthPWF8MDtyZXR1cm4gZ2EoNCxhfDApfDB9ZnVuY3Rpb24gZmUoYSl7YT1hfDA7cmV0dXJuIGdhKDUsYXwwKXwwfWZ1bmN0aW9uIGdlKGEpe2E9YXwwO3JldHVybiBnYSg2LGF8MCl8MH1mdW5jdGlvbiBoZShhKXthPWF8MDtyZXR1cm4gZ2EoNyxhfDApfDB9ZnVuY3Rpb24gaWUoYSxiLGMsZCl7YT1hfDA7Yj1ifDA7Yz1jfDA7ZD1kfDA7cmV0dXJuIEZhW2EmMzFdKGJ8MCxjfDAsZHwwKXwwfWZ1bmN0aW9uIGplKGEsYixjKXthPWF8MDtiPWJ8MDtjPWN8MDtyZXR1cm4gaWEoMCxhfDAsYnwwLGN8MCl8MH1mdW5jdGlvbiBrZShhLGIsYyl7YT1hfDA7Yj1ifDA7Yz1jfDA7cmV0dXJuIGlhKDEsYXwwLGJ8MCxjfDApfDB9ZnVuY3Rpb24gbGUoYSxiLGMpe2E9YXwwO2I9YnwwO2M9Y3wwO3JldHVybiBpYSgyLGF8MCxifDAsY3wwKXwwfWZ1bmN0aW9uIG1lKGEsYixjKXthPWF8MDtiPWJ8MDtjPWN8MDtyZXR1cm4gaWEoMyxhfDAsYnwwLGN8MCl8MH1mdW5jdGlvbiBuZShhLGIsYyl7YT1hfDA7Yj1ifDA7Yz1jfDA7cmV0dXJuIGlhKDQsYXwwLGJ8MCxjfDApfDB9ZnVuY3Rpb24gb2UoYSxiLGMpe2E9YXwwO2I9YnwwO2M9Y3wwO3JldHVybiBpYSg1LGF8MCxifDAsY3wwKXwwfWZ1bmN0aW9uIHBlKGEsYixjKXthPWF8MDtiPWJ8MDtjPWN8MDtyZXR1cm4gaWEoNixhfDAsYnwwLGN8MCl8MH1mdW5jdGlvbiBxZShhLGIsYyl7YT1hfDA7Yj1ifDA7Yz1jfDA7cmV0dXJuIGlhKDcsYXwwLGJ8MCxjfDApfDB9ZnVuY3Rpb24gcmUoYSxiKXthPWF8MDtiPWJ8MDtHYVthJjMxXShifDApfWZ1bmN0aW9uIHNlKGEpe2E9YXwwO2thKDAsYXwwKX1mdW5jdGlvbiB0ZShhKXthPWF8MDtrYSgxLGF8MCl9ZnVuY3Rpb24gdWUoYSl7YT1hfDA7a2EoMixhfDApfWZ1bmN0aW9uIHZlKGEpe2E9YXwwO2thKDMsYXwwKX1mdW5jdGlvbiB3ZShhKXthPWF8MDtrYSg0LGF8MCl9ZnVuY3Rpb24geGUoYSl7YT1hfDA7a2EoNSxhfDApfWZ1bmN0aW9uIHllKGEpe2E9YXwwO2thKDYsYXwwKX1mdW5jdGlvbiB6ZShhKXthPWF8MDtrYSg3LGF8MCl9ZnVuY3Rpb24gQWUoKXtiYSgwKTtyZXR1cm4gMH1mdW5jdGlvbiBCZShhKXthPWF8MDtiYSgxKTtyZXR1cm4gMH1mdW5jdGlvbiBDZShhLGIsYyl7YT1hfDA7Yj1ifDA7Yz1jfDA7YmEoMik7cmV0dXJuIDB9ZnVuY3Rpb24gRGUoYSl7YT1hfDA7YmEoMyl9XG5cbi8vIEVNU0NSSVBURU5fRU5EX0ZVTkNTXG52YXIgRGE9W0FlLEFlLFRkLEFlLFVkLEFlLFZkLEFlLFdkLEFlLFhkLEFlLFlkLEFlLFpkLEFlLF9kLEFlLEFlLEFlLEFlLEFlLEFlLEFlLEFlLEFlLEFlLEFlLEFlLEFlLEFlLEFlXTt2YXIgRWE9W0JlLEJlLGFlLEJlLGJlLEJlLGNlLEJlLGRlLEJlLGVlLEJlLGZlLEJlLGdlLEJlLGhlLEJlLHBkLEJlLEJlLEJlLEJlLEJlLEJlLEJlLEJlLEJlLEJlLEJlLEJlLEJlXTt2YXIgRmE9W0NlLENlLGplLENlLGtlLENlLGxlLENlLG1lLENlLG5lLENlLG9lLENlLHBlLENlLHFlLENlLHNkLHFkLHJkLENlLENlLENlLENlLENlLENlLENlLENlLENlLENlLENlXTt2YXIgR2E9W0RlLERlLHNlLERlLHRlLERlLHVlLERlLHZlLERlLHdlLERlLHhlLERlLHllLERlLHplLERlLHdkLERlLERlLERlLERlLERlLERlLERlLERlLERlLERlLERlLERlLERlXTtyZXR1cm57X3NvZGl1bV9saWJyYXJ5X3ZlcnNpb25fbWlub3I6amQsX2NyeXB0b19vbmV0aW1lYXV0aF9ieXRlczpKYixfc29kaXVtX3ZlcnNpb25fc3RyaW5nOmhkLF9zb2RpdW1faGV4MmJpbjpnZCxfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9tZW1saW1pdF9zZW5zaXRpdmU6ZGMsX2JpdHNoaWZ0NjRMc2hyOkdkLF9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2OmVjLF9jcnlwdG9fYm94X25vbmNlYnl0ZXM6WmEsX2NyeXB0b19ib3hfYmVmb3Jlbm06YmIsX2NyeXB0b19zY2FsYXJtdWx0X2Jhc2U6bWMsX2NyeXB0b19hdXRoX2J5dGVzOlFhLF9jcnlwdG9fc2lnbl9vcGVuOkZjLF9tZW1jcHk6SWQsX2NyeXB0b19ib3hfc2VlZF9rZXlwYWlyOiRhLF9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X21lbWxpbWl0X2ludGVyYWN0aXZlOmJjLF9jcnlwdG9fYm94X29wZW5fZWFzeV9hZnRlcm5tOmliLF9jcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX2N1cnZlMjU1MTk6VWMsX3NvZGl1bV9tZW16ZXJvOmVkLF9jcnlwdG9fYm94X3NlYWw6a2IsX2ZyZWU6emQsX2NyeXB0b19zaG9ydGhhc2g6eGMsX2NyeXB0b19hdXRoX2tleWJ5dGVzOlJhLF9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3NhbHRieXRlczpaYixfY3J5cHRvX3NpZ25fc2VlZGJ5dGVzOnpjLF9jcnlwdG9fYm94X2RldGFjaGVkX2FmdGVybm06Y2IsX2NyeXB0b19hdXRoOlNhLF9yYW5kb21ieXRlc19yYW5kb206X2MsX2NyeXB0b19zaWduX2tleXBhaXI6RGMsX2NyeXB0b19zaG9ydGhhc2hfa2V5Ynl0ZXM6d2MsX2NyeXB0b19nZW5lcmljaGFzaF9zdGF0ZWJ5dGVzOnZiLF9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cl92ZXJpZnk6Z2MsX2NyeXB0b19nZW5lcmljaGFzaF9pbml0OnhiLF9jcnlwdG9fZ2VuZXJpY2hhc2hfa2V5Ynl0ZXNfbWF4OnRiLF9jcnlwdG9fc2lnbl9lZDI1NTE5X3BrX3RvX2N1cnZlMjU1MTk6VGMsX2NyeXB0b19ib3hfYmVmb3Jlbm1ieXRlczpZYSxfY3J5cHRvX2dlbmVyaWNoYXNoOndiLF9zb2RpdW1fbGlicmFyeV92ZXJzaW9uX21ham9yOmlkLF9yYW5kb21ieXRlc19zdGlyOiRjLF9yYW5kb21ieXRlc19jbG9zZTpjZCxfY3J5cHRvX29uZXRpbWVhdXRoX2tleWJ5dGVzOktiLF9jcnlwdG9fb25ldGltZWF1dGg6TGIsX2NyeXB0b19zaG9ydGhhc2hfYnl0ZXM6dmMsX2NyeXB0b19ib3hfc2VjcmV0a2V5Ynl0ZXM6WGEsX2NyeXB0b19vbmV0aW1lYXV0aF91cGRhdGU6T2IsX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfbGw6V2IsX2NyeXB0b19ib3hfZGV0YWNoZWQ6ZGIsX3JhbmRvbWJ5dGVzX2J1ZjpiZCxfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHI6ZmMsX2JpdHNoaWZ0NjRBc2hyOkVkLF9jcnlwdG9fYm94X29wZW5fZGV0YWNoZWQ6aGIsX2NyeXB0b19zY2FsYXJtdWx0X2J5dGVzOmtjLF9jcnlwdG9fYXV0aF92ZXJpZnk6VGEsX2NyeXB0b19ib3hfc2VhbF9vcGVuOmxiLF9jcnlwdG9fc2VjcmV0Ym94X2RldGFjaGVkOnJjLF9jcnlwdG9fc2VjcmV0Ym94X2Vhc3k6c2MsX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyYnl0ZXM6X2IsX21lbXNldDpGZCxfY3J5cHRvX2JveF9vcGVuX2RldGFjaGVkX2FmdGVybm06Z2IsX2NyeXB0b19ib3hfc2VhbGJ5dGVzOm1iLF9pNjRTdWJ0cmFjdDpDZCxfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHJwcmVmaXg6JGIsX2NyeXB0b19ib3hfc2VlZGJ5dGVzOlZhLF9jcnlwdG9faGFzaDpDYixfY3J5cHRvX2JveF9lYXN5X2FmdGVybm06ZWIsX2NyeXB0b19ib3hfbWFjYnl0ZXM6X2EsX2NyeXB0b19ib3hfcHVibGlja2V5Ynl0ZXM6V2EsX3NvZGl1bV9iaW4yaGV4OmZkLF9jcnlwdG9fc2lnbl9zZWNyZXRrZXlieXRlczpCYyxfY3J5cHRvX3NjYWxhcm11bHRfc2NhbGFyYnl0ZXM6bGMsX2NyeXB0b19vbmV0aW1lYXV0aF9zdGF0ZWJ5dGVzOkliLF9jcnlwdG9fZ2VuZXJpY2hhc2hfa2V5Ynl0ZXNfbWluOnNiLF9tYWxsb2M6eWQsX21lbW1vdmU6SmQsX2NyeXB0b19zaWduOkVjLF9jcnlwdG9fc2VjcmV0Ym94X25vbmNlYnl0ZXM6cGMsX3JhbmRvbWJ5dGVzX3NldF9pbXBsZW1lbnRhdGlvbjpaYyxfY3J5cHRvX2JveF9rZXlwYWlyOmFiLF9jcnlwdG9fZ2VuZXJpY2hhc2hfa2V5Ynl0ZXM6dWIsX2NyeXB0b19nZW5lcmljaGFzaF9ieXRlc19taW46cGIsX3NvZGl1bV9pbml0OmRkLF9jcnlwdG9fc2VjcmV0Ym94X21hY2J5dGVzOnFjLF9jcnlwdG9fc2VjcmV0Ym94X2tleWJ5dGVzOm9jLF9iaXRzaGlmdDY0U2hsOkhkLF9jcnlwdG9faGFzaF9ieXRlczpCYixfZmZsdXNoOnRkLF9jcnlwdG9fZ2VuZXJpY2hhc2hfYnl0ZXM6cmIsX2NyeXB0b19nZW5lcmljaGFzaF9ieXRlc19tYXg6cWIsX2NyeXB0b19zZWNyZXRib3hfb3Blbl9kZXRhY2hlZDp0YyxfY3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkOkhjLF9jcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5Ok1iLF9jcnlwdG9fYm94X29wZW5fZWFzeTpqYixfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9vcHNsaW1pdF9zZW5zaXRpdmU6Y2MsX2NyeXB0b19zaWduX3B1YmxpY2tleWJ5dGVzOkFjLF9pNjRBZGQ6RGQsX2NyeXB0b19zaWduX2J5dGVzOnljLF9jcnlwdG9fZ2VuZXJpY2hhc2hfdXBkYXRlOnliLF9jcnlwdG9fc2NhbGFybXVsdDpuYyxfY3J5cHRvX3NpZ25fZGV0YWNoZWQ6R2MsX2NyeXB0b19ib3hfZWFzeTpmYixfX19lcnJub19sb2NhdGlvbjpvZCxfY3J5cHRvX29uZXRpbWVhdXRoX2ZpbmFsOlBiLF9jcnlwdG9fc2VjcmV0Ym94X29wZW5fZWFzeTp1YyxfY3J5cHRvX2dlbmVyaWNoYXNoX2ZpbmFsOnpiLF9yYW5kb21ieXRlc191bmlmb3JtOmFkLF9jcnlwdG9fc2lnbl9zZWVkX2tleXBhaXI6Q2MsX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfb3BzbGltaXRfaW50ZXJhY3RpdmU6YWMsX2NyeXB0b19vbmV0aW1lYXV0aF9pbml0Ok5iLHJ1blBvc3RTZXRzOkJkLHN0YWNrQWxsb2M6SGEsc3RhY2tTYXZlOklhLHN0YWNrUmVzdG9yZTpKYSxlc3RhYmxpc2hTdGFja1NwYWNlOkthLHNldFRocmV3OkxhLHNldFRlbXBSZXQwOk9hLGdldFRlbXBSZXQwOlBhLGR5bkNhbGxfaTpTZCxkeW5DYWxsX2lpOiRkLGR5bkNhbGxfaWlpaTppZSxkeW5DYWxsX3ZpOnJlfX0pXG5cblxuLy8gRU1TQ1JJUFRFTl9FTkRfQVNNXG4oTW9kdWxlLmFzbUdsb2JhbEFyZyxNb2R1bGUuYXNtTGlicmFyeUFyZyxidWZmZXIpO3ZhciBfc29kaXVtX2xpYnJhcnlfdmVyc2lvbl9taW5vcj1Nb2R1bGVbXCJfc29kaXVtX2xpYnJhcnlfdmVyc2lvbl9taW5vclwiXT1hc21bXCJfc29kaXVtX2xpYnJhcnlfdmVyc2lvbl9taW5vclwiXTt2YXIgX2NyeXB0b19vbmV0aW1lYXV0aF9ieXRlcz1Nb2R1bGVbXCJfY3J5cHRvX29uZXRpbWVhdXRoX2J5dGVzXCJdPWFzbVtcIl9jcnlwdG9fb25ldGltZWF1dGhfYnl0ZXNcIl07dmFyIF9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X21lbWxpbWl0X3NlbnNpdGl2ZT1Nb2R1bGVbXCJfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9tZW1saW1pdF9zZW5zaXRpdmVcIl09YXNtW1wiX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfbWVtbGltaXRfc2Vuc2l0aXZlXCJdO3ZhciBfYml0c2hpZnQ2NExzaHI9TW9kdWxlW1wiX2JpdHNoaWZ0NjRMc2hyXCJdPWFzbVtcIl9iaXRzaGlmdDY0THNoclwiXTt2YXIgX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTY9TW9kdWxlW1wiX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZcIl09YXNtW1wiX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZcIl07dmFyIF9jcnlwdG9fYm94X25vbmNlYnl0ZXM9TW9kdWxlW1wiX2NyeXB0b19ib3hfbm9uY2VieXRlc1wiXT1hc21bXCJfY3J5cHRvX2JveF9ub25jZWJ5dGVzXCJdO3ZhciBfY3J5cHRvX2JveF9iZWZvcmVubT1Nb2R1bGVbXCJfY3J5cHRvX2JveF9iZWZvcmVubVwiXT1hc21bXCJfY3J5cHRvX2JveF9iZWZvcmVubVwiXTt2YXIgX2NyeXB0b19zY2FsYXJtdWx0X2Jhc2U9TW9kdWxlW1wiX2NyeXB0b19zY2FsYXJtdWx0X2Jhc2VcIl09YXNtW1wiX2NyeXB0b19zY2FsYXJtdWx0X2Jhc2VcIl07dmFyIF9jcnlwdG9fYXV0aF9ieXRlcz1Nb2R1bGVbXCJfY3J5cHRvX2F1dGhfYnl0ZXNcIl09YXNtW1wiX2NyeXB0b19hdXRoX2J5dGVzXCJdO3ZhciBfY3J5cHRvX3NpZ25fb3Blbj1Nb2R1bGVbXCJfY3J5cHRvX3NpZ25fb3BlblwiXT1hc21bXCJfY3J5cHRvX3NpZ25fb3BlblwiXTt2YXIgX21lbWNweT1Nb2R1bGVbXCJfbWVtY3B5XCJdPWFzbVtcIl9tZW1jcHlcIl07dmFyIF9jcnlwdG9fYm94X3NlZWRfa2V5cGFpcj1Nb2R1bGVbXCJfY3J5cHRvX2JveF9zZWVkX2tleXBhaXJcIl09YXNtW1wiX2NyeXB0b19ib3hfc2VlZF9rZXlwYWlyXCJdO3ZhciBfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9tZW1saW1pdF9pbnRlcmFjdGl2ZT1Nb2R1bGVbXCJfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9tZW1saW1pdF9pbnRlcmFjdGl2ZVwiXT1hc21bXCJfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9tZW1saW1pdF9pbnRlcmFjdGl2ZVwiXTt2YXIgX2NyeXB0b19ib3hfb3Blbl9lYXN5X2FmdGVybm09TW9kdWxlW1wiX2NyeXB0b19ib3hfb3Blbl9lYXN5X2FmdGVybm1cIl09YXNtW1wiX2NyeXB0b19ib3hfb3Blbl9lYXN5X2FmdGVybm1cIl07dmFyIF9jcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX2N1cnZlMjU1MTk9TW9kdWxlW1wiX2NyeXB0b19zaWduX2VkMjU1MTlfc2tfdG9fY3VydmUyNTUxOVwiXT1hc21bXCJfY3J5cHRvX3NpZ25fZWQyNTUxOV9za190b19jdXJ2ZTI1NTE5XCJdO3ZhciBfc29kaXVtX21lbXplcm89TW9kdWxlW1wiX3NvZGl1bV9tZW16ZXJvXCJdPWFzbVtcIl9zb2RpdW1fbWVtemVyb1wiXTt2YXIgX2NyeXB0b19ib3hfc2VhbD1Nb2R1bGVbXCJfY3J5cHRvX2JveF9zZWFsXCJdPWFzbVtcIl9jcnlwdG9fYm94X3NlYWxcIl07dmFyIF9mcmVlPU1vZHVsZVtcIl9mcmVlXCJdPWFzbVtcIl9mcmVlXCJdO3ZhciBydW5Qb3N0U2V0cz1Nb2R1bGVbXCJydW5Qb3N0U2V0c1wiXT1hc21bXCJydW5Qb3N0U2V0c1wiXTt2YXIgX2NyeXB0b19zaG9ydGhhc2g9TW9kdWxlW1wiX2NyeXB0b19zaG9ydGhhc2hcIl09YXNtW1wiX2NyeXB0b19zaG9ydGhhc2hcIl07dmFyIF9jcnlwdG9fYXV0aF9rZXlieXRlcz1Nb2R1bGVbXCJfY3J5cHRvX2F1dGhfa2V5Ynl0ZXNcIl09YXNtW1wiX2NyeXB0b19hdXRoX2tleWJ5dGVzXCJdO3ZhciBfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zYWx0Ynl0ZXM9TW9kdWxlW1wiX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc2FsdGJ5dGVzXCJdPWFzbVtcIl9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3NhbHRieXRlc1wiXTt2YXIgX2NyeXB0b19zaWduX3NlZWRieXRlcz1Nb2R1bGVbXCJfY3J5cHRvX3NpZ25fc2VlZGJ5dGVzXCJdPWFzbVtcIl9jcnlwdG9fc2lnbl9zZWVkYnl0ZXNcIl07dmFyIF9jcnlwdG9fYm94X2RldGFjaGVkX2FmdGVybm09TW9kdWxlW1wiX2NyeXB0b19ib3hfZGV0YWNoZWRfYWZ0ZXJubVwiXT1hc21bXCJfY3J5cHRvX2JveF9kZXRhY2hlZF9hZnRlcm5tXCJdO3ZhciBfY3J5cHRvX2F1dGg9TW9kdWxlW1wiX2NyeXB0b19hdXRoXCJdPWFzbVtcIl9jcnlwdG9fYXV0aFwiXTt2YXIgX3JhbmRvbWJ5dGVzX3JhbmRvbT1Nb2R1bGVbXCJfcmFuZG9tYnl0ZXNfcmFuZG9tXCJdPWFzbVtcIl9yYW5kb21ieXRlc19yYW5kb21cIl07dmFyIF9jcnlwdG9fc2lnbl9rZXlwYWlyPU1vZHVsZVtcIl9jcnlwdG9fc2lnbl9rZXlwYWlyXCJdPWFzbVtcIl9jcnlwdG9fc2lnbl9rZXlwYWlyXCJdO3ZhciBfY3J5cHRvX2dlbmVyaWNoYXNoX2tleWJ5dGVzX21pbj1Nb2R1bGVbXCJfY3J5cHRvX2dlbmVyaWNoYXNoX2tleWJ5dGVzX21pblwiXT1hc21bXCJfY3J5cHRvX2dlbmVyaWNoYXNoX2tleWJ5dGVzX21pblwiXTt2YXIgX2NyeXB0b19nZW5lcmljaGFzaF9zdGF0ZWJ5dGVzPU1vZHVsZVtcIl9jcnlwdG9fZ2VuZXJpY2hhc2hfc3RhdGVieXRlc1wiXT1hc21bXCJfY3J5cHRvX2dlbmVyaWNoYXNoX3N0YXRlYnl0ZXNcIl07dmFyIF9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cl92ZXJpZnk9TW9kdWxlW1wiX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyX3ZlcmlmeVwiXT1hc21bXCJfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHJfdmVyaWZ5XCJdO3ZhciBfc29kaXVtX3ZlcnNpb25fc3RyaW5nPU1vZHVsZVtcIl9zb2RpdW1fdmVyc2lvbl9zdHJpbmdcIl09YXNtW1wiX3NvZGl1bV92ZXJzaW9uX3N0cmluZ1wiXTt2YXIgX2NyeXB0b19nZW5lcmljaGFzaF9rZXlieXRlc19tYXg9TW9kdWxlW1wiX2NyeXB0b19nZW5lcmljaGFzaF9rZXlieXRlc19tYXhcIl09YXNtW1wiX2NyeXB0b19nZW5lcmljaGFzaF9rZXlieXRlc19tYXhcIl07dmFyIF9jcnlwdG9fc2lnbl9lZDI1NTE5X3BrX3RvX2N1cnZlMjU1MTk9TW9kdWxlW1wiX2NyeXB0b19zaWduX2VkMjU1MTlfcGtfdG9fY3VydmUyNTUxOVwiXT1hc21bXCJfY3J5cHRvX3NpZ25fZWQyNTUxOV9wa190b19jdXJ2ZTI1NTE5XCJdO3ZhciBfY3J5cHRvX3NpZ25fcHVibGlja2V5Ynl0ZXM9TW9kdWxlW1wiX2NyeXB0b19zaWduX3B1YmxpY2tleWJ5dGVzXCJdPWFzbVtcIl9jcnlwdG9fc2lnbl9wdWJsaWNrZXlieXRlc1wiXTt2YXIgX2NyeXB0b19ib3hfYmVmb3Jlbm1ieXRlcz1Nb2R1bGVbXCJfY3J5cHRvX2JveF9iZWZvcmVubWJ5dGVzXCJdPWFzbVtcIl9jcnlwdG9fYm94X2JlZm9yZW5tYnl0ZXNcIl07dmFyIF9jcnlwdG9fZ2VuZXJpY2hhc2g9TW9kdWxlW1wiX2NyeXB0b19nZW5lcmljaGFzaFwiXT1hc21bXCJfY3J5cHRvX2dlbmVyaWNoYXNoXCJdO3ZhciBfc29kaXVtX2xpYnJhcnlfdmVyc2lvbl9tYWpvcj1Nb2R1bGVbXCJfc29kaXVtX2xpYnJhcnlfdmVyc2lvbl9tYWpvclwiXT1hc21bXCJfc29kaXVtX2xpYnJhcnlfdmVyc2lvbl9tYWpvclwiXTt2YXIgX3JhbmRvbWJ5dGVzX3N0aXI9TW9kdWxlW1wiX3JhbmRvbWJ5dGVzX3N0aXJcIl09YXNtW1wiX3JhbmRvbWJ5dGVzX3N0aXJcIl07dmFyIF9jcnlwdG9fc2hvcnRoYXNoX2tleWJ5dGVzPU1vZHVsZVtcIl9jcnlwdG9fc2hvcnRoYXNoX2tleWJ5dGVzXCJdPWFzbVtcIl9jcnlwdG9fc2hvcnRoYXNoX2tleWJ5dGVzXCJdO3ZhciBfcmFuZG9tYnl0ZXNfY2xvc2U9TW9kdWxlW1wiX3JhbmRvbWJ5dGVzX2Nsb3NlXCJdPWFzbVtcIl9yYW5kb21ieXRlc19jbG9zZVwiXTt2YXIgX2NyeXB0b19vbmV0aW1lYXV0aF9rZXlieXRlcz1Nb2R1bGVbXCJfY3J5cHRvX29uZXRpbWVhdXRoX2tleWJ5dGVzXCJdPWFzbVtcIl9jcnlwdG9fb25ldGltZWF1dGhfa2V5Ynl0ZXNcIl07dmFyIF9jcnlwdG9fb25ldGltZWF1dGg9TW9kdWxlW1wiX2NyeXB0b19vbmV0aW1lYXV0aFwiXT1hc21bXCJfY3J5cHRvX29uZXRpbWVhdXRoXCJdO3ZhciBfY3J5cHRvX3Nob3J0aGFzaF9ieXRlcz1Nb2R1bGVbXCJfY3J5cHRvX3Nob3J0aGFzaF9ieXRlc1wiXT1hc21bXCJfY3J5cHRvX3Nob3J0aGFzaF9ieXRlc1wiXTt2YXIgX2NyeXB0b19ib3hfc2VjcmV0a2V5Ynl0ZXM9TW9kdWxlW1wiX2NyeXB0b19ib3hfc2VjcmV0a2V5Ynl0ZXNcIl09YXNtW1wiX2NyeXB0b19ib3hfc2VjcmV0a2V5Ynl0ZXNcIl07dmFyIF9jcnlwdG9fb25ldGltZWF1dGhfdXBkYXRlPU1vZHVsZVtcIl9jcnlwdG9fb25ldGltZWF1dGhfdXBkYXRlXCJdPWFzbVtcIl9jcnlwdG9fb25ldGltZWF1dGhfdXBkYXRlXCJdO3ZhciBfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9sbD1Nb2R1bGVbXCJfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9sbFwiXT1hc21bXCJfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9sbFwiXTt2YXIgX2NyeXB0b19ib3hfZGV0YWNoZWQ9TW9kdWxlW1wiX2NyeXB0b19ib3hfZGV0YWNoZWRcIl09YXNtW1wiX2NyeXB0b19ib3hfZGV0YWNoZWRcIl07dmFyIF9yYW5kb21ieXRlc19idWY9TW9kdWxlW1wiX3JhbmRvbWJ5dGVzX2J1ZlwiXT1hc21bXCJfcmFuZG9tYnl0ZXNfYnVmXCJdO3ZhciBfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHJieXRlcz1Nb2R1bGVbXCJfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHJieXRlc1wiXT1hc21bXCJfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHJieXRlc1wiXTt2YXIgX2JpdHNoaWZ0NjRBc2hyPU1vZHVsZVtcIl9iaXRzaGlmdDY0QXNoclwiXT1hc21bXCJfYml0c2hpZnQ2NEFzaHJcIl07dmFyIF9jcnlwdG9fYm94X29wZW5fZGV0YWNoZWQ9TW9kdWxlW1wiX2NyeXB0b19ib3hfb3Blbl9kZXRhY2hlZFwiXT1hc21bXCJfY3J5cHRvX2JveF9vcGVuX2RldGFjaGVkXCJdO3ZhciBfY3J5cHRvX3NjYWxhcm11bHRfYnl0ZXM9TW9kdWxlW1wiX2NyeXB0b19zY2FsYXJtdWx0X2J5dGVzXCJdPWFzbVtcIl9jcnlwdG9fc2NhbGFybXVsdF9ieXRlc1wiXTt2YXIgX2NyeXB0b19hdXRoX3ZlcmlmeT1Nb2R1bGVbXCJfY3J5cHRvX2F1dGhfdmVyaWZ5XCJdPWFzbVtcIl9jcnlwdG9fYXV0aF92ZXJpZnlcIl07dmFyIF9jcnlwdG9fc2lnbl9kZXRhY2hlZD1Nb2R1bGVbXCJfY3J5cHRvX3NpZ25fZGV0YWNoZWRcIl09YXNtW1wiX2NyeXB0b19zaWduX2RldGFjaGVkXCJdO3ZhciBfY3J5cHRvX3NlY3JldGJveF9kZXRhY2hlZD1Nb2R1bGVbXCJfY3J5cHRvX3NlY3JldGJveF9kZXRhY2hlZFwiXT1hc21bXCJfY3J5cHRvX3NlY3JldGJveF9kZXRhY2hlZFwiXTt2YXIgX2NyeXB0b19zZWNyZXRib3hfZWFzeT1Nb2R1bGVbXCJfY3J5cHRvX3NlY3JldGJveF9lYXN5XCJdPWFzbVtcIl9jcnlwdG9fc2VjcmV0Ym94X2Vhc3lcIl07dmFyIF9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cj1Nb2R1bGVbXCJfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHJcIl09YXNtW1wiX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyXCJdO3ZhciBfbWVtc2V0PU1vZHVsZVtcIl9tZW1zZXRcIl09YXNtW1wiX21lbXNldFwiXTt2YXIgX2NyeXB0b19ib3hfb3Blbl9kZXRhY2hlZF9hZnRlcm5tPU1vZHVsZVtcIl9jcnlwdG9fYm94X29wZW5fZGV0YWNoZWRfYWZ0ZXJubVwiXT1hc21bXCJfY3J5cHRvX2JveF9vcGVuX2RldGFjaGVkX2FmdGVybm1cIl07dmFyIF9jcnlwdG9fYm94X3NlYWxieXRlcz1Nb2R1bGVbXCJfY3J5cHRvX2JveF9zZWFsYnl0ZXNcIl09YXNtW1wiX2NyeXB0b19ib3hfc2VhbGJ5dGVzXCJdO3ZhciBfaTY0U3VidHJhY3Q9TW9kdWxlW1wiX2k2NFN1YnRyYWN0XCJdPWFzbVtcIl9pNjRTdWJ0cmFjdFwiXTt2YXIgX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RycHJlZml4PU1vZHVsZVtcIl9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cnByZWZpeFwiXT1hc21bXCJfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHJwcmVmaXhcIl07dmFyIF9jcnlwdG9fYm94X3NlZWRieXRlcz1Nb2R1bGVbXCJfY3J5cHRvX2JveF9zZWVkYnl0ZXNcIl09YXNtW1wiX2NyeXB0b19ib3hfc2VlZGJ5dGVzXCJdO3ZhciBfY3J5cHRvX2hhc2g9TW9kdWxlW1wiX2NyeXB0b19oYXNoXCJdPWFzbVtcIl9jcnlwdG9faGFzaFwiXTt2YXIgX2NyeXB0b19ib3hfZWFzeV9hZnRlcm5tPU1vZHVsZVtcIl9jcnlwdG9fYm94X2Vhc3lfYWZ0ZXJubVwiXT1hc21bXCJfY3J5cHRvX2JveF9lYXN5X2FmdGVybm1cIl07dmFyIF9jcnlwdG9fYm94X21hY2J5dGVzPU1vZHVsZVtcIl9jcnlwdG9fYm94X21hY2J5dGVzXCJdPWFzbVtcIl9jcnlwdG9fYm94X21hY2J5dGVzXCJdO3ZhciBfY3J5cHRvX2JveF9wdWJsaWNrZXlieXRlcz1Nb2R1bGVbXCJfY3J5cHRvX2JveF9wdWJsaWNrZXlieXRlc1wiXT1hc21bXCJfY3J5cHRvX2JveF9wdWJsaWNrZXlieXRlc1wiXTt2YXIgX3NvZGl1bV9iaW4yaGV4PU1vZHVsZVtcIl9zb2RpdW1fYmluMmhleFwiXT1hc21bXCJfc29kaXVtX2JpbjJoZXhcIl07dmFyIF9jcnlwdG9fc2lnbl9zZWNyZXRrZXlieXRlcz1Nb2R1bGVbXCJfY3J5cHRvX3NpZ25fc2VjcmV0a2V5Ynl0ZXNcIl09YXNtW1wiX2NyeXB0b19zaWduX3NlY3JldGtleWJ5dGVzXCJdO3ZhciBfY3J5cHRvX3NjYWxhcm11bHRfc2NhbGFyYnl0ZXM9TW9kdWxlW1wiX2NyeXB0b19zY2FsYXJtdWx0X3NjYWxhcmJ5dGVzXCJdPWFzbVtcIl9jcnlwdG9fc2NhbGFybXVsdF9zY2FsYXJieXRlc1wiXTt2YXIgX2NyeXB0b19vbmV0aW1lYXV0aF9zdGF0ZWJ5dGVzPU1vZHVsZVtcIl9jcnlwdG9fb25ldGltZWF1dGhfc3RhdGVieXRlc1wiXT1hc21bXCJfY3J5cHRvX29uZXRpbWVhdXRoX3N0YXRlYnl0ZXNcIl07dmFyIF9jcnlwdG9fZ2VuZXJpY2hhc2hfYnl0ZXNfbWluPU1vZHVsZVtcIl9jcnlwdG9fZ2VuZXJpY2hhc2hfYnl0ZXNfbWluXCJdPWFzbVtcIl9jcnlwdG9fZ2VuZXJpY2hhc2hfYnl0ZXNfbWluXCJdO3ZhciBfbWFsbG9jPU1vZHVsZVtcIl9tYWxsb2NcIl09YXNtW1wiX21hbGxvY1wiXTt2YXIgX2NyeXB0b19zZWNyZXRib3hfb3Blbl9lYXN5PU1vZHVsZVtcIl9jcnlwdG9fc2VjcmV0Ym94X29wZW5fZWFzeVwiXT1hc21bXCJfY3J5cHRvX3NlY3JldGJveF9vcGVuX2Vhc3lcIl07dmFyIF9jcnlwdG9fc2lnbj1Nb2R1bGVbXCJfY3J5cHRvX3NpZ25cIl09YXNtW1wiX2NyeXB0b19zaWduXCJdO3ZhciBfY3J5cHRvX3NlY3JldGJveF9ub25jZWJ5dGVzPU1vZHVsZVtcIl9jcnlwdG9fc2VjcmV0Ym94X25vbmNlYnl0ZXNcIl09YXNtW1wiX2NyeXB0b19zZWNyZXRib3hfbm9uY2VieXRlc1wiXTt2YXIgX3JhbmRvbWJ5dGVzX3NldF9pbXBsZW1lbnRhdGlvbj1Nb2R1bGVbXCJfcmFuZG9tYnl0ZXNfc2V0X2ltcGxlbWVudGF0aW9uXCJdPWFzbVtcIl9yYW5kb21ieXRlc19zZXRfaW1wbGVtZW50YXRpb25cIl07dmFyIF9jcnlwdG9fYm94X2tleXBhaXI9TW9kdWxlW1wiX2NyeXB0b19ib3hfa2V5cGFpclwiXT1hc21bXCJfY3J5cHRvX2JveF9rZXlwYWlyXCJdO3ZhciBfY3J5cHRvX2dlbmVyaWNoYXNoX2tleWJ5dGVzPU1vZHVsZVtcIl9jcnlwdG9fZ2VuZXJpY2hhc2hfa2V5Ynl0ZXNcIl09YXNtW1wiX2NyeXB0b19nZW5lcmljaGFzaF9rZXlieXRlc1wiXTt2YXIgX3NvZGl1bV9oZXgyYmluPU1vZHVsZVtcIl9zb2RpdW1faGV4MmJpblwiXT1hc21bXCJfc29kaXVtX2hleDJiaW5cIl07dmFyIF9zb2RpdW1faW5pdD1Nb2R1bGVbXCJfc29kaXVtX2luaXRcIl09YXNtW1wiX3NvZGl1bV9pbml0XCJdO3ZhciBfY3J5cHRvX3NlY3JldGJveF9tYWNieXRlcz1Nb2R1bGVbXCJfY3J5cHRvX3NlY3JldGJveF9tYWNieXRlc1wiXT1hc21bXCJfY3J5cHRvX3NlY3JldGJveF9tYWNieXRlc1wiXTt2YXIgX2NyeXB0b19zZWNyZXRib3hfa2V5Ynl0ZXM9TW9kdWxlW1wiX2NyeXB0b19zZWNyZXRib3hfa2V5Ynl0ZXNcIl09YXNtW1wiX2NyeXB0b19zZWNyZXRib3hfa2V5Ynl0ZXNcIl07dmFyIF9iaXRzaGlmdDY0U2hsPU1vZHVsZVtcIl9iaXRzaGlmdDY0U2hsXCJdPWFzbVtcIl9iaXRzaGlmdDY0U2hsXCJdO3ZhciBfY3J5cHRvX2hhc2hfYnl0ZXM9TW9kdWxlW1wiX2NyeXB0b19oYXNoX2J5dGVzXCJdPWFzbVtcIl9jcnlwdG9faGFzaF9ieXRlc1wiXTt2YXIgX2ZmbHVzaD1Nb2R1bGVbXCJfZmZsdXNoXCJdPWFzbVtcIl9mZmx1c2hcIl07dmFyIF9jcnlwdG9fZ2VuZXJpY2hhc2hfYnl0ZXM9TW9kdWxlW1wiX2NyeXB0b19nZW5lcmljaGFzaF9ieXRlc1wiXT1hc21bXCJfY3J5cHRvX2dlbmVyaWNoYXNoX2J5dGVzXCJdO3ZhciBfY3J5cHRvX2dlbmVyaWNoYXNoX2J5dGVzX21heD1Nb2R1bGVbXCJfY3J5cHRvX2dlbmVyaWNoYXNoX2J5dGVzX21heFwiXT1hc21bXCJfY3J5cHRvX2dlbmVyaWNoYXNoX2J5dGVzX21heFwiXTt2YXIgX2NyeXB0b19zZWNyZXRib3hfb3Blbl9kZXRhY2hlZD1Nb2R1bGVbXCJfY3J5cHRvX3NlY3JldGJveF9vcGVuX2RldGFjaGVkXCJdPWFzbVtcIl9jcnlwdG9fc2VjcmV0Ym94X29wZW5fZGV0YWNoZWRcIl07dmFyIF9jcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQ9TW9kdWxlW1wiX2NyeXB0b19zaWduX3ZlcmlmeV9kZXRhY2hlZFwiXT1hc21bXCJfY3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkXCJdO3ZhciBfY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeT1Nb2R1bGVbXCJfY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeVwiXT1hc21bXCJfY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeVwiXTt2YXIgX2NyeXB0b19ib3hfb3Blbl9lYXN5PU1vZHVsZVtcIl9jcnlwdG9fYm94X29wZW5fZWFzeVwiXT1hc21bXCJfY3J5cHRvX2JveF9vcGVuX2Vhc3lcIl07dmFyIF9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X29wc2xpbWl0X3NlbnNpdGl2ZT1Nb2R1bGVbXCJfY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9vcHNsaW1pdF9zZW5zaXRpdmVcIl09YXNtW1wiX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfb3BzbGltaXRfc2Vuc2l0aXZlXCJdO3ZhciBfY3J5cHRvX2dlbmVyaWNoYXNoX2luaXQ9TW9kdWxlW1wiX2NyeXB0b19nZW5lcmljaGFzaF9pbml0XCJdPWFzbVtcIl9jcnlwdG9fZ2VuZXJpY2hhc2hfaW5pdFwiXTt2YXIgX2k2NEFkZD1Nb2R1bGVbXCJfaTY0QWRkXCJdPWFzbVtcIl9pNjRBZGRcIl07dmFyIF9jcnlwdG9fc2lnbl9ieXRlcz1Nb2R1bGVbXCJfY3J5cHRvX3NpZ25fYnl0ZXNcIl09YXNtW1wiX2NyeXB0b19zaWduX2J5dGVzXCJdO3ZhciBfY3J5cHRvX2dlbmVyaWNoYXNoX3VwZGF0ZT1Nb2R1bGVbXCJfY3J5cHRvX2dlbmVyaWNoYXNoX3VwZGF0ZVwiXT1hc21bXCJfY3J5cHRvX2dlbmVyaWNoYXNoX3VwZGF0ZVwiXTt2YXIgX2NyeXB0b19zY2FsYXJtdWx0PU1vZHVsZVtcIl9jcnlwdG9fc2NhbGFybXVsdFwiXT1hc21bXCJfY3J5cHRvX3NjYWxhcm11bHRcIl07dmFyIF9jcnlwdG9fYm94X3NlYWxfb3Blbj1Nb2R1bGVbXCJfY3J5cHRvX2JveF9zZWFsX29wZW5cIl09YXNtW1wiX2NyeXB0b19ib3hfc2VhbF9vcGVuXCJdO3ZhciBfY3J5cHRvX2JveF9lYXN5PU1vZHVsZVtcIl9jcnlwdG9fYm94X2Vhc3lcIl09YXNtW1wiX2NyeXB0b19ib3hfZWFzeVwiXTt2YXIgX19fZXJybm9fbG9jYXRpb249TW9kdWxlW1wiX19fZXJybm9fbG9jYXRpb25cIl09YXNtW1wiX19fZXJybm9fbG9jYXRpb25cIl07dmFyIF9jcnlwdG9fb25ldGltZWF1dGhfZmluYWw9TW9kdWxlW1wiX2NyeXB0b19vbmV0aW1lYXV0aF9maW5hbFwiXT1hc21bXCJfY3J5cHRvX29uZXRpbWVhdXRoX2ZpbmFsXCJdO3ZhciBfbWVtbW92ZT1Nb2R1bGVbXCJfbWVtbW92ZVwiXT1hc21bXCJfbWVtbW92ZVwiXTt2YXIgX2NyeXB0b19nZW5lcmljaGFzaF9maW5hbD1Nb2R1bGVbXCJfY3J5cHRvX2dlbmVyaWNoYXNoX2ZpbmFsXCJdPWFzbVtcIl9jcnlwdG9fZ2VuZXJpY2hhc2hfZmluYWxcIl07dmFyIF9yYW5kb21ieXRlc191bmlmb3JtPU1vZHVsZVtcIl9yYW5kb21ieXRlc191bmlmb3JtXCJdPWFzbVtcIl9yYW5kb21ieXRlc191bmlmb3JtXCJdO3ZhciBfY3J5cHRvX3NpZ25fc2VlZF9rZXlwYWlyPU1vZHVsZVtcIl9jcnlwdG9fc2lnbl9zZWVkX2tleXBhaXJcIl09YXNtW1wiX2NyeXB0b19zaWduX3NlZWRfa2V5cGFpclwiXTt2YXIgX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfb3BzbGltaXRfaW50ZXJhY3RpdmU9TW9kdWxlW1wiX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfb3BzbGltaXRfaW50ZXJhY3RpdmVcIl09YXNtW1wiX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfb3BzbGltaXRfaW50ZXJhY3RpdmVcIl07dmFyIF9jcnlwdG9fb25ldGltZWF1dGhfaW5pdD1Nb2R1bGVbXCJfY3J5cHRvX29uZXRpbWVhdXRoX2luaXRcIl09YXNtW1wiX2NyeXB0b19vbmV0aW1lYXV0aF9pbml0XCJdO3ZhciBkeW5DYWxsX2k9TW9kdWxlW1wiZHluQ2FsbF9pXCJdPWFzbVtcImR5bkNhbGxfaVwiXTt2YXIgZHluQ2FsbF9paT1Nb2R1bGVbXCJkeW5DYWxsX2lpXCJdPWFzbVtcImR5bkNhbGxfaWlcIl07dmFyIGR5bkNhbGxfaWlpaT1Nb2R1bGVbXCJkeW5DYWxsX2lpaWlcIl09YXNtW1wiZHluQ2FsbF9paWlpXCJdO3ZhciBkeW5DYWxsX3ZpPU1vZHVsZVtcImR5bkNhbGxfdmlcIl09YXNtW1wiZHluQ2FsbF92aVwiXTtSdW50aW1lLnN0YWNrQWxsb2M9YXNtW1wic3RhY2tBbGxvY1wiXTtSdW50aW1lLnN0YWNrU2F2ZT1hc21bXCJzdGFja1NhdmVcIl07UnVudGltZS5zdGFja1Jlc3RvcmU9YXNtW1wic3RhY2tSZXN0b3JlXCJdO1J1bnRpbWUuZXN0YWJsaXNoU3RhY2tTcGFjZT1hc21bXCJlc3RhYmxpc2hTdGFja1NwYWNlXCJdO1J1bnRpbWUuc2V0VGVtcFJldDA9YXNtW1wic2V0VGVtcFJldDBcIl07UnVudGltZS5nZXRUZW1wUmV0MD1hc21bXCJnZXRUZW1wUmV0MFwiXTtmdW5jdGlvbiBFeGl0U3RhdHVzKHN0YXR1cyl7dGhpcy5uYW1lPVwiRXhpdFN0YXR1c1wiO3RoaXMubWVzc2FnZT1cIlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoXCIrc3RhdHVzK1wiKVwiO3RoaXMuc3RhdHVzPXN0YXR1c31FeGl0U3RhdHVzLnByb3RvdHlwZT1uZXcgRXJyb3I7RXhpdFN0YXR1cy5wcm90b3R5cGUuY29uc3RydWN0b3I9RXhpdFN0YXR1czt2YXIgaW5pdGlhbFN0YWNrVG9wO3ZhciBwcmVsb2FkU3RhcnRUaW1lPW51bGw7dmFyIGNhbGxlZE1haW49ZmFsc2U7ZGVwZW5kZW5jaWVzRnVsZmlsbGVkPWZ1bmN0aW9uIHJ1bkNhbGxlcigpe2lmKCFNb2R1bGVbXCJjYWxsZWRSdW5cIl0pcnVuKCk7aWYoIU1vZHVsZVtcImNhbGxlZFJ1blwiXSlkZXBlbmRlbmNpZXNGdWxmaWxsZWQ9cnVuQ2FsbGVyfTtNb2R1bGVbXCJjYWxsTWFpblwiXT1Nb2R1bGUuY2FsbE1haW49ZnVuY3Rpb24gY2FsbE1haW4oYXJncyl7YXNzZXJ0KHJ1bkRlcGVuZGVuY2llcz09MCxcImNhbm5vdCBjYWxsIG1haW4gd2hlbiBhc3luYyBkZXBlbmRlbmNpZXMgcmVtYWluISAobGlzdGVuIG9uIF9fQVRNQUlOX18pXCIpO2Fzc2VydChfX0FUUFJFUlVOX18ubGVuZ3RoPT0wLFwiY2Fubm90IGNhbGwgbWFpbiB3aGVuIHByZVJ1biBmdW5jdGlvbnMgcmVtYWluIHRvIGJlIGNhbGxlZFwiKTthcmdzPWFyZ3N8fFtdO2Vuc3VyZUluaXRSdW50aW1lKCk7dmFyIGFyZ2M9YXJncy5sZW5ndGgrMTtmdW5jdGlvbiBwYWQoKXtmb3IodmFyIGk9MDtpPDQtMTtpKyspe2FyZ3YucHVzaCgwKX19dmFyIGFyZ3Y9W2FsbG9jYXRlKGludEFycmF5RnJvbVN0cmluZyhNb2R1bGVbXCJ0aGlzUHJvZ3JhbVwiXSksXCJpOFwiLEFMTE9DX05PUk1BTCldO3BhZCgpO2Zvcih2YXIgaT0wO2k8YXJnYy0xO2k9aSsxKXthcmd2LnB1c2goYWxsb2NhdGUoaW50QXJyYXlGcm9tU3RyaW5nKGFyZ3NbaV0pLFwiaThcIixBTExPQ19OT1JNQUwpKTtwYWQoKX1hcmd2LnB1c2goMCk7YXJndj1hbGxvY2F0ZShhcmd2LFwiaTMyXCIsQUxMT0NfTk9STUFMKTt0cnl7dmFyIHJldD1Nb2R1bGVbXCJfbWFpblwiXShhcmdjLGFyZ3YsMCk7ZXhpdChyZXQsdHJ1ZSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEV4aXRTdGF0dXMpe3JldHVybn1lbHNlIGlmKGU9PVwiU2ltdWxhdGVJbmZpbml0ZUxvb3BcIil7TW9kdWxlW1wibm9FeGl0UnVudGltZVwiXT10cnVlO3JldHVybn1lbHNle2lmKGUmJnR5cGVvZiBlPT09XCJvYmplY3RcIiYmZS5zdGFjaylNb2R1bGUucHJpbnRFcnIoXCJleGNlcHRpb24gdGhyb3duOiBcIitbZSxlLnN0YWNrXSk7dGhyb3cgZX19ZmluYWxseXtjYWxsZWRNYWluPXRydWV9fTtmdW5jdGlvbiBydW4oYXJncyl7YXJncz1hcmdzfHxNb2R1bGVbXCJhcmd1bWVudHNcIl07aWYocHJlbG9hZFN0YXJ0VGltZT09PW51bGwpcHJlbG9hZFN0YXJ0VGltZT1EYXRlLm5vdygpO2lmKHJ1bkRlcGVuZGVuY2llcz4wKXtyZXR1cm59cHJlUnVuKCk7aWYocnVuRGVwZW5kZW5jaWVzPjApcmV0dXJuO2lmKE1vZHVsZVtcImNhbGxlZFJ1blwiXSlyZXR1cm47ZnVuY3Rpb24gZG9SdW4oKXtpZihNb2R1bGVbXCJjYWxsZWRSdW5cIl0pcmV0dXJuO01vZHVsZVtcImNhbGxlZFJ1blwiXT10cnVlO2lmKEFCT1JUKXJldHVybjtlbnN1cmVJbml0UnVudGltZSgpO3ByZU1haW4oKTtpZihNb2R1bGVbXCJvblJ1bnRpbWVJbml0aWFsaXplZFwiXSlNb2R1bGVbXCJvblJ1bnRpbWVJbml0aWFsaXplZFwiXSgpO2lmKE1vZHVsZVtcIl9tYWluXCJdJiZzaG91bGRSdW5Ob3cpTW9kdWxlW1wiY2FsbE1haW5cIl0oYXJncyk7cG9zdFJ1bigpfWlmKE1vZHVsZVtcInNldFN0YXR1c1wiXSl7TW9kdWxlW1wic2V0U3RhdHVzXCJdKFwiUnVubmluZy4uLlwiKTtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7TW9kdWxlW1wic2V0U3RhdHVzXCJdKFwiXCIpfSksMSk7ZG9SdW4oKX0pLDEpfWVsc2V7ZG9SdW4oKX19TW9kdWxlW1wicnVuXCJdPU1vZHVsZS5ydW49cnVuO2Z1bmN0aW9uIGV4aXQoc3RhdHVzLGltcGxpY2l0KXtpZihpbXBsaWNpdCYmTW9kdWxlW1wibm9FeGl0UnVudGltZVwiXSl7cmV0dXJufWlmKE1vZHVsZVtcIm5vRXhpdFJ1bnRpbWVcIl0pe31lbHNle0FCT1JUPXRydWU7RVhJVFNUQVRVUz1zdGF0dXM7U1RBQ0tUT1A9aW5pdGlhbFN0YWNrVG9wO2V4aXRSdW50aW1lKCk7aWYoTW9kdWxlW1wib25FeGl0XCJdKU1vZHVsZVtcIm9uRXhpdFwiXShzdGF0dXMpfWlmKEVOVklST05NRU5UX0lTX05PREUpe3Byb2Nlc3NbXCJzdGRvdXRcIl1bXCJvbmNlXCJdKFwiZHJhaW5cIiwoZnVuY3Rpb24oKXtwcm9jZXNzW1wiZXhpdFwiXShzdGF0dXMpfSkpO2NvbnNvbGUubG9nKFwiIFwiKTtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Byb2Nlc3NbXCJleGl0XCJdKHN0YXR1cyl9KSw1MDApfWVsc2UgaWYoRU5WSVJPTk1FTlRfSVNfU0hFTEwmJnR5cGVvZiBxdWl0PT09XCJmdW5jdGlvblwiKXtxdWl0KHN0YXR1cyl9dGhyb3cgbmV3IEV4aXRTdGF0dXMoc3RhdHVzKX1Nb2R1bGVbXCJleGl0XCJdPU1vZHVsZS5leGl0PWV4aXQ7dmFyIGFib3J0RGVjb3JhdG9ycz1bXTtmdW5jdGlvbiBhYm9ydCh3aGF0KXtpZih3aGF0IT09dW5kZWZpbmVkKXtNb2R1bGUucHJpbnQod2hhdCk7TW9kdWxlLnByaW50RXJyKHdoYXQpO3doYXQ9SlNPTi5zdHJpbmdpZnkod2hhdCl9ZWxzZXt3aGF0PVwiXCJ9QUJPUlQ9dHJ1ZTtFWElUU1RBVFVTPTE7dmFyIGV4dHJhPVwiXFxuSWYgdGhpcyBhYm9ydCgpIGlzIHVuZXhwZWN0ZWQsIGJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIHdoaWNoIGNhbiBnaXZlIG1vcmUgaW5mb3JtYXRpb24uXCI7dmFyIG91dHB1dD1cImFib3J0KFwiK3doYXQrXCIpIGF0IFwiK3N0YWNrVHJhY2UoKStleHRyYTtpZihhYm9ydERlY29yYXRvcnMpe2Fib3J0RGVjb3JhdG9ycy5mb3JFYWNoKChmdW5jdGlvbihkZWNvcmF0b3Ipe291dHB1dD1kZWNvcmF0b3Iob3V0cHV0LHdoYXQpfSkpfXRocm93IG91dHB1dH1Nb2R1bGVbXCJhYm9ydFwiXT1Nb2R1bGUuYWJvcnQ9YWJvcnQ7aWYoTW9kdWxlW1wicHJlSW5pdFwiXSl7aWYodHlwZW9mIE1vZHVsZVtcInByZUluaXRcIl09PVwiZnVuY3Rpb25cIilNb2R1bGVbXCJwcmVJbml0XCJdPVtNb2R1bGVbXCJwcmVJbml0XCJdXTt3aGlsZShNb2R1bGVbXCJwcmVJbml0XCJdLmxlbmd0aD4wKXtNb2R1bGVbXCJwcmVJbml0XCJdLnBvcCgpKCl9fXZhciBzaG91bGRSdW5Ob3c9dHJ1ZTtpZihNb2R1bGVbXCJub0luaXRpYWxSdW5cIl0pe3Nob3VsZFJ1bk5vdz1mYWxzZX1ydW4oKVxuXG5cblxuXG4gICAgcmV0dXJuIE1vZHVsZTtcbn0pO1xuIiwidmFyIHJhZiA9IHJlcXVpcmUoXCJyYWZcIilcbnZhciBUeXBlZEVycm9yID0gcmVxdWlyZShcImVycm9yL3R5cGVkXCIpXG5cbnZhciBJbnZhbGlkVXBkYXRlSW5SZW5kZXIgPSBUeXBlZEVycm9yKHtcbiAgICB0eXBlOiBcIm1haW4tbG9vcC5pbnZhbGlkLnVwZGF0ZS5pbi1yZW5kZXJcIixcbiAgICBtZXNzYWdlOiBcIm1haW4tbG9vcDogVW5leHBlY3RlZCB1cGRhdGUgb2NjdXJyZWQgaW4gbG9vcC5cXG5cIiArXG4gICAgICAgIFwiV2UgYXJlIGN1cnJlbnRseSByZW5kZXJpbmcgYSB2aWV3LCBcIiArXG4gICAgICAgICAgICBcInlvdSBjYW4ndCBjaGFuZ2Ugc3RhdGUgcmlnaHQgbm93LlxcblwiICtcbiAgICAgICAgXCJUaGUgZGlmZiBpczoge3N0cmluZ0RpZmZ9LlxcblwiICtcbiAgICAgICAgXCJTVUdHRVNURUQgRklYOiBmaW5kIHRoZSBzdGF0ZSBtdXRhdGlvbiBpbiB5b3VyIHZpZXcgXCIgK1xuICAgICAgICAgICAgXCJvciByZW5kZXJpbmcgZnVuY3Rpb24gYW5kIHJlbW92ZSBpdC5cXG5cIiArXG4gICAgICAgIFwiVGhlIHZpZXcgc2hvdWxkIG5vdCBoYXZlIGFueSBzaWRlIGVmZmVjdHMuXFxuXCIsXG4gICAgZGlmZjogbnVsbCxcbiAgICBzdHJpbmdEaWZmOiBudWxsXG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1haW5cblxuZnVuY3Rpb24gbWFpbihpbml0aWFsU3RhdGUsIHZpZXcsIG9wdHMpIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fVxuXG4gICAgdmFyIGN1cnJlbnRTdGF0ZSA9IGluaXRpYWxTdGF0ZVxuICAgIHZhciBjcmVhdGUgPSBvcHRzLmNyZWF0ZVxuICAgIHZhciBkaWZmID0gb3B0cy5kaWZmXG4gICAgdmFyIHBhdGNoID0gb3B0cy5wYXRjaFxuICAgIHZhciByZWRyYXdTY2hlZHVsZWQgPSBmYWxzZVxuXG4gICAgdmFyIHRyZWUgPSBvcHRzLmluaXRpYWxUcmVlIHx8IHZpZXcoY3VycmVudFN0YXRlKVxuICAgIHZhciB0YXJnZXQgPSBvcHRzLnRhcmdldCB8fCBjcmVhdGUodHJlZSwgb3B0cylcbiAgICB2YXIgaW5SZW5kZXJpbmdUcmFuc2FjdGlvbiA9IGZhbHNlXG5cbiAgICBjdXJyZW50U3RhdGUgPSBudWxsXG5cbiAgICB2YXIgbG9vcCA9IHtcbiAgICAgICAgc3RhdGU6IGluaXRpYWxTdGF0ZSxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgIHVwZGF0ZTogdXBkYXRlXG4gICAgfVxuICAgIHJldHVybiBsb29wXG5cbiAgICBmdW5jdGlvbiB1cGRhdGUoc3RhdGUpIHtcbiAgICAgICAgaWYgKGluUmVuZGVyaW5nVHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgIHRocm93IEludmFsaWRVcGRhdGVJblJlbmRlcih7XG4gICAgICAgICAgICAgICAgZGlmZjogc3RhdGUuX2RpZmYsXG4gICAgICAgICAgICAgICAgc3RyaW5nRGlmZjogSlNPTi5zdHJpbmdpZnkoc3RhdGUuX2RpZmYpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PT0gbnVsbCAmJiAhcmVkcmF3U2NoZWR1bGVkKSB7XG4gICAgICAgICAgICByZWRyYXdTY2hlZHVsZWQgPSB0cnVlXG4gICAgICAgICAgICByYWYocmVkcmF3KVxuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFN0YXRlID0gc3RhdGVcbiAgICAgICAgbG9vcC5zdGF0ZSA9IHN0YXRlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVkcmF3KCkge1xuICAgICAgICByZWRyYXdTY2hlZHVsZWQgPSBmYWxzZVxuICAgICAgICBpZiAoY3VycmVudFN0YXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGluUmVuZGVyaW5nVHJhbnNhY3Rpb24gPSB0cnVlXG4gICAgICAgIHZhciBuZXdUcmVlID0gdmlldyhjdXJyZW50U3RhdGUpXG5cbiAgICAgICAgaWYgKG9wdHMuY3JlYXRlT25seSkge1xuICAgICAgICAgICAgaW5SZW5kZXJpbmdUcmFuc2FjdGlvbiA9IGZhbHNlXG4gICAgICAgICAgICBjcmVhdGUobmV3VHJlZSwgb3B0cylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwYXRjaGVzID0gZGlmZih0cmVlLCBuZXdUcmVlLCBvcHRzKVxuICAgICAgICAgICAgaW5SZW5kZXJpbmdUcmFuc2FjdGlvbiA9IGZhbHNlXG4gICAgICAgICAgICB0YXJnZXQgPSBwYXRjaCh0YXJnZXQsIHBhdGNoZXMsIG9wdHMpXG4gICAgICAgIH1cblxuICAgICAgICB0cmVlID0gbmV3VHJlZVxuICAgICAgICBjdXJyZW50U3RhdGUgPSBudWxsXG4gICAgfVxufVxuIiwidmFyIGxldmVsdXAgPSByZXF1aXJlKCdsZXZlbHVwJyk7XG52YXIgbWVtZG93biA9IHJlcXVpcmUoJ21lbWRvd24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNZW1EQjtcblxuZnVuY3Rpb24gTWVtREIgKG9wdHMsIGZuKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PSAnZnVuY3Rpb24nKSB7XG4gICAgZm4gPSBvcHRzO1xuICAgIG9wdHMgPSB7fTtcbiAgfVxuICBpZiAodHlwZW9mIG9wdHMgPT0gJ3N0cmluZycpIG9wdHMgPSB7fTtcbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIG9wdHMuZGIgPSBmdW5jdGlvbiAobCkgeyByZXR1cm4gbmV3IG1lbWRvd24obCkgfTtcbiAgcmV0dXJuIGxldmVsdXAoJycsIG9wdHMsIGZuKTtcbn1cblxuIiwidmFyIGluaGVyaXRzICAgICAgICAgID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIEFic3RyYWN0TGV2ZWxET1dOID0gcmVxdWlyZSgnYWJzdHJhY3QtbGV2ZWxkb3duJykuQWJzdHJhY3RMZXZlbERPV05cbiAgLCBBYnN0cmFjdEl0ZXJhdG9yICA9IHJlcXVpcmUoJ2Fic3RyYWN0LWxldmVsZG93bicpLkFic3RyYWN0SXRlcmF0b3JcbiAgLCBsdGd0ICAgICAgICAgICAgICA9IHJlcXVpcmUoJ2x0Z3QnKVxuICAsIHNldEltbWVkaWF0ZSAgICAgID0gZ2xvYmFsLnNldEltbWVkaWF0ZSB8fCBwcm9jZXNzLm5leHRUaWNrXG4gICwgY3JlYXRlUkJUID0gcmVxdWlyZSgnZnVuY3Rpb25hbC1yZWQtYmxhY2stdHJlZScpXG4gICwgZ2xvYmFsU3RvcmUgICAgICAgPSB7fVxuXG5mdW5jdGlvbiB0b0tleSAoa2V5KSB7XG4gIHJldHVybiB0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJyQnICsga2V5IDogSlNPTi5zdHJpbmdpZnkoa2V5KVxufVxuXG5mdW5jdGlvbiBndCh2YWx1ZSkge1xuICByZXR1cm4gbHRndC5jb21wYXJlKHZhbHVlLCB0aGlzLl9lbmQpID4gMFxufVxuXG5mdW5jdGlvbiBndGUodmFsdWUpIHtcbiAgcmV0dXJuIGx0Z3QuY29tcGFyZSh2YWx1ZSwgdGhpcy5fZW5kKSA+PSAwXG59XG5cbmZ1bmN0aW9uIGx0KHZhbHVlKSB7XG4gIHJldHVybiBsdGd0LmNvbXBhcmUodmFsdWUsIHRoaXMuX2VuZCkgPCAwXG59XG5cbmZ1bmN0aW9uIGx0ZSh2YWx1ZSkge1xuICByZXR1cm4gbHRndC5jb21wYXJlKHZhbHVlLCB0aGlzLl9lbmQpIDw9IDBcbn1cblxuXG5mdW5jdGlvbiBNZW1JdGVyYXRvciAoZGIsIG9wdGlvbnMpIHtcbiAgQWJzdHJhY3RJdGVyYXRvci5jYWxsKHRoaXMsIGRiKVxuICB0aGlzLl9saW1pdCAgID0gb3B0aW9ucy5saW1pdFxuXG4gIGlmICh0aGlzLl9saW1pdCA9PT0gLTEpXG4gICAgdGhpcy5fbGltaXQgPSBJbmZpbml0eVxuXG4gIHZhciB0cmVlID0gZGIuX3N0b3JlW2RiLl9sb2NhdGlvbl07XG5cbiAgdGhpcy5rZXlBc0J1ZmZlciA9IG9wdGlvbnMua2V5QXNCdWZmZXIgIT09IGZhbHNlXG4gIHRoaXMudmFsdWVBc0J1ZmZlciA9IG9wdGlvbnMudmFsdWVBc0J1ZmZlciAhPT0gZmFsc2VcbiAgdGhpcy5fcmV2ZXJzZSAgID0gb3B0aW9ucy5yZXZlcnNlXG4gIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zXG4gIHRoaXMuX2RvbmUgPSAwXG5cbiAgaWYgKCF0aGlzLl9yZXZlcnNlKSB7XG4gICAgdGhpcy5faW5jciA9ICduZXh0JztcbiAgICB0aGlzLl9zdGFydCA9IGx0Z3QubG93ZXJCb3VuZChvcHRpb25zKTtcbiAgICB0aGlzLl9lbmQgPSBsdGd0LnVwcGVyQm91bmQob3B0aW9ucylcblxuICAgIGlmICh0eXBlb2YgdGhpcy5fc3RhcnQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgdGhpcy5fdHJlZSA9IHRyZWUuYmVnaW47XG4gICAgZWxzZSBpZiAobHRndC5sb3dlckJvdW5kSW5jbHVzaXZlKG9wdGlvbnMpKVxuICAgICAgdGhpcy5fdHJlZSA9IHRyZWUuZ2UodGhpcy5fc3RhcnQpO1xuICAgIGVsc2VcbiAgICAgIHRoaXMuX3RyZWUgPSB0cmVlLmd0KHRoaXMuX3N0YXJ0KTtcblxuICAgIGlmICh0aGlzLl9lbmQpIHtcbiAgICAgIGlmIChsdGd0LnVwcGVyQm91bmRJbmNsdXNpdmUob3B0aW9ucykpXG4gICAgICAgIHRoaXMuX3Rlc3QgPSBsdGVcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5fdGVzdCA9IGx0XG4gICAgfVxuXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5faW5jciA9ICdwcmV2JztcbiAgICB0aGlzLl9zdGFydCA9IGx0Z3QudXBwZXJCb3VuZChvcHRpb25zKVxuICAgIHRoaXMuX2VuZCA9IGx0Z3QubG93ZXJCb3VuZChvcHRpb25zKVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9zdGFydCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICB0aGlzLl90cmVlID0gdHJlZS5lbmQ7XG4gICAgZWxzZSBpZiAobHRndC51cHBlckJvdW5kSW5jbHVzaXZlKG9wdGlvbnMpKVxuICAgICAgdGhpcy5fdHJlZSA9IHRyZWUubGUodGhpcy5fc3RhcnQpXG4gICAgZWxzZVxuICAgICAgdGhpcy5fdHJlZSA9IHRyZWUubHQodGhpcy5fc3RhcnQpXG5cbiAgICBpZiAodGhpcy5fZW5kKSB7XG4gICAgICBpZiAobHRndC5sb3dlckJvdW5kSW5jbHVzaXZlKG9wdGlvbnMpKVxuICAgICAgICB0aGlzLl90ZXN0ID0gZ3RlXG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMuX3Rlc3QgPSBndFxuICAgIH1cblxuICB9XG5cbn1cblxuaW5oZXJpdHMoTWVtSXRlcmF0b3IsIEFic3RyYWN0SXRlcmF0b3IpXG5cbk1lbUl0ZXJhdG9yLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB2YXIga2V5XG4gICAgLCB2YWx1ZVxuXG4gIGlmICh0aGlzLl9kb25lKysgPj0gdGhpcy5fbGltaXQpXG4gICAgcmV0dXJuIHNldEltbWVkaWF0ZShjYWxsYmFjaylcblxuICBpZiAoIXRoaXMuX3RyZWUudmFsaWQpXG4gICAgcmV0dXJuIHNldEltbWVkaWF0ZShjYWxsYmFjaylcblxuICBrZXkgPSB0aGlzLl90cmVlLmtleVxuICB2YWx1ZSA9IHRoaXMuX3RyZWUudmFsdWVcblxuICBpZiAoIXRoaXMuX3Rlc3Qoa2V5KSlcbiAgICByZXR1cm4gc2V0SW1tZWRpYXRlKGNhbGxiYWNrKVxuXG4gIGlmICh0aGlzLmtleUFzQnVmZmVyKVxuICAgIGtleSA9IG5ldyBCdWZmZXIoa2V5KVxuXG4gIGlmICh0aGlzLnZhbHVlQXNCdWZmZXIpXG4gICAgdmFsdWUgPSBuZXcgQnVmZmVyKHZhbHVlKVxuXG4gIHRoaXMuX3RyZWVbdGhpcy5faW5jcl0oKVxuXG4gIHNldEltbWVkaWF0ZShmdW5jdGlvbiBjYWxsTmV4dCgpIHtcbiAgICBjYWxsYmFjayhudWxsLCBrZXksIHZhbHVlKVxuICB9KVxufVxuXG5NZW1JdGVyYXRvci5wcm90b3R5cGUuX3Rlc3QgPSBmdW5jdGlvbiAoKSB7cmV0dXJuIHRydWV9XG5cbmZ1bmN0aW9uIE1lbURPV04gKGxvY2F0aW9uKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBNZW1ET1dOKSlcbiAgICByZXR1cm4gbmV3IE1lbURPV04obG9jYXRpb24pXG5cbiAgQWJzdHJhY3RMZXZlbERPV04uY2FsbCh0aGlzLCB0eXBlb2YgbG9jYXRpb24gPT0gJ3N0cmluZycgPyBsb2NhdGlvbiA6ICcnKVxuXG4gIHRoaXMuX2xvY2F0aW9uID0gdGhpcy5sb2NhdGlvbiA/IHRvS2V5KHRoaXMubG9jYXRpb24pIDogJ190cmVlJ1xuICB0aGlzLl9zdG9yZSA9IHRoaXMubG9jYXRpb24gPyBnbG9iYWxTdG9yZTogdGhpc1xuICB0aGlzLl9zdG9yZVt0aGlzLl9sb2NhdGlvbl0gPSB0aGlzLl9zdG9yZVt0aGlzLl9sb2NhdGlvbl0gfHwgY3JlYXRlUkJUKGx0Z3QuY29tcGFyZSlcbn1cblxuTWVtRE9XTi5jbGVhckdsb2JhbFN0b3JlID0gZnVuY3Rpb24gKHN0cmljdCkge1xuICBpZiAoc3RyaWN0KSB7XG4gICAgT2JqZWN0LmtleXMoZ2xvYmFsU3RvcmUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgZGVsZXRlIGdsb2JhbFN0b3JlW2tleV07XG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICBnbG9iYWxTdG9yZSA9IHt9XG4gIH1cbn1cblxuaW5oZXJpdHMoTWVtRE9XTiwgQWJzdHJhY3RMZXZlbERPV04pXG5cbk1lbURPV04ucHJvdG90eXBlLl9vcGVuID0gZnVuY3Rpb24gKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBzZXRJbW1lZGlhdGUoZnVuY3Rpb24gY2FsbE5leHQoKSB7IGNhbGxiYWNrKG51bGwsIHNlbGYpIH0pXG59XG5cbk1lbURPV04ucHJvdG90eXBlLl9wdXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdmFsdWUgPT09IG51bGwpIHZhbHVlID0gJydcblxuICB2YXIgaXRlciA9IHRoaXMuX3N0b3JlW3RoaXMuX2xvY2F0aW9uXS5maW5kKGtleSlcblxuICBpZiAoaXRlci52YWxpZCkge1xuICAgIHRoaXMuX3N0b3JlW3RoaXMuX2xvY2F0aW9uXSA9IGl0ZXIudXBkYXRlKHZhbHVlKVxuICB9IGVsc2Uge1xuICAgIHRoaXMuX3N0b3JlW3RoaXMuX2xvY2F0aW9uXSA9IHRoaXMuX3N0b3JlW3RoaXMuX2xvY2F0aW9uXS5pbnNlcnQoa2V5LCB2YWx1ZSlcbiAgfVxuXG4gIHNldEltbWVkaWF0ZShjYWxsYmFjaylcbn1cblxuTWVtRE9XTi5wcm90b3R5cGUuX2dldCA9IGZ1bmN0aW9uIChrZXksIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHZhciB2YWx1ZSA9IHRoaXMuX3N0b3JlW3RoaXMuX2xvY2F0aW9uXS5nZXQoa2V5KVxuXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gJ05vdEZvdW5kJyBlcnJvciwgY29uc2lzdGVudCB3aXRoIExldmVsRE9XTiBBUElcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdOb3RGb3VuZCcpXG4gICAgcmV0dXJuIHNldEltbWVkaWF0ZShmdW5jdGlvbiBjYWxsTmV4dCgpIHsgY2FsbGJhY2soZXJyKSB9KVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuYXNCdWZmZXIgIT09IGZhbHNlICYmICF0aGlzLl9pc0J1ZmZlcih2YWx1ZSkpXG4gICAgdmFsdWUgPSBuZXcgQnVmZmVyKFN0cmluZyh2YWx1ZSkpXG5cbiAgc2V0SW1tZWRpYXRlKGZ1bmN0aW9uIGNhbGxOZXh0ICgpIHtcbiAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSlcbiAgfSlcblxufVxuXG5NZW1ET1dOLnByb3RvdHlwZS5fZGVsID0gZnVuY3Rpb24gKGtleSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdGhpcy5fc3RvcmVbdGhpcy5fbG9jYXRpb25dID0gdGhpcy5fc3RvcmVbdGhpcy5fbG9jYXRpb25dLnJlbW92ZShrZXkpXG4gIHNldEltbWVkaWF0ZShjYWxsYmFjaylcbn1cblxuTWVtRE9XTi5wcm90b3R5cGUuX2JhdGNoID0gZnVuY3Rpb24gKGFycmF5LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICB2YXIgZXJyXG4gICAgLCBpID0gLTFcbiAgICAsIGtleVxuICAgICwgdmFsdWVcbiAgICAsIGl0ZXJcbiAgICAsIGxlbiA9IGFycmF5Lmxlbmd0aFxuICAgICwgdHJlZSA9IHRoaXMuX3N0b3JlW3RoaXMuX2xvY2F0aW9uXVxuXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBpZiAoIWFycmF5W2ldKVxuICAgICAgY29udGludWU7XG5cbiAgICBrZXkgPSB0aGlzLl9pc0J1ZmZlcihhcnJheVtpXS5rZXkpID8gYXJyYXlbaV0ua2V5IDogU3RyaW5nKGFycmF5W2ldLmtleSlcbiAgICBlcnIgPSB0aGlzLl9jaGVja0tleShrZXksICdrZXknKVxuICAgIGlmIChlcnIpXG4gICAgICByZXR1cm4gc2V0SW1tZWRpYXRlKGZ1bmN0aW9uIGVycm9yQ2FsbCgpIHsgY2FsbGJhY2soZXJyKSB9KVxuXG4gICAgaXRlciA9IHRyZWUuZmluZChrZXkpXG5cbiAgICBpZiAoYXJyYXlbaV0udHlwZSA9PT0gJ3B1dCcpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5faXNCdWZmZXIoYXJyYXlbaV0udmFsdWUpID8gYXJyYXlbaV0udmFsdWUgOiBTdHJpbmcoYXJyYXlbaV0udmFsdWUpXG4gICAgICBlcnIgPSB0aGlzLl9jaGVja0tleSh2YWx1ZSwgJ3ZhbHVlJylcblxuICAgICAgaWYgKGVycilcbiAgICAgICAgcmV0dXJuIHNldEltbWVkaWF0ZShmdW5jdGlvbiBlcnJvckNhbGwoKSB7IGNhbGxiYWNrKGVycikgfSlcblxuICAgICAgdHJlZSA9IGl0ZXIudmFsaWQgPyBpdGVyLnVwZGF0ZSh2YWx1ZSkgOiB0cmVlLmluc2VydChrZXksIHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICB0cmVlID0gaXRlci5yZW1vdmUoKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuX3N0b3JlW3RoaXMuX2xvY2F0aW9uXSA9IHRyZWU7XG5cbiAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKVxufVxuXG5NZW1ET1dOLnByb3RvdHlwZS5faXRlcmF0b3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICByZXR1cm4gbmV3IE1lbUl0ZXJhdG9yKHRoaXMsIG9wdGlvbnMpXG59XG5cbk1lbURPV04ucHJvdG90eXBlLl9pc0J1ZmZlciA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopXG59XG5cbk1lbURPV04uZGVzdHJveSA9IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaykge1xuICB2YXIga2V5ID0gdG9LZXkobmFtZSlcblxuICBpZiAoa2V5IGluIGdsb2JhbFN0b3JlKVxuICAgIGRlbGV0ZSBnbG9iYWxTdG9yZVtrZXldXG5cbiAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1lbURPV05cbiIsIlxuZXhwb3J0cy5jb21wYXJlID0gZnVuY3Rpb24gKGEsIGIpIHtcblxuICBpZihCdWZmZXIuaXNCdWZmZXIoYSkpIHtcbiAgICB2YXIgbCA9IE1hdGgubWluKGEubGVuZ3RoLCBiLmxlbmd0aClcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY21wID0gYVtpXSAtIGJbaV1cbiAgICAgIGlmKGNtcCkgcmV0dXJuIGNtcFxuICAgIH1cbiAgICByZXR1cm4gYS5sZW5ndGggLSBiLmxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwXG59XG5cbmZ1bmN0aW9uIGhhcyhvYmosIGtleSkge1xuICByZXR1cm4gT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpXG59XG5cbi8vIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCBhYnN0cmFjdC1sZXZlbGRvd24gdGVzdHNcbi8vIG51bGxpc2ggb3IgZW1wdHkgc3RyaW5ncy5cbi8vIEkgY291bGQgdXNlICEhdmFsIGJ1dCBJIHdhbnQgdG8gcGVybWl0IG51bWJlcnMgYW5kIGJvb2xlYW5zLFxuLy8gaWYgcG9zc2libGUuXG5cbmZ1bmN0aW9uIGlzRGVmICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPSBudWxsICYmIHZhbCAhPT0gJydcbn1cblxudmFyIGxvd2VyQm91bmQgPSBleHBvcnRzLmxvd2VyQm91bmQgPSBmdW5jdGlvbiAocmFuZ2UpIHtcbiAgcmV0dXJuIChcbiAgICAgIGlzRGVmKHJhbmdlLmd0KSAgICAgICAgICAgICAgICAgICAgICA/IHJhbmdlLmd0XG4gICAgOiBpc0RlZihyYW5nZS5ndGUpICAgICAgICAgICAgICAgICAgICAgPyByYW5nZS5ndGVcbiAgICA6IGlzRGVmKHJhbmdlLm1pbikgICAgICAgICAgICAgICAgICAgICA/IHJhbmdlLm1pblxuICAgIDogaXNEZWYocmFuZ2Uuc3RhcnQpICYmICFyYW5nZS5yZXZlcnNlID8gcmFuZ2Uuc3RhcnRcbiAgICA6IGlzRGVmKHJhbmdlLmVuZCkgJiYgcmFuZ2UucmV2ZXJzZSAgICA/IHJhbmdlLmVuZFxuICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gIClcbn1cblxuZXhwb3J0cy5sb3dlckJvdW5kSW5jbHVzaXZlID0gZnVuY3Rpb24gKHJhbmdlKSB7XG4gIHJldHVybiBpc0RlZihyYW5nZS5ndCkgPyBmYWxzZSA6IHRydWVcbn1cblxuZXhwb3J0cy51cHBlckJvdW5kSW5jbHVzaXZlID1cbiAgZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgcmV0dXJuIGlzRGVmKHJhbmdlLmx0KSA/IGZhbHNlIDogdHJ1ZVxuICB9XG5cbnZhciBsb3dlckJvdW5kRXhjbHVzaXZlID0gZXhwb3J0cy5sb3dlckJvdW5kRXhjbHVzaXZlID1cbiAgZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgcmV0dXJuIGlzRGVmKHJhbmdlLmd0KSA/IHRydWUgOiBmYWxzZVxuICB9XG5cbnZhciB1cHBlckJvdW5kRXhjbHVzaXZlID0gZXhwb3J0cy51cHBlckJvdW5kRXhjbHVzaXZlID1cbiAgZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgcmV0dXJuIGlzRGVmKHJhbmdlLmx0KSA/IHRydWUgOiBmYWxzZVxuICB9XG5cbnZhciB1cHBlckJvdW5kID0gZXhwb3J0cy51cHBlckJvdW5kID0gZnVuY3Rpb24gKHJhbmdlKSB7XG4gIHJldHVybiAoXG4gICAgICBpc0RlZihyYW5nZS5sdCkgICAgICAgICAgICAgICAgICAgICA/IHJhbmdlLmx0XG4gICAgOiBpc0RlZihyYW5nZS5sdGUpICAgICAgICAgICAgICAgICAgICA/IHJhbmdlLmx0ZVxuICAgIDogaXNEZWYocmFuZ2UubWF4KSAgICAgICAgICAgICAgICAgICAgPyByYW5nZS5tYXhcbiAgICA6IGlzRGVmKHJhbmdlLnN0YXJ0KSAmJiByYW5nZS5yZXZlcnNlID8gcmFuZ2Uuc3RhcnRcbiAgICA6IGlzRGVmKHJhbmdlLmVuZCkgJiYgIXJhbmdlLnJldmVyc2UgID8gcmFuZ2UuZW5kXG4gICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZFxuICApXG59XG5cblxuZXhwb3J0cy5jb250YWlucyA9IGZ1bmN0aW9uIChyYW5nZSwga2V5LCBjb21wYXJlKSB7XG4gIGNvbXBhcmUgPSBjb21wYXJlIHx8IGV4cG9ydHMuY29tcGFyZVxuXG4gIHZhciBsYiA9IGxvd2VyQm91bmQocmFuZ2UpXG4gIGlmKGlzRGVmKGxiKSkge1xuICAgIHZhciBjbXAgPSBjb21wYXJlKGtleSwgbGIpXG4gICAgaWYoY21wIDwgMCB8fCAoY21wID09PSAwICYmIGxvd2VyQm91bmRFeGNsdXNpdmUocmFuZ2UpKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIHViID0gdXBwZXJCb3VuZChyYW5nZSlcbiAgaWYoaXNEZWYodWIpKSB7XG4gICAgdmFyIGNtcCA9IGNvbXBhcmUoa2V5LCB1YilcbiAgICBpZihjbXAgPiAwIHx8IChjbXAgPT09IDApICYmIHVwcGVyQm91bmRFeGNsdXNpdmUocmFuZ2UpKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnRzLmZpbHRlciA9IGZ1bmN0aW9uIChyYW5nZSwgY29tcGFyZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBleHBvcnRzLmNvbnRhaW5zKHJhbmdlLCBrZXksIGNvbXBhcmUpXG4gIH1cbn1cbiIsIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7U3RyaW5nfE51bWJlcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWwsIG9wdGlvbnMpe1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKCdzdHJpbmcnID09IHR5cGVvZiB2YWwpIHJldHVybiBwYXJzZSh2YWwpO1xuICByZXR1cm4gb3B0aW9ucy5sb25nXG4gICAgPyBsb25nKHZhbClcbiAgICA6IHNob3J0KHZhbCk7XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCBhbmQgcmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgc3RyID0gJycgKyBzdHI7XG4gIGlmIChzdHIubGVuZ3RoID4gMTAwMDApIHJldHVybjtcbiAgdmFyIG1hdGNoID0gL14oKD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhzdHIpO1xuICBpZiAoIW1hdGNoKSByZXR1cm47XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNob3J0KG1zKSB7XG4gIGlmIChtcyA+PSBkKSByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICBpZiAobXMgPj0gaCkgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgaWYgKG1zID49IG0pIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIGlmIChtcyA+PSBzKSByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9uZyhtcykge1xuICByZXR1cm4gcGx1cmFsKG1zLCBkLCAnZGF5JylcbiAgICB8fCBwbHVyYWwobXMsIGgsICdob3VyJylcbiAgICB8fCBwbHVyYWwobXMsIG0sICdtaW51dGUnKVxuICAgIHx8IHBsdXJhbChtcywgcywgJ3NlY29uZCcpXG4gICAgfHwgbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG4sIG5hbWUpIHtcbiAgaWYgKG1zIDwgbikgcmV0dXJuO1xuICBpZiAobXMgPCBuICogMS41KSByZXR1cm4gTWF0aC5mbG9vcihtcyAvIG4pICsgJyAnICsgbmFtZTtcbiAgcmV0dXJuIE1hdGguY2VpbChtcyAvIG4pICsgJyAnICsgbmFtZSArICdzJztcbn1cbiIsInZhciBtdXRleGlmeSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcXVldWUgPSBbXVxuICB2YXIgdXNlZCA9IG51bGxcblxuICB2YXIgY2FsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB1c2VkKHJlbGVhc2UpXG4gIH1cblxuICB2YXIgYWNxdWlyZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIGlmICh1c2VkKSByZXR1cm4gcXVldWUucHVzaChmbilcbiAgICB1c2VkID0gZm5cbiAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGwpXG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIHZhciByZWxlYXNlID0gZnVuY3Rpb24gKGZuLCBlcnIsIHZhbHVlKSB7XG4gICAgdXNlZCA9IG51bGxcbiAgICBpZiAocXVldWUubGVuZ3RoKSBhY3F1aXJlKHF1ZXVlLnNoaWZ0KCkpXG4gICAgaWYgKGZuKSBmbihlcnIsIHZhbHVlKVxuICB9XG5cbiAgcmV0dXJuIGFjcXVpcmVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtdXRleGlmeSIsInZhciByZXEgPSByZXF1aXJlKCdyZXF1ZXN0JylcblxubW9kdWxlLmV4cG9ydHMgPSBOZXRzXG5cbmZ1bmN0aW9uIE5ldHMgKG9wdHMsIGNiKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIG9wdHMgPSB7IHVyaTogb3B0cyB9XG5cbiAgLy8gaW4gbm9kZSwgaWYgZW5jb2RpbmcgPT09IG51bGwgdGhlbiByZXNwb25zZSB3aWxsIGJlIGEgQnVmZmVyLiB3ZSB3YW50IHRoaXMgdG8gYmUgdGhlIGRlZmF1bHRcbiAgaWYgKCFvcHRzLmhhc093blByb3BlcnR5KCdlbmNvZGluZycpKSBvcHRzLmVuY29kaW5nID0gbnVsbFxuXG4gIC8vIGluIGJyb3dzZXIsIHdlIHNob3VsZCBieSBkZWZhdWx0IGNvbnZlcnQgdGhlIGFycmF5YnVmZmVyIGludG8gYSBCdWZmZXJcbiAgaWYgKHByb2Nlc3MuYnJvd3NlciAmJiAhb3B0cy5oYXNPd25Qcm9wZXJ0eSgnanNvbicpICYmIG9wdHMuZW5jb2RpbmcgPT09IG51bGwpIHtcbiAgICBvcHRzLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcidcbiAgICB2YXIgb3JpZ2luYWxDYiA9IGNiXG4gICAgY2IgPSBidWZmZXJpZnlcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1ZmZlcmlmeSAoZXJyLCByZXNwLCBib2R5KSB7XG4gICAgaWYgKGJvZHkpIGJvZHkgPSBuZXcgQnVmZmVyKG5ldyBVaW50OEFycmF5KGJvZHkpKVxuICAgIG9yaWdpbmFsQ2IoZXJyLCByZXNwLCBib2R5KVxuICB9XG5cbiAgcmV0dXJuIHJlcShvcHRzLCBjYilcbn1cbiIsInZhciB3cmFwcHkgPSByZXF1aXJlKCd3cmFwcHknKVxubW9kdWxlLmV4cG9ydHMgPSB3cmFwcHkob25jZSlcblxub25jZS5wcm90byA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCAnb25jZScsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG9uY2UodGhpcylcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxufSlcblxuZnVuY3Rpb24gb25jZSAoZm4pIHtcbiAgdmFyIGYgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGYuY2FsbGVkKSByZXR1cm4gZi52YWx1ZVxuICAgIGYuY2FsbGVkID0gdHJ1ZVxuICAgIHJldHVybiBmLnZhbHVlID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9XG4gIGYuY2FsbGVkID0gZmFsc2VcbiAgcmV0dXJuIGZcbn1cbiIsInZhciB0cmltID0gcmVxdWlyZSgndHJpbScpXG4gICwgZm9yRWFjaCA9IHJlcXVpcmUoJ2Zvci1lYWNoJylcbiAgLCBpc0FycmF5ID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoZWFkZXJzKSB7XG4gIGlmICghaGVhZGVycylcbiAgICByZXR1cm4ge31cblxuICB2YXIgcmVzdWx0ID0ge31cblxuICBmb3JFYWNoKFxuICAgICAgdHJpbShoZWFkZXJzKS5zcGxpdCgnXFxuJylcbiAgICAsIGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gcm93LmluZGV4T2YoJzonKVxuICAgICAgICAgICwga2V5ID0gdHJpbShyb3cuc2xpY2UoMCwgaW5kZXgpKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgLCB2YWx1ZSA9IHRyaW0ocm93LnNsaWNlKGluZGV4ICsgMSkpXG5cbiAgICAgICAgaWYgKHR5cGVvZihyZXN1bHRba2V5XSkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkocmVzdWx0W2tleV0pKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IFsgcmVzdWx0W2tleV0sIHZhbHVlIF1cbiAgICAgICAgfVxuICAgICAgfVxuICApXG5cbiAgcmV0dXJuIHJlc3VsdFxufSIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS42LjNcbihmdW5jdGlvbigpIHtcbiAgdmFyIGdldE5hbm9TZWNvbmRzLCBocnRpbWUsIGxvYWRUaW1lO1xuXG4gIGlmICgodHlwZW9mIHBlcmZvcm1hbmNlICE9PSBcInVuZGVmaW5lZFwiICYmIHBlcmZvcm1hbmNlICE9PSBudWxsKSAmJiBwZXJmb3JtYW5jZS5ub3cpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIH07XG4gIH0gZWxzZSBpZiAoKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MgIT09IG51bGwpICYmIHByb2Nlc3MuaHJ0aW1lKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAoZ2V0TmFub1NlY29uZHMoKSAtIGxvYWRUaW1lKSAvIDFlNjtcbiAgICB9O1xuICAgIGhydGltZSA9IHByb2Nlc3MuaHJ0aW1lO1xuICAgIGdldE5hbm9TZWNvbmRzID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaHI7XG4gICAgICBociA9IGhydGltZSgpO1xuICAgICAgcmV0dXJuIGhyWzBdICogMWU5ICsgaHJbMV07XG4gICAgfTtcbiAgICBsb2FkVGltZSA9IGdldE5hbm9TZWNvbmRzKCk7XG4gIH0gZWxzZSBpZiAoRGF0ZS5ub3cpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBsb2FkVGltZTtcbiAgICB9O1xuICAgIGxvYWRUaW1lID0gRGF0ZS5ub3coKTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gbG9hZFRpbWU7XG4gICAgfTtcbiAgICBsb2FkVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICB9XG5cbn0pLmNhbGwodGhpcyk7XG5cbi8qXG4vL0Agc291cmNlTWFwcGluZ1VSTD1wZXJmb3JtYW5jZS1ub3cubWFwXG4qL1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAoIXByb2Nlc3MudmVyc2lvbiB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MC4nKSA9PT0gMCB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MS4nKSA9PT0gMCAmJiBwcm9jZXNzLnZlcnNpb24uaW5kZXhPZigndjEuOC4nKSAhPT0gMCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IG5leHRUaWNrO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBwcm9jZXNzLm5leHRUaWNrO1xufVxuXG5mdW5jdGlvbiBuZXh0VGljayhmbikge1xuICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gIHZhciBpID0gMDtcbiAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCkge1xuICAgIGFyZ3NbaSsrXSA9IGFyZ3VtZW50c1tpXTtcbiAgfVxuICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGljaygpIHtcbiAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgfSk7XG59XG4iLCJ2YXIgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbnZhciBzdHJpbmdpZnkgPSByZXF1aXJlKCcuL3N0cmluZ2lmeScpXG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2Vcbm1vZHVsZS5leHBvcnRzLnBhcnNlID0gcGFyc2Vcbm1vZHVsZS5leHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeVxuIiwidmFyIHRva2VuaXplID0gcmVxdWlyZSgnLi90b2tlbml6ZScpXG52YXIgTUFYX1JBTkdFID0gMHgxRkZGRkZGRlxuXG52YXIgb25maWVsZG9wdGlvbnMgPSBmdW5jdGlvbiAodG9rZW5zKSB7XG4gIHZhciBvcHRzID0ge31cblxuICB3aGlsZSAodG9rZW5zLmxlbmd0aCkge1xuICAgIHN3aXRjaCAodG9rZW5zWzBdKSB7XG4gICAgICBjYXNlICdbJzpcbiAgICAgIGNhc2UgJywnOlxuICAgICAgICB0b2tlbnMuc2hpZnQoKVxuICAgICAgICB2YXIgbmFtZSA9IHRva2Vucy5zaGlmdCgpXG4gICAgICAgIGlmIChuYW1lID09PSAnKCcpIHsgICAgICAgLy8gaGFuZGxpbmcgWyhBKSA9IEJdXG4gICAgICAgICAgbmFtZSA9IHRva2Vucy5zaGlmdCgpXG4gICAgICAgICAgdG9rZW5zLnNoaWZ0KCkgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBlbmQgb2YgYnJhY2tldFxuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbnNbMF0gIT09ICc9JykgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHRva2VuIGluIGZpZWxkIG9wdGlvbnM6ICcgKyB0b2tlbnNbMF0pXG4gICAgICAgIHRva2Vucy5zaGlmdCgpXG4gICAgICAgIGlmICh0b2tlbnNbMF0gPT09ICddJykgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIF0gaW4gZmllbGQgb3B0aW9uJylcbiAgICAgICAgb3B0c1tuYW1lXSA9IHRva2Vucy5zaGlmdCgpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICddJzpcbiAgICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICAgICAgcmV0dXJuIG9wdHNcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHRva2VuIGluIGZpZWxkIG9wdGlvbnM6ICcgKyB0b2tlbnNbMF0pXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBjbG9zaW5nIHRhZyBmb3IgZmllbGQgb3B0aW9ucycpXG59XG5cbnZhciBvbmZpZWxkID0gZnVuY3Rpb24gKHRva2Vucykge1xuICB2YXIgZmllbGQgPSB7XG4gICAgbmFtZTogbnVsbCxcbiAgICB0eXBlOiBudWxsLFxuICAgIHRhZzogMCxcbiAgICBtYXA6IG51bGwsXG4gICAgb25lb2Y6IG51bGwsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHJlcGVhdGVkOiBmYWxzZSxcbiAgICBvcHRpb25zOiB7fVxuICB9XG5cbiAgd2hpbGUgKHRva2Vucy5sZW5ndGgpIHtcbiAgICBzd2l0Y2ggKHRva2Vuc1swXSkge1xuICAgICAgY2FzZSAnPSc6XG4gICAgICAgIHRva2Vucy5zaGlmdCgpXG4gICAgICAgIGZpZWxkLnRhZyA9IE51bWJlcih0b2tlbnMuc2hpZnQoKSlcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnbWFwJzpcbiAgICAgICAgZmllbGQudHlwZSA9ICdtYXAnXG4gICAgICAgIGZpZWxkLm1hcCA9IHtmcm9tOiBudWxsLCB0bzogbnVsbH1cbiAgICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICAgICAgaWYgKHRva2Vuc1swXSAhPT0gJzwnKSB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgdG9rZW4gaW4gbWFwIHR5cGU6ICcgKyB0b2tlbnNbMF0pXG4gICAgICAgIHRva2Vucy5zaGlmdCgpXG4gICAgICAgIGZpZWxkLm1hcC5mcm9tID0gdG9rZW5zLnNoaWZ0KClcbiAgICAgICAgaWYgKHRva2Vuc1swXSAhPT0gJywnKSB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgdG9rZW4gaW4gbWFwIHR5cGU6ICcgKyB0b2tlbnNbMF0pXG4gICAgICAgIHRva2Vucy5zaGlmdCgpXG4gICAgICAgIGZpZWxkLm1hcC50byA9IHRva2Vucy5zaGlmdCgpXG4gICAgICAgIGlmICh0b2tlbnNbMF0gIT09ICc+JykgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHRva2VuIGluIG1hcCB0eXBlOiAnICsgdG9rZW5zWzBdKVxuICAgICAgICB0b2tlbnMuc2hpZnQoKVxuICAgICAgICBmaWVsZC5uYW1lID0gdG9rZW5zLnNoaWZ0KClcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAncmVwZWF0ZWQnOlxuICAgICAgY2FzZSAncmVxdWlyZWQnOlxuICAgICAgY2FzZSAnb3B0aW9uYWwnOlxuICAgICAgICB2YXIgdCA9IHRva2Vucy5zaGlmdCgpXG4gICAgICAgIGZpZWxkLnJlcXVpcmVkID0gdCA9PT0gJ3JlcXVpcmVkJ1xuICAgICAgICBmaWVsZC5yZXBlYXRlZCA9IHQgPT09ICdyZXBlYXRlZCdcbiAgICAgICAgZmllbGQudHlwZSA9IHRva2Vucy5zaGlmdCgpXG4gICAgICAgIGZpZWxkLm5hbWUgPSB0b2tlbnMuc2hpZnQoKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdbJzpcbiAgICAgICAgZmllbGQub3B0aW9ucyA9IG9uZmllbGRvcHRpb25zKHRva2VucylcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnOyc6XG4gICAgICAgIHRva2Vucy5zaGlmdCgpXG4gICAgICAgIHJldHVybiBmaWVsZFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgdG9rZW4gaW4gbWVzc2FnZSBmaWVsZDogJyArIHRva2Vuc1swXSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIDsgZm91bmQgZm9yIG1lc3NhZ2UgZmllbGQnKVxufVxuXG52YXIgb25tZXNzYWdlYm9keSA9IGZ1bmN0aW9uICh0b2tlbnMpIHtcbiAgdmFyIGJvZHkgPSB7XG4gICAgZW51bXM6IFtdLFxuICAgIG1lc3NhZ2VzOiBbXSxcbiAgICBmaWVsZHM6IFtdLFxuICAgIGV4dGVuc2lvbnM6IG51bGxcbiAgfVxuXG4gIHdoaWxlICh0b2tlbnMubGVuZ3RoKSB7XG4gICAgc3dpdGNoICh0b2tlbnNbMF0pIHtcbiAgICAgIGNhc2UgJ21hcCc6XG4gICAgICBjYXNlICdyZXBlYXRlZCc6XG4gICAgICBjYXNlICdvcHRpb25hbCc6XG4gICAgICBjYXNlICdyZXF1aXJlZCc6XG4gICAgICAgIGJvZHkuZmllbGRzLnB1c2gob25maWVsZCh0b2tlbnMpKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgYm9keS5lbnVtcy5wdXNoKG9uZW51bSh0b2tlbnMpKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdtZXNzYWdlJzpcbiAgICAgICAgYm9keS5tZXNzYWdlcy5wdXNoKG9ubWVzc2FnZSh0b2tlbnMpKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdleHRlbnNpb25zJzpcbiAgICAgICAgYm9keS5leHRlbnNpb25zID0gb25leHRlbnNpb25zKHRva2VucylcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnb25lb2YnOlxuICAgICAgICB0b2tlbnMuc2hpZnQoKVxuICAgICAgICB2YXIgbmFtZSA9IHRva2Vucy5zaGlmdCgpXG4gICAgICAgIGlmICh0b2tlbnNbMF0gIT09ICd7JykgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHRva2VuIGluIG9uZW9mOiAnICsgdG9rZW5zWzBdKVxuICAgICAgICB0b2tlbnMuc2hpZnQoKVxuICAgICAgICB3aGlsZSAodG9rZW5zWzBdICE9PSAnfScpIHtcbiAgICAgICAgICB0b2tlbnMudW5zaGlmdCgnb3B0aW9uYWwnKVxuICAgICAgICAgIHZhciBmaWVsZCA9IG9uZmllbGQodG9rZW5zKVxuICAgICAgICAgIGZpZWxkLm9uZW9mID0gbmFtZVxuICAgICAgICAgIGJvZHkuZmllbGRzLnB1c2goZmllbGQpXG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnOyc6XG4gICAgICAgIHRva2Vucy5zaGlmdCgpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIHByb3RvMyBkb2VzIG5vdCByZXF1aXJlIHRoZSB1c2Ugb2Ygb3B0aW9uYWwvcmVxdWlyZWQsIGFzc3VtZWQgYXMgb3B0aW9uYWxcbiAgICAgICAgLy8gXCJzaW5ndWxhcjogYSB3ZWxsLWZvcm1lZCBtZXNzYWdlIGNhbiBoYXZlIHplcm8gb3Igb25lIG9mIHRoaXMgZmllbGQgKGJ1dCBub3QgbW9yZSB0aGFuIG9uZSkuXCJcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNzcGVjaWZ5aW5nLWZpZWxkLXJ1bGVzXG4gICAgICAgIHRva2Vucy51bnNoaWZ0KCdvcHRpb25hbCcpXG4gICAgICAgIGJvZHkuZmllbGRzLnB1c2gob25maWVsZCh0b2tlbnMpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBib2R5XG59XG5cbnZhciBvbmV4dGVuZCA9IGZ1bmN0aW9uICh0b2tlbnMpIHtcbiAgdmFyIG91dCA9IHtcbiAgICBuYW1lOiB0b2tlbnNbMV0sXG4gICAgbWVzc2FnZTogb25tZXNzYWdlKHRva2VucylcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbnZhciBvbmV4dGVuc2lvbnMgPSBmdW5jdGlvbiAodG9rZW5zKSB7XG4gIHRva2Vucy5zaGlmdCgpXG4gIHZhciBmcm9tID0gTnVtYmVyKHRva2Vucy5zaGlmdCgpKVxuICBpZiAoaXNOYU4oZnJvbSkpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIGluIGV4dGVuc2lvbnMgZGVmaW5pdGlvbicpXG4gIGlmICh0b2tlbnMuc2hpZnQoKSAhPT0gJ3RvJykgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQga2V5d29yZCAndG8nIGluIGV4dGVuc2lvbnMgZGVmaW5pdGlvblwiKVxuICB2YXIgdG8gPSB0b2tlbnMuc2hpZnQoKVxuICBpZiAodG8gPT09ICdtYXgnKSB0byA9IE1BWF9SQU5HRVxuICB0byA9IE51bWJlcih0bylcbiAgaWYgKGlzTmFOKHRvKSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRvIGluIGV4dGVuc2lvbnMgZGVmaW5pdGlvbicpXG4gIGlmICh0b2tlbnMuc2hpZnQoKSAhPT0gJzsnKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgOyBpbiBleHRlbnNpb25zIGRlZmluaXRpb24nKVxuICByZXR1cm4ge2Zyb206IGZyb20sIHRvOiB0b31cbn1cbnZhciBvbm1lc3NhZ2UgPSBmdW5jdGlvbiAodG9rZW5zKSB7XG4gIHRva2Vucy5zaGlmdCgpXG5cbiAgdmFyIGx2bCA9IDFcbiAgdmFyIGJvZHkgPSBbXVxuICB2YXIgbXNnID0ge1xuICAgIG5hbWU6IHRva2Vucy5zaGlmdCgpLFxuICAgIGVudW1zOiBbXSxcbiAgICBtZXNzYWdlczogW10sXG4gICAgZmllbGRzOiBbXVxuICB9XG5cbiAgaWYgKHRva2Vuc1swXSAhPT0gJ3snKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHsgYnV0IGZvdW5kICcgKyB0b2tlbnNbMF0pXG4gIHRva2Vucy5zaGlmdCgpXG5cbiAgd2hpbGUgKHRva2Vucy5sZW5ndGgpIHtcbiAgICBpZiAodG9rZW5zWzBdID09PSAneycpIGx2bCsrXG4gICAgZWxzZSBpZiAodG9rZW5zWzBdID09PSAnfScpIGx2bC0tXG5cbiAgICBpZiAoIWx2bCkge1xuICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICAgIGJvZHkgPSBvbm1lc3NhZ2Vib2R5KGJvZHkpXG4gICAgICBtc2cuZW51bXMgPSBib2R5LmVudW1zXG4gICAgICBtc2cubWVzc2FnZXMgPSBib2R5Lm1lc3NhZ2VzXG4gICAgICBtc2cuZmllbGRzID0gYm9keS5maWVsZHNcbiAgICAgIG1zZy5leHRlbnNpb25zID0gYm9keS5leHRlbnNpb25zXG4gICAgICByZXR1cm4gbXNnXG4gICAgfVxuXG4gICAgYm9keS5wdXNoKHRva2Vucy5zaGlmdCgpKVxuICB9XG5cbiAgaWYgKGx2bCkgdGhyb3cgbmV3IEVycm9yKCdObyBjbG9zaW5nIHRhZyBmb3IgbWVzc2FnZScpXG59XG5cbnZhciBvbnBhY2thZ2VuYW1lID0gZnVuY3Rpb24gKHRva2Vucykge1xuICB0b2tlbnMuc2hpZnQoKVxuICB2YXIgbmFtZSA9IHRva2Vucy5zaGlmdCgpXG4gIGlmICh0b2tlbnNbMF0gIT09ICc7JykgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCA7IGJ1dCBmb3VuZCAnICsgdG9rZW5zWzBdKVxuICB0b2tlbnMuc2hpZnQoKVxuICByZXR1cm4gbmFtZVxufVxuXG52YXIgb25zeW50YXh2ZXJzaW9uID0gZnVuY3Rpb24gKHRva2Vucykge1xuICB0b2tlbnMuc2hpZnQoKVxuXG4gIGlmICh0b2tlbnNbMF0gIT09ICc9JykgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCA9IGJ1dCBmb3VuZCAnICsgdG9rZW5zWzBdKVxuICB0b2tlbnMuc2hpZnQoKVxuXG4gIHZhciB2ZXJzaW9uID0gdG9rZW5zLnNoaWZ0KClcbiAgc3dpdGNoICh2ZXJzaW9uKSB7XG4gICAgY2FzZSAnXCJwcm90bzJcIic6XG4gICAgICB2ZXJzaW9uID0gMlxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgJ1wicHJvdG8zXCInOlxuICAgICAgdmVyc2lvbiA9IDNcbiAgICAgIGJyZWFrXG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBwcm90b2J1ZiBzeW50YXggdmVyc2lvbiBidXQgZm91bmQgJyArIHZlcnNpb24pXG4gIH1cblxuICBpZiAodG9rZW5zWzBdICE9PSAnOycpIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgOyBidXQgZm91bmQgJyArIHRva2Vuc1swXSlcbiAgdG9rZW5zLnNoaWZ0KClcblxuICByZXR1cm4gdmVyc2lvblxufVxuXG52YXIgb25lbnVtdmFsdWUgPSBmdW5jdGlvbiAodG9rZW5zKSB7XG4gIGlmICh0b2tlbnMubGVuZ3RoIDwgNCkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVudW0gdmFsdWU6ICcgKyB0b2tlbnMuc2xpY2UoMCwgMykuam9pbignICcpKVxuICBpZiAodG9rZW5zWzFdICE9PSAnPScpIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgPSBidXQgZm91bmQgJyArIHRva2Vuc1sxXSlcbiAgaWYgKHRva2Vuc1szXSAhPT0gJzsnKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIDsgYnV0IGZvdW5kICcgKyB0b2tlbnNbMV0pXG5cbiAgdmFyIG5hbWUgPSB0b2tlbnMuc2hpZnQoKVxuICB0b2tlbnMuc2hpZnQoKVxuXG4gIHZhciB2YWx1ZSA9IE51bWJlcih0b2tlbnMuc2hpZnQoKSlcbiAgdG9rZW5zLnNoaWZ0KClcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH1cbn1cblxudmFyIG9uZW51bSA9IGZ1bmN0aW9uICh0b2tlbnMpIHtcbiAgdG9rZW5zLnNoaWZ0KClcblxuICB2YXIgZSA9IHtcbiAgICBuYW1lOiB0b2tlbnMuc2hpZnQoKSxcbiAgICB2YWx1ZXM6IHt9XG4gIH1cblxuICBpZiAodG9rZW5zWzBdICE9PSAneycpIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgeyBidXQgZm91bmQgJyArIHRva2Vuc1swXSlcbiAgdG9rZW5zLnNoaWZ0KClcblxuICB3aGlsZSAodG9rZW5zLmxlbmd0aCkge1xuICAgIGlmICh0b2tlbnNbMF0gPT09ICd9Jykge1xuICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICAgIC8vIHRoZXJlIGdvZXMgb3B0aW9uYWwgc2VtaWNvbG9uIGFmdGVyIHRoZSBlbmNsb3NpbmcgXCJ9XCJcbiAgICAgIGlmICh0b2tlbnNbMF0gPT09ICc7JykgdG9rZW5zLnNoaWZ0KClcbiAgICAgIHJldHVybiBlXG4gICAgfVxuICAgIGlmICh0b2tlbnNbMF0gPT09ICdvcHRpb24nKSB7XG4gICAgICAvLyBqdXN0IHNraXAgXCJvcHRpb24gYWxsb3dfYWxpYXMgPSB0cnVlO1wiXG4gICAgICB3aGlsZSAodG9rZW5zLnNoaWZ0KCkgIT09ICc7Jykge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICB9XG4gICAgfVxuICAgIHZhciB2YWwgPSBvbmVudW12YWx1ZSh0b2tlbnMpXG4gICAgZS52YWx1ZXNbdmFsLm5hbWVdID0gdmFsLnZhbHVlXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNsb3NpbmcgdGFnIGZvciBlbnVtJylcbn1cblxudmFyIG9ub3B0aW9uID0gZnVuY3Rpb24gKHRva2Vucykge1xuICB2YXIgbmFtZSA9IG51bGxcbiAgdmFyIHZhbHVlID0gbnVsbFxuXG4gIHZhciBwYXJzZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSByZXR1cm4gdHJ1ZVxuICAgIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykgcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL15cIit8XCIrJC9nbSwgJycpXG4gIH1cblxuICB3aGlsZSAodG9rZW5zLmxlbmd0aCkge1xuICAgIGlmICh0b2tlbnNbMF0gPT09ICc7Jykge1xuICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICAgIHJldHVybiB7bmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlfVxuICAgIH1cbiAgICBzd2l0Y2ggKHRva2Vuc1swXSkge1xuICAgICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgICAgdG9rZW5zLnNoaWZ0KClcblxuICAgICAgICB2YXIgaGFzQnJhY2tldCA9IHRva2Vuc1swXSA9PT0gJygnXG4gICAgICAgIGlmIChoYXNCcmFja2V0KSB0b2tlbnMuc2hpZnQoKVxuXG4gICAgICAgIG5hbWUgPSB0b2tlbnMuc2hpZnQoKVxuXG4gICAgICAgIGlmIChoYXNCcmFja2V0KSB7XG4gICAgICAgICAgaWYgKHRva2Vuc1swXSAhPT0gJyknKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkICkgYnV0IGZvdW5kICcgKyB0b2tlbnNbMF0pXG4gICAgICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICc9JzpcbiAgICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICAgICAgaWYgKG5hbWUgPT09IG51bGwpIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQga2V5IGZvciBvcHRpb24gd2l0aCB2YWx1ZTogJyArIHRva2Vuc1swXSlcbiAgICAgICAgdmFsdWUgPSBwYXJzZSh0b2tlbnMuc2hpZnQoKSlcblxuICAgICAgICBpZiAobmFtZSA9PT0gJ29wdGltaXplX2ZvcicgJiYgIS9eKFNQRUVEfENPREVfU0laRXxMSVRFX1JVTlRJTUUpJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgdmFsdWUgZm9yIG9wdGlvbiBvcHRpbWl6ZV9mb3I6ICcgKyB2YWx1ZSlcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3snKSB7XG4gICAgICAgICAgLy8gb3B0aW9uIGZvbyA9IHtiYXI6IGJhen1cbiAgICAgICAgICB2YWx1ZSA9IG9ub3B0aW9uTWFwKHRva2VucylcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgdG9rZW4gaW4gb3B0aW9uOiAnICsgdG9rZW5zWzBdKVxuICAgIH1cbiAgfVxufVxuXG52YXIgb25vcHRpb25NYXAgPSBmdW5jdGlvbiAodG9rZW5zKSB7XG4gIHZhciBwYXJzZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSByZXR1cm4gdHJ1ZVxuICAgIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykgcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL15cIit8XCIrJC9nbSwgJycpXG4gIH1cblxuICB2YXIgbWFwID0ge31cblxuICB3aGlsZSAodG9rZW5zLmxlbmd0aCkge1xuICAgIGlmICh0b2tlbnNbMF0gPT09ICd9Jykge1xuICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICAgIHJldHVybiBtYXBcbiAgICB9XG5cbiAgICB2YXIgaGFzQnJhY2tldCA9IHRva2Vuc1swXSA9PT0gJygnXG4gICAgaWYgKGhhc0JyYWNrZXQpIHRva2Vucy5zaGlmdCgpXG5cbiAgICB2YXIga2V5ID0gdG9rZW5zLnNoaWZ0KClcbiAgICBpZiAoaGFzQnJhY2tldCkge1xuICAgICAgaWYgKHRva2Vuc1swXSAhPT0gJyknKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkICkgYnV0IGZvdW5kICcgKyB0b2tlbnNbMF0pXG4gICAgICB0b2tlbnMuc2hpZnQoKVxuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IG51bGxcblxuICAgIHN3aXRjaCAodG9rZW5zWzBdKSB7XG4gICAgICBjYXNlICc6JzpcbiAgICAgICAgaWYgKG1hcFtrZXldICE9PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignRHVwbGljYXRlIG9wdGlvbiBtYXAga2V5ICcgKyBrZXkpXG5cbiAgICAgICAgdG9rZW5zLnNoaWZ0KClcblxuICAgICAgICB2YWx1ZSA9IHBhcnNlKHRva2Vucy5zaGlmdCgpKVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJ3snKSB7XG4gICAgICAgICAgLy8gb3B0aW9uIGZvbyA9IHtiYXI6IGJhen1cbiAgICAgICAgICB2YWx1ZSA9IG9ub3B0aW9uTWFwKHRva2VucylcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcFtrZXldID0gdmFsdWVcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAneyc6XG4gICAgICAgIHRva2Vucy5zaGlmdCgpXG4gICAgICAgIHZhbHVlID0gb25vcHRpb25NYXAodG9rZW5zKVxuXG4gICAgICAgIGlmIChtYXBba2V5XSA9PT0gdW5kZWZpbmVkKSBtYXBba2V5XSA9IFtdXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtYXBba2V5XSkpIHRocm93IG5ldyBFcnJvcignRHVwbGljYXRlIG9wdGlvbiBtYXAga2V5ICcgKyBrZXkpXG5cbiAgICAgICAgbWFwW2tleV0ucHVzaCh2YWx1ZSlcbiAgICAgICAgYnJlYWtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHRva2VuIGluIG9wdGlvbiBtYXA6ICcgKyB0b2tlbnNbMF0pXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBjbG9zaW5nIHRhZyBmb3Igb3B0aW9uIG1hcCcpXG59XG5cbnZhciBvbmltcG9ydCA9IGZ1bmN0aW9uICh0b2tlbnMpIHtcbiAgdG9rZW5zLnNoaWZ0KClcbiAgdmFyIGZpbGUgPSB0b2tlbnMuc2hpZnQoKS5yZXBsYWNlKC9eXCIrfFwiKyQvZ20sICcnKVxuXG4gIGlmICh0b2tlbnNbMF0gIT09ICc7JykgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHRva2VuOiAnICsgdG9rZW5zWzBdICsgJy4gRXhwZWN0ZWQgXCI7XCInKVxuXG4gIHRva2Vucy5zaGlmdCgpXG4gIHJldHVybiBmaWxlXG59XG5cbnZhciBvbnNlcnZpY2UgPSBmdW5jdGlvbiAodG9rZW5zKSB7XG4gIHRva2Vucy5zaGlmdCgpXG5cbiAgdmFyIHNlcnZpY2UgPSB7XG4gICAgbmFtZTogdG9rZW5zLnNoaWZ0KCksXG4gICAgbWV0aG9kczogW10sXG4gICAgb3B0aW9uczoge31cbiAgfVxuXG4gIGlmICh0b2tlbnNbMF0gIT09ICd7JykgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB7IGJ1dCBmb3VuZCAnICsgdG9rZW5zWzBdKVxuICB0b2tlbnMuc2hpZnQoKVxuXG4gIHdoaWxlICh0b2tlbnMubGVuZ3RoKSB7XG4gICAgaWYgKHRva2Vuc1swXSA9PT0gJ30nKSB7XG4gICAgICB0b2tlbnMuc2hpZnQoKVxuICAgICAgLy8gdGhlcmUgZ29lcyBvcHRpb25hbCBzZW1pY29sb24gYWZ0ZXIgdGhlIGVuY2xvc2luZyBcIn1cIlxuICAgICAgaWYgKHRva2Vuc1swXSA9PT0gJzsnKSB0b2tlbnMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHNlcnZpY2VcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRva2Vuc1swXSkge1xuICAgICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgICAgdmFyIG9wdCA9IG9ub3B0aW9uKHRva2VucylcbiAgICAgICAgaWYgKHNlcnZpY2Uub3B0aW9uc1tvcHQubmFtZV0gIT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdEdXBsaWNhdGUgb3B0aW9uICcgKyBvcHQubmFtZSlcbiAgICAgICAgc2VydmljZS5vcHRpb25zW29wdC5uYW1lXSA9IG9wdC52YWx1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncnBjJzpcbiAgICAgICAgc2VydmljZS5tZXRob2RzLnB1c2gob25ycGModG9rZW5zKSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB0b2tlbiBpbiBzZXJ2aWNlOiAnICsgdG9rZW5zWzBdKVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignTm8gY2xvc2luZyB0YWcgZm9yIHNlcnZpY2UnKVxufVxuXG52YXIgb25ycGMgPSBmdW5jdGlvbiAodG9rZW5zKSB7XG4gIHRva2Vucy5zaGlmdCgpXG5cbiAgdmFyIHJwYyA9IHtcbiAgICBuYW1lOiB0b2tlbnMuc2hpZnQoKSxcbiAgICBpbnB1dF90eXBlOiBudWxsLFxuICAgIG91dHB1dF90eXBlOiBudWxsLFxuICAgIGNsaWVudF9zdHJlYW1pbmc6IGZhbHNlLFxuICAgIHNlcnZlcl9zdHJlYW1pbmc6IGZhbHNlLFxuICAgIG9wdGlvbnM6IHt9XG4gIH1cblxuICBpZiAodG9rZW5zWzBdICE9PSAnKCcpIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgKCBidXQgZm91bmQgJyArIHRva2Vuc1swXSlcbiAgdG9rZW5zLnNoaWZ0KClcblxuICBpZiAodG9rZW5zWzBdID09PSAnc3RyZWFtJykge1xuICAgIHRva2Vucy5zaGlmdCgpXG4gICAgcnBjLmNsaWVudF9zdHJlYW1pbmcgPSB0cnVlXG4gIH1cblxuICBycGMuaW5wdXRfdHlwZSA9IHRva2Vucy5zaGlmdCgpXG5cbiAgaWYgKHRva2Vuc1swXSAhPT0gJyknKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkICkgYnV0IGZvdW5kICcgKyB0b2tlbnNbMF0pXG4gIHRva2Vucy5zaGlmdCgpXG5cbiAgaWYgKHRva2Vuc1swXSAhPT0gJ3JldHVybnMnKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHJldHVybnMgYnV0IGZvdW5kICcgKyB0b2tlbnNbMF0pXG4gIHRva2Vucy5zaGlmdCgpXG5cbiAgaWYgKHRva2Vuc1swXSAhPT0gJygnKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkICggYnV0IGZvdW5kICcgKyB0b2tlbnNbMF0pXG4gIHRva2Vucy5zaGlmdCgpXG5cbiAgaWYgKHRva2Vuc1swXSA9PT0gJ3N0cmVhbScpIHtcbiAgICB0b2tlbnMuc2hpZnQoKVxuICAgIHJwYy5zZXJ2ZXJfc3RyZWFtaW5nID0gdHJ1ZVxuICB9XG5cbiAgcnBjLm91dHB1dF90eXBlID0gdG9rZW5zLnNoaWZ0KClcblxuICBpZiAodG9rZW5zWzBdICE9PSAnKScpIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgKSBidXQgZm91bmQgJyArIHRva2Vuc1swXSlcbiAgdG9rZW5zLnNoaWZ0KClcblxuICBpZiAodG9rZW5zWzBdID09PSAnOycpIHtcbiAgICB0b2tlbnMuc2hpZnQoKVxuICAgIHJldHVybiBycGNcbiAgfVxuXG4gIGlmICh0b2tlbnNbMF0gIT09ICd7JykgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB7IGJ1dCBmb3VuZCAnICsgdG9rZW5zWzBdKVxuICB0b2tlbnMuc2hpZnQoKVxuXG4gIHdoaWxlICh0b2tlbnMubGVuZ3RoKSB7XG4gICAgaWYgKHRva2Vuc1swXSA9PT0gJ30nKSB7XG4gICAgICB0b2tlbnMuc2hpZnQoKVxuICAgICAgLy8gdGhlcmUgZ29lcyBvcHRpb25hbCBzZW1pY29sb24gYWZ0ZXIgdGhlIGVuY2xvc2luZyBcIn1cIlxuICAgICAgaWYgKHRva2Vuc1swXSA9PT0gJzsnKSB0b2tlbnMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHJwY1xuICAgIH1cblxuICAgIGlmICh0b2tlbnNbMF0gPT09ICdvcHRpb24nKSB7XG4gICAgICB2YXIgb3B0ID0gb25vcHRpb24odG9rZW5zKVxuICAgICAgaWYgKHJwYy5vcHRpb25zW29wdC5uYW1lXSAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ0R1cGxpY2F0ZSBvcHRpb24gJyArIG9wdC5uYW1lKVxuICAgICAgcnBjLm9wdGlvbnNbb3B0Lm5hbWVdID0gb3B0LnZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB0b2tlbiBpbiBycGMgb3B0aW9uczogJyArIHRva2Vuc1swXSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNsb3NpbmcgdGFnIGZvciBycGMnKVxufVxuXG52YXIgcGFyc2UgPSBmdW5jdGlvbiAoYnVmKSB7XG4gIHZhciB0b2tlbnMgPSB0b2tlbml6ZShidWYudG9TdHJpbmcoKSlcbiAgLy8gY2hlY2sgZm9yIGlzb2xhdGVkIHN0cmluZ3MgaW4gdG9rZW5zIGJ5IGxvb2tpbmcgZm9yIG9wZW5pbmcgcXVvdGVcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoL14oXFxcInxcXCcpKFteXFwnXFxcIl0qKSQvLnRlc3QodG9rZW5zW2ldKSkge1xuICAgICAgdmFyIGpcbiAgICAgIGlmICh0b2tlbnNbaV0ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGogPSBpICsgMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaiA9IGlcbiAgICAgIH1cbiAgICAgIC8vIGxvb2sgYWhlYWQgZm9yIHRoZSBjbG9zaW5nIHF1b3RlIGFuZCBjb2xsYXBzZSBhbGxcbiAgICAgIC8vIGluLWJldHdlZW4gdG9rZW5zIGludG8gYSBzaW5nbGUgdG9rZW5cbiAgICAgIGZvciAoajsgaiA8IHRva2Vucy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoL14oW15cXCdcXFwiXSopKFxcXCJ8XFwnKSQvLnRlc3QodG9rZW5zW2pdKSkge1xuICAgICAgICAgIHRva2VucyA9IHRva2Vucy5zbGljZSgwLCBpKS5jb25jYXQodG9rZW5zLnNsaWNlKGksIGogKyAxKS5qb2luKCcnKSkuY29uY2F0KHRva2Vucy5zbGljZShqICsgMSkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICB2YXIgc2NoZW1hID0ge1xuICAgIHN5bnRheDogMyxcbiAgICBwYWNrYWdlOiBudWxsLFxuICAgIGltcG9ydHM6IFtdLFxuICAgIGVudW1zOiBbXSxcbiAgICBtZXNzYWdlczogW10sXG4gICAgb3B0aW9uczoge30sXG4gICAgZXh0ZW5kczogW11cbiAgfVxuXG4gIHZhciBmaXJzdGxpbmUgPSB0cnVlXG5cbiAgd2hpbGUgKHRva2Vucy5sZW5ndGgpIHtcbiAgICBzd2l0Y2ggKHRva2Vuc1swXSkge1xuICAgICAgY2FzZSAncGFja2FnZSc6XG4gICAgICAgIHNjaGVtYS5wYWNrYWdlID0gb25wYWNrYWdlbmFtZSh0b2tlbnMpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ3N5bnRheCc6XG4gICAgICAgIGlmICghZmlyc3RsaW5lKSB0aHJvdyBuZXcgRXJyb3IoJ1Byb3RvYnVmIHN5bnRheCB2ZXJzaW9uIHNob3VsZCBiZSBmaXJzdCB0aGluZyBpbiBmaWxlJylcbiAgICAgICAgc2NoZW1hLnN5bnRheCA9IG9uc3ludGF4dmVyc2lvbih0b2tlbnMpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ21lc3NhZ2UnOlxuICAgICAgICBzY2hlbWEubWVzc2FnZXMucHVzaChvbm1lc3NhZ2UodG9rZW5zKSlcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgIHNjaGVtYS5lbnVtcy5wdXNoKG9uZW51bSh0b2tlbnMpKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdvcHRpb24nOlxuICAgICAgICB2YXIgb3B0ID0gb25vcHRpb24odG9rZW5zKVxuICAgICAgICBpZiAoc2NoZW1hLm9wdGlvbnNbb3B0Lm5hbWVdKSB0aHJvdyBuZXcgRXJyb3IoJ0R1cGxpY2F0ZSBvcHRpb24gJyArIG9wdC5uYW1lKVxuICAgICAgICBzY2hlbWEub3B0aW9uc1tvcHQubmFtZV0gPSBvcHQudmFsdWVcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnaW1wb3J0JzpcbiAgICAgICAgc2NoZW1hLmltcG9ydHMucHVzaChvbmltcG9ydCh0b2tlbnMpKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdleHRlbmQnOlxuICAgICAgICBzY2hlbWEuZXh0ZW5kcy5wdXNoKG9uZXh0ZW5kKHRva2VucykpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ3NlcnZpY2UnOlxuICAgICAgICBpZiAoIXNjaGVtYS5zZXJ2aWNlcykgc2NoZW1hLnNlcnZpY2VzID0gW11cbiAgICAgICAgc2NoZW1hLnNlcnZpY2VzLnB1c2gob25zZXJ2aWNlKHRva2VucykpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB0b2tlbjogJyArIHRva2Vuc1swXSlcbiAgICB9XG4gICAgZmlyc3RsaW5lID0gZmFsc2VcbiAgfVxuXG4gIC8vIG5vdyBpdGVyYXRlIG92ZXIgbWVzc2FnZXMgYW5kIHByb3BhZ2F0ZSBleHRlbmRzXG4gIHNjaGVtYS5leHRlbmRzLmZvckVhY2goZnVuY3Rpb24gKGV4dCkge1xuICAgIHNjaGVtYS5tZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChtc2cpIHtcbiAgICAgIGlmIChtc2cubmFtZSA9PT0gZXh0Lm5hbWUpIHtcbiAgICAgICAgZXh0Lm1lc3NhZ2UuZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgICAgaWYgKCFtc2cuZXh0ZW5zaW9ucyB8fCBmaWVsZC50YWcgPCBtc2cuZXh0ZW5zaW9ucy5mcm9tIHx8IGZpZWxkLnRhZyA+IG1zZy5leHRlbnNpb25zLnRvKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnLm5hbWUgKyAnIGRvZXMgbm90IGRlY2xhcmUgJyArIGZpZWxkLnRhZyArICcgYXMgYW4gZXh0ZW5zaW9uIG51bWJlcicpXG4gICAgICAgICAgfVxuICAgICAgICAgIG1zZy5maWVsZHMucHVzaChmaWVsZClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4gIHJldHVybiBzY2hlbWFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZVxuIiwidmFyIG9uZmllbGQgPSBmdW5jdGlvbiAoZiwgcmVzdWx0KSB7XG4gIHZhciBwcmVmaXggPSBmLnJlcGVhdGVkID8gJ3JlcGVhdGVkJyA6IGYucmVxdWlyZWQgPyAncmVxdWlyZWQnIDogJ29wdGlvbmFsJ1xuICBpZiAoZi50eXBlID09PSAnbWFwJykgcHJlZml4ID0gJ21hcDwnICsgZi5tYXAuZnJvbSArICcsJyArIGYubWFwLnRvICsgJz4nXG4gIGlmIChmLm9uZW9mKSBwcmVmaXggPSAnJ1xuXG4gIHZhciBvcHRzID0gT2JqZWN0LmtleXMoZi5vcHRpb25zIHx8IHt9KS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBrZXkgKyAnID0gJyArIGYub3B0aW9uc1trZXldXG4gIH0pLmpvaW4oJywnKVxuXG4gIGlmIChvcHRzKSBvcHRzID0gJyBbJyArIG9wdHMgKyAnXSdcblxuICByZXN1bHQucHVzaCgocHJlZml4ID8gcHJlZml4ICsgJyAnIDogJycpICsgKGYubWFwID09PSAnbWFwJyA/ICcnIDogZi50eXBlICsgJyAnKSArIGYubmFtZSArICcgPSAnICsgZi50YWcgKyBvcHRzICsgJzsnKVxuICByZXR1cm4gcmVzdWx0XG59XG5cbnZhciBvbm1lc3NhZ2UgPSBmdW5jdGlvbiAobSwgcmVzdWx0KSB7XG4gIHJlc3VsdC5wdXNoKCdtZXNzYWdlICcgKyBtLm5hbWUgKyAnIHsnKVxuXG4gIGlmICghbS5lbnVtcykgbS5lbnVtcyA9IFtdXG4gIG0uZW51bXMuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgIHJlc3VsdC5wdXNoKG9uZW51bShlLCBbXSkpXG4gIH0pXG5cbiAgaWYgKCFtLm1lc3NhZ2VzKSBtLm1lc3NhZ2VzID0gW11cbiAgbS5tZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gICAgcmVzdWx0LnB1c2gob25tZXNzYWdlKG0sIFtdKSlcbiAgfSlcblxuICB2YXIgb25lb2ZzID0ge31cblxuICBpZiAoIW0uZmllbGRzKSBtLmZpZWxkcyA9IFtdXG4gIG0uZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGYpIHtcbiAgICBpZiAoZi5vbmVvZikge1xuICAgICAgaWYgKCFvbmVvZnNbZi5vbmVvZl0pIG9uZW9mc1tmLm9uZW9mXSA9IFtdXG4gICAgICBvbmVvZnNbZi5vbmVvZl0ucHVzaChvbmZpZWxkKGYsIFtdKSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2gob25maWVsZChmLCBbXSkpXG4gICAgfVxuICB9KVxuXG4gIE9iamVjdC5rZXlzKG9uZW9mcykuZm9yRWFjaChmdW5jdGlvbiAobikge1xuICAgIG9uZW9mc1tuXS51bnNoaWZ0KCdvbmVvZiAnICsgbiArICcgeycpXG4gICAgb25lb2ZzW25dLnB1c2goJ30nKVxuICAgIHJlc3VsdC5wdXNoKG9uZW9mc1tuXSlcbiAgfSlcblxuICByZXN1bHQucHVzaCgnfScsICcnKVxuICByZXR1cm4gcmVzdWx0XG59XG5cbnZhciBvbmVudW0gPSBmdW5jdGlvbiAoZSwgcmVzdWx0KSB7XG4gIHJlc3VsdC5wdXNoKCdlbnVtICcgKyBlLm5hbWUgKyAnIHsnKVxuXG4gIHZhciB2YWxzID0gT2JqZWN0LmtleXMoZS52YWx1ZXMpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGtleSArICcgPSAnICsgZS52YWx1ZXNba2V5XSArICc7J1xuICB9KVxuXG4gIHJlc3VsdC5wdXNoKHZhbHMpXG4gIHJlc3VsdC5wdXNoKCd9JywgJycpXG4gIHJldHVybiByZXN1bHRcbn1cblxudmFyIG9ub3B0aW9uID0gZnVuY3Rpb24gKG8sIHJlc3VsdCkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG8pXG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgdmFyIHYgPSBvW29wdGlvbl1cblxuICAgIGlmICh+b3B0aW9uLmluZGV4T2YoJy4nKSkgb3B0aW9uID0gJygnICsgb3B0aW9uICsgJyknXG5cbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2XG5cbiAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHYgPSBvbm9wdGlvbk1hcCh2LCBbXSlcbiAgICAgIGlmICh2Lmxlbmd0aCkgcmVzdWx0LnB1c2goJ29wdGlvbiAnICsgb3B0aW9uICsgJyA9IHsnLCB2LCAnfTsnKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgb3B0aW9uICE9PSAnb3B0aW1pemVfZm9yJykgdiA9ICdcIicgKyB2ICsgJ1wiJ1xuICAgICAgcmVzdWx0LnB1c2goJ29wdGlvbiAnICsgb3B0aW9uICsgJyA9ICcgKyB2ICsgJzsnKVxuICAgIH1cbiAgfSlcbiAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xuICAgIHJlc3VsdC5wdXNoKCcnKVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG52YXIgb25vcHRpb25NYXAgPSBmdW5jdGlvbiAobywgcmVzdWx0KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMobylcbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgdmFyIHYgPSBvW2tdXG5cbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2XG5cbiAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgIHYuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICAgIHYgPSBvbm9wdGlvbk1hcCh2LCBbXSlcbiAgICAgICAgICBpZiAodi5sZW5ndGgpIHJlc3VsdC5wdXNoKGsgKyAnIHsnLCB2LCAnfScpXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2ID0gb25vcHRpb25NYXAodiwgW10pXG4gICAgICAgIGlmICh2Lmxlbmd0aCkgcmVzdWx0LnB1c2goayArICcgeycsIHYsICd9JylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB2ID0gJ1wiJyArIHYgKyAnXCInXG4gICAgICByZXN1bHQucHVzaChrICsgJzogJyArIHYpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxudmFyIG9uc2VydmljZXMgPSBmdW5jdGlvbiAocywgcmVzdWx0KSB7XG4gIHJlc3VsdC5wdXNoKCdzZXJ2aWNlICcgKyBzLm5hbWUgKyAnIHsnKVxuXG4gIGlmICghcy5vcHRpb25zKSBzLm9wdGlvbnMgPSB7fVxuXG4gIG9ub3B0aW9uKHMub3B0aW9ucywgcmVzdWx0KVxuXG4gIGlmICghcy5tZXRob2RzKSBzLm1ldGhvZHMgPSBbXVxuICBzLm1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgIHJlc3VsdC5wdXNoKG9ucnBjKG0sIFtdKSlcbiAgfSlcblxuICByZXN1bHQucHVzaCgnfScsICcnKVxuICByZXR1cm4gcmVzdWx0XG59XG5cbnZhciBvbnJwYyA9IGZ1bmN0aW9uIChycGMsIHJlc3VsdCkge1xuICB2YXIgZGVmID0gJ3JwYyAnICsgcnBjLm5hbWUgKyAnKCdcbiAgaWYgKHJwYy5jbGllbnRfc3RyZWFtaW5nKSBkZWYgKz0gJ3N0cmVhbSAnXG4gIGRlZiArPSBycGMuaW5wdXRfdHlwZSArICcpIHJldHVybnMgKCdcbiAgaWYgKHJwYy5zZXJ2ZXJfc3RyZWFtaW5nKSBkZWYgKz0gJ3N0cmVhbSAnXG4gIGRlZiArPSBycGMub3V0cHV0X3R5cGUgKyAnKSdcblxuICBpZiAoIXJwYy5vcHRpb25zKSBycGMub3B0aW9ucyA9IHt9XG5cbiAgdmFyIG9wdGlvbnMgPSBvbm9wdGlvbihycGMub3B0aW9ucywgW10pXG4gIGlmIChvcHRpb25zLmxlbmd0aCA+IDEpIHtcbiAgICByZXN1bHQucHVzaChkZWYgKyAnIHsnLCBvcHRpb25zLnNsaWNlKDAsIC0xKSwgJ30nKVxuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wdXNoKGRlZiArICc7JylcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxudmFyIGluZGVudCA9IGZ1bmN0aW9uIChsdmwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGluZSkpIHJldHVybiBsaW5lLm1hcChpbmRlbnQobHZsICsgJyAgJykpLmpvaW4oJ1xcbicpXG4gICAgcmV0dXJuIGx2bCArIGxpbmVcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzY2hlbWEpIHtcbiAgdmFyIHJlc3VsdCA9IFtdXG5cbiAgcmVzdWx0LnB1c2goJ3N5bnRheCA9IFwicHJvdG8nICsgc2NoZW1hLnN5bnRheCArICdcIjsnLCAnJylcblxuICBpZiAoc2NoZW1hLnBhY2thZ2UpIHJlc3VsdC5wdXNoKCdwYWNrYWdlICcgKyBzY2hlbWEucGFja2FnZSArICc7JywgJycpXG5cbiAgaWYgKCFzY2hlbWEub3B0aW9ucykgc2NoZW1hLm9wdGlvbnMgPSB7fVxuXG4gIG9ub3B0aW9uKHNjaGVtYS5vcHRpb25zLCByZXN1bHQpXG5cbiAgaWYgKCFzY2hlbWEuZW51bXMpIHNjaGVtYS5lbnVtcyA9IFtdXG4gIHNjaGVtYS5lbnVtcy5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgb25lbnVtKGUsIHJlc3VsdClcbiAgfSlcblxuICBpZiAoIXNjaGVtYS5tZXNzYWdlcykgc2NoZW1hLm1lc3NhZ2VzID0gW11cbiAgc2NoZW1hLm1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICBvbm1lc3NhZ2UobSwgcmVzdWx0KVxuICB9KVxuXG4gIGlmIChzY2hlbWEuc2VydmljZXMpIHtcbiAgICBzY2hlbWEuc2VydmljZXMuZm9yRWFjaChmdW5jdGlvbiAocykge1xuICAgICAgb25zZXJ2aWNlcyhzLCByZXN1bHQpXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiByZXN1bHQubWFwKGluZGVudCgnJykpLmpvaW4oJ1xcbicpXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzY2gpIHtcbiAgdmFyIG5vQ29tbWVudHMgPSBmdW5jdGlvbiAobGluZSkge1xuICAgIHZhciBpID0gbGluZS5pbmRleE9mKCcvLycpXG4gICAgcmV0dXJuIGkgPiAtMSA/IGxpbmUuc2xpY2UoMCwgaSkgOiBsaW5lXG4gIH1cblxuICB2YXIgbm9NdWx0aWxpbmVDb21tZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5zaWRlID0gZmFsc2VcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICBpZiAodG9rZW4gPT09ICcvKicpIHtcbiAgICAgICAgaW5zaWRlID0gdHJ1ZVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICh0b2tlbiA9PT0gJyovJykge1xuICAgICAgICBpbnNpZGUgPSBmYWxzZVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIHJldHVybiAhaW5zaWRlXG4gICAgfVxuICB9XG5cbiAgdmFyIHRyaW0gPSBmdW5jdGlvbiAobGluZSkge1xuICAgIHJldHVybiBsaW5lLnRyaW0oKVxuICB9XG5cbiAgcmV0dXJuIHNjaFxuICAgIC5yZXBsYWNlKC8oWzsse31cXChcXCk9XFw6XFxbXFxdPD5dfFxcL1xcKnxcXCpcXC8pL2csICcgJDEgJylcbiAgICAuc3BsaXQoL1xcbi8pXG4gICAgLm1hcCh0cmltKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAubWFwKG5vQ29tbWVudHMpXG4gICAgLm1hcCh0cmltKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuam9pbignXFxuJylcbiAgICAuc3BsaXQoL1xccyt8XFxuKy9nbSlcbiAgICAuZmlsdGVyKG5vTXVsdGlsaW5lQ29tbWVudHMoKSlcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXNwYWNlZC1mdW5jICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmV4cGVjdGVkLW11bHRpbGluZSAqL1xudmFyIGVuY29kaW5ncyA9IHJlcXVpcmUoJy4vZW5jb2RpbmdzJylcbnZhciB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxudmFyIGdlbm9iaiA9IHJlcXVpcmUoJ2dlbmVyYXRlLW9iamVjdC1wcm9wZXJ0eScpXG52YXIgZ2VuZnVuID0gcmVxdWlyZSgnZ2VuZXJhdGUtZnVuY3Rpb24nKVxuXG52YXIgc2tpcCA9IGZ1bmN0aW9uICh0eXBlLCBidWZmZXIsIG9mZnNldCkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIDA6XG4gICAgICB2YXJpbnQuZGVjb2RlKGJ1ZmZlciwgb2Zmc2V0KVxuICAgICAgcmV0dXJuIG9mZnNldCArIHZhcmludC5kZWNvZGUuYnl0ZXNcblxuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBvZmZzZXQgKyA4XG5cbiAgICBjYXNlIDI6XG4gICAgICB2YXIgbGVuID0gdmFyaW50LmRlY29kZShidWZmZXIsIG9mZnNldClcbiAgICAgIHJldHVybiBvZmZzZXQgKyB2YXJpbnQuZGVjb2RlLmJ5dGVzICsgbGVuXG5cbiAgICBjYXNlIDM6XG4gICAgY2FzZSA0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdHcm91cHMgYXJlIG5vdCBzdXBwb3J0ZWQnKVxuXG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIG9mZnNldCArIDRcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignVW5rbm93biB3aXJlIHR5cGU6ICcgKyB0eXBlKVxufVxuXG52YXIgZGVmaW5lZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIHZhbCAhPT0gJ251bWJlcicgfHwgIWlzTmFOKHZhbCkpXG59XG5cbnZhciBpc1N0cmluZyA9IGZ1bmN0aW9uIChkZWYpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFkZWYgJiYgdHlwZW9mIEpTT04ucGFyc2UoZGVmKSA9PT0gJ3N0cmluZydcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxudmFyIGRlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uIChmLCBkZWYpIHtcbiAgaWYgKGYubWFwKSByZXR1cm4gJ3t9J1xuICBpZiAoZi5yZXBlYXRlZCkgcmV0dXJuICdbXSdcblxuICBzd2l0Y2ggKGYudHlwZSkge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gaXNTdHJpbmcoZGVmKSA/IGRlZiA6ICdcIlwiJ1xuXG4gICAgY2FzZSAnYm9vbCc6XG4gICAgICBpZiAoZGVmID09PSAndHJ1ZScpIHJldHVybiAndHJ1ZSdcbiAgICAgIHJldHVybiAnZmFsc2UnXG5cbiAgICBjYXNlICdmbG9hdCc6XG4gICAgY2FzZSAnZG91YmxlJzpcbiAgICBjYXNlICdzZml4ZWQzMic6XG4gICAgY2FzZSAnZml4ZWQzMic6XG4gICAgY2FzZSAndmFyaW50JzpcbiAgICBjYXNlICdlbnVtJzpcbiAgICBjYXNlICd1aW50NjQnOlxuICAgIGNhc2UgJ3VpbnQzMic6XG4gICAgY2FzZSAnaW50NjQnOlxuICAgIGNhc2UgJ2ludDMyJzpcbiAgICBjYXNlICdzaW50NjQnOlxuICAgIGNhc2UgJ3NpbnQzMic6XG4gICAgICByZXR1cm4gJycgKyBOdW1iZXIoZGVmIHx8IDApXG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICdudWxsJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVtYSwgZXh0cmFFbmNvZGluZ3MpIHtcbiAgdmFyIG1lc3NhZ2VzID0ge31cbiAgdmFyIGVudW1zID0ge31cbiAgdmFyIGNhY2hlID0ge31cblxuICB2YXIgdmlzaXQgPSBmdW5jdGlvbiAoc2NoZW1hLCBwcmVmaXgpIHtcbiAgICBpZiAoc2NoZW1hLmVudW1zKSB7XG4gICAgICBzY2hlbWEuZW51bXMuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLmlkID0gcHJlZml4ICsgKHByZWZpeCA/ICcuJyA6ICcnKSArIGUubmFtZVxuICAgICAgICBlbnVtc1tlLmlkXSA9IGVcbiAgICAgICAgdmlzaXQoZSwgZS5pZClcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChzY2hlbWEubWVzc2FnZXMpIHtcbiAgICAgIHNjaGVtYS5tZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgIG0uaWQgPSBwcmVmaXggKyAocHJlZml4ID8gJy4nIDogJycpICsgbS5uYW1lXG4gICAgICAgIG1lc3NhZ2VzW20uaWRdID0gbVxuICAgICAgICBtLmZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgICAgaWYgKCFmLm1hcCkgcmV0dXJuXG5cbiAgICAgICAgICB2YXIgbmFtZSA9ICdNYXBfJyArIGYubWFwLmZyb20gKyAnXycgKyBmLm1hcC50b1xuICAgICAgICAgIHZhciBtYXAgPSB7XG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgZW51bXM6IFtdLFxuICAgICAgICAgICAgbWVzc2FnZXM6IFtdLFxuICAgICAgICAgICAgZmllbGRzOiBbe1xuICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgdHlwZTogZi5tYXAuZnJvbSxcbiAgICAgICAgICAgICAgdGFnOiAxLFxuICAgICAgICAgICAgICByZXBlYXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZScsXG4gICAgICAgICAgICAgIHR5cGU6IGYubWFwLnRvLFxuICAgICAgICAgICAgICB0YWc6IDIsXG4gICAgICAgICAgICAgIHJlcGVhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XSxcbiAgICAgICAgICAgIGV4dGVuc2lvbnM6IG51bGwsXG4gICAgICAgICAgICBpZDogcHJlZml4ICsgKHByZWZpeCA/ICcuJyA6ICcnKSArIG5hbWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIW1lc3NhZ2VzW21hcC5pZF0pIHtcbiAgICAgICAgICAgIG1lc3NhZ2VzW21hcC5pZF0gPSBtYXBcbiAgICAgICAgICAgIHNjaGVtYS5tZXNzYWdlcy5wdXNoKG1hcClcbiAgICAgICAgICB9XG4gICAgICAgICAgZi50eXBlID0gbmFtZVxuICAgICAgICAgIGYucmVwZWF0ZWQgPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHZpc2l0KG0sIG0uaWQpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZpc2l0KHNjaGVtYSwgJycpXG5cbiAgdmFyIGNvbXBpbGVFbnVtID0gZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgY29uZGl0aW9ucyA9IE9iamVjdC5rZXlzKGUudmFsdWVzKVxuICAgICAgLm1hcChmdW5jdGlvbiAoaykge1xuICAgICAgICByZXR1cm4gJ3ZhbCAhPT0gJyArIHBhcnNlSW50KGUudmFsdWVzW2tdLCAxMClcbiAgICAgIH0pXG4gICAgICAuam9pbignICYmICcpXG5cbiAgICBpZiAoIWNvbmRpdGlvbnMpIGNvbmRpdGlvbnMgPSAndHJ1ZSdcblxuICAgIHZhciBlbmNvZGUgPSBnZW5mdW4oKVxuICAgICAgKCdmdW5jdGlvbiBlbmNvZGUgKHZhbCwgYnVmLCBvZmZzZXQpIHsnKVxuICAgICAgICAoJ2lmICglcykgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBlbnVtIHZhbHVlOiBcIit2YWwpJywgY29uZGl0aW9ucylcbiAgICAgICAgKCd2YXJpbnQuZW5jb2RlKHZhbCwgYnVmLCBvZmZzZXQpJylcbiAgICAgICAgKCdlbmNvZGUuYnl0ZXMgPSB2YXJpbnQuZW5jb2RlLmJ5dGVzJylcbiAgICAgICAgKCdyZXR1cm4gYnVmJylcbiAgICAgICgnfScpXG4gICAgICAudG9GdW5jdGlvbih7XG4gICAgICAgIHZhcmludDogdmFyaW50XG4gICAgICB9KVxuXG4gICAgdmFyIGRlY29kZSA9IGdlbmZ1bigpXG4gICAgICAoJ2Z1bmN0aW9uIGRlY29kZSAoYnVmLCBvZmZzZXQpIHsnKVxuICAgICAgICAoJ3ZhciB2YWwgPSB2YXJpbnQuZGVjb2RlKGJ1Ziwgb2Zmc2V0KScpXG4gICAgICAgICgnaWYgKCVzKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGVudW0gdmFsdWU6IFwiK3ZhbCknLCBjb25kaXRpb25zKVxuICAgICAgICAoJ2RlY29kZS5ieXRlcyA9IHZhcmludC5kZWNvZGUuYnl0ZXMnKVxuICAgICAgICAoJ3JldHVybiB2YWwnKVxuICAgICAgKCd9JylcbiAgICAgIC50b0Z1bmN0aW9uKHtcbiAgICAgICAgdmFyaW50OiB2YXJpbnRcbiAgICAgIH0pXG5cbiAgICByZXR1cm4gZW5jb2RpbmdzLm1ha2UoMCwgZW5jb2RlLCBkZWNvZGUsIHZhcmludC5lbmNvZGluZ0xlbmd0aClcbiAgfVxuXG4gIHZhciBjb21waWxlTWVzc2FnZSA9IGZ1bmN0aW9uIChtLCBleHBvcnRzKSB7XG4gICAgbS5tZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChuZXN0ZWQpIHtcbiAgICAgIGV4cG9ydHNbbmVzdGVkLm5hbWVdID0gcmVzb2x2ZShuZXN0ZWQubmFtZSwgbS5pZClcbiAgICB9KVxuXG4gICAgbS5lbnVtcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIGV4cG9ydHNbdmFsLm5hbWVdID0gdmFsLnZhbHVlc1xuICAgIH0pXG5cbiAgICBleHBvcnRzLnR5cGUgPSAyXG4gICAgZXhwb3J0cy5tZXNzYWdlID0gdHJ1ZVxuICAgIGV4cG9ydHMubmFtZSA9IG0ubmFtZVxuXG4gICAgdmFyIG9uZW9mcyA9IHt9XG5cbiAgICBtLmZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XG4gICAgICBpZiAoIWYub25lb2YpIHJldHVyblxuICAgICAgaWYgKCFvbmVvZnNbZi5vbmVvZl0pIG9uZW9mc1tmLm9uZW9mXSA9IFtdXG4gICAgICBvbmVvZnNbZi5vbmVvZl0ucHVzaChmLm5hbWUpXG4gICAgfSlcblxuICAgIHZhciBlbmMgPSBtLmZpZWxkcy5tYXAoZnVuY3Rpb24gKGYpIHtcbiAgICAgIHJldHVybiByZXNvbHZlKGYudHlwZSwgbS5pZClcbiAgICB9KVxuXG4gICAgdmFyIGZvckVhY2ggPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5jLmxlbmd0aDsgaSsrKSBmbihlbmNbaV0sIG0uZmllbGRzW2ldLCBnZW5vYmooJ29iaicsIG0uZmllbGRzW2ldLm5hbWUpLCBpKVxuICAgIH1cblxuICAgIC8vIGNvbXBpbGUgZW5jb2RpbmdMZW5ndGhcblxuICAgIHZhciBlbmNvZGluZ0xlbmd0aCA9IGdlbmZ1bigpXG4gICAgICAoJ2Z1bmN0aW9uIGVuY29kaW5nTGVuZ3RoIChvYmopIHsnKVxuICAgICAgICAoJ3ZhciBsZW5ndGggPSAwJylcblxuICAgIE9iamVjdC5rZXlzKG9uZW9mcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIG1zZyA9IEpTT04uc3RyaW5naWZ5KCdvbmx5IG9uZSBvZiB0aGUgcHJvcGVydGllcyBkZWZpbmVkIGluIG9uZW9mICcgKyBuYW1lICsgJyBjYW4gYmUgc2V0JylcbiAgICAgIHZhciBjbnQgPSBvbmVvZnNbbmFtZV1cbiAgICAgICAgLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgIHJldHVybiAnK2RlZmluZWQoJyArIGdlbm9iaignb2JqJywgcHJvcCkgKyAnKSdcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJyArICcpXG5cbiAgICAgIGVuY29kaW5nTGVuZ3RoKCdpZiAoKCVzKSA+IDEpIHRocm93IG5ldyBFcnJvciglcyknLCBjbnQsIG1zZylcbiAgICB9KVxuXG4gICAgZm9yRWFjaChmdW5jdGlvbiAoZSwgZiwgdmFsLCBpKSB7XG4gICAgICB2YXIgcGFja2VkID0gZi5yZXBlYXRlZCAmJiBmLm9wdGlvbnMgJiYgZi5vcHRpb25zLnBhY2tlZFxuICAgICAgdmFyIGhsID0gdmFyaW50LmVuY29kaW5nTGVuZ3RoKGYudGFnIDw8IDMgfCBlLnR5cGUpXG5cbiAgICAgIGlmIChmLnJlcXVpcmVkKSBlbmNvZGluZ0xlbmd0aCgnaWYgKCFkZWZpbmVkKCVzKSkgdGhyb3cgbmV3IEVycm9yKCVzKScsIHZhbCwgSlNPTi5zdHJpbmdpZnkoZi5uYW1lICsgJyBpcyByZXF1aXJlZCcpKVxuICAgICAgZWxzZSBlbmNvZGluZ0xlbmd0aCgnaWYgKGRlZmluZWQoJXMpKSB7JywgdmFsKVxuXG4gICAgICBpZiAoZi5tYXApIHtcbiAgICAgICAgZW5jb2RpbmdMZW5ndGgoKVxuICAgICAgICAgICgndmFyIHRtcCA9IE9iamVjdC5rZXlzKCVzKScsIHZhbClcbiAgICAgICAgICAoJ2ZvciAodmFyIGkgPSAwOyBpIDwgdG1wLmxlbmd0aDsgaSsrKSB7JylcbiAgICAgICAgICAgICgndG1wW2ldID0ge2tleTogdG1wW2ldLCB2YWx1ZTogJXNbdG1wW2ldXX0nLCB2YWwpXG4gICAgICAgICAgKCd9JylcbiAgICAgICAgdmFsID0gJ3RtcCdcbiAgICAgIH1cblxuICAgICAgaWYgKHBhY2tlZCkge1xuICAgICAgICBlbmNvZGluZ0xlbmd0aCgpXG4gICAgICAgICAgKCd2YXIgcGFja2VkTGVuID0gMCcpXG4gICAgICAgICAgKCdmb3IgKHZhciBpID0gMDsgaSA8ICVzLmxlbmd0aDsgaSsrKSB7JywgdmFsKVxuICAgICAgICAgICAgKCdpZiAoIWRlZmluZWQoJXMpKSBjb250aW51ZScsIHZhbCArICdbaV0nKVxuICAgICAgICAgICAgKCd2YXIgbGVuID0gZW5jWyVkXS5lbmNvZGluZ0xlbmd0aCglcyknLCBpLCB2YWwgKyAnW2ldJylcbiAgICAgICAgICAgICgncGFja2VkTGVuICs9IGxlbicpXG5cbiAgICAgICAgaWYgKGUubWVzc2FnZSkgZW5jb2RpbmdMZW5ndGgoJ3BhY2tlZExlbiArPSB2YXJpbnQuZW5jb2RpbmdMZW5ndGgobGVuKScpXG5cbiAgICAgICAgZW5jb2RpbmdMZW5ndGgoJ30nKVxuICAgICAgICAgICgnaWYgKHBhY2tlZExlbikgeycpXG4gICAgICAgICAgICAoJ2xlbmd0aCArPSAlZCArIHBhY2tlZExlbiArIHZhcmludC5lbmNvZGluZ0xlbmd0aChwYWNrZWRMZW4pJywgaGwpXG4gICAgICAgICAgKCd9JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmLnJlcGVhdGVkKSB7XG4gICAgICAgICAgZW5jb2RpbmdMZW5ndGgoJ2ZvciAodmFyIGkgPSAwOyBpIDwgJXMubGVuZ3RoOyBpKyspIHsnLCB2YWwpXG4gICAgICAgICAgdmFsICs9ICdbaV0nXG4gICAgICAgICAgZW5jb2RpbmdMZW5ndGgoJ2lmICghZGVmaW5lZCglcykpIGNvbnRpbnVlJywgdmFsKVxuICAgICAgICB9XG5cbiAgICAgICAgZW5jb2RpbmdMZW5ndGgoJ3ZhciBsZW4gPSBlbmNbJWRdLmVuY29kaW5nTGVuZ3RoKCVzKScsIGksIHZhbClcbiAgICAgICAgaWYgKGUubWVzc2FnZSkgZW5jb2RpbmdMZW5ndGgoJ2xlbmd0aCArPSB2YXJpbnQuZW5jb2RpbmdMZW5ndGgobGVuKScpXG4gICAgICAgIGVuY29kaW5nTGVuZ3RoKCdsZW5ndGggKz0gJWQgKyBsZW4nLCBobClcbiAgICAgICAgaWYgKGYucmVwZWF0ZWQpIGVuY29kaW5nTGVuZ3RoKCd9JylcbiAgICAgIH1cblxuICAgICAgaWYgKCFmLnJlcXVpcmVkKSBlbmNvZGluZ0xlbmd0aCgnfScpXG4gICAgfSlcblxuICAgIGVuY29kaW5nTGVuZ3RoKClcbiAgICAgICAgKCdyZXR1cm4gbGVuZ3RoJylcbiAgICAgICgnfScpXG5cbiAgICBlbmNvZGluZ0xlbmd0aCA9IGVuY29kaW5nTGVuZ3RoLnRvRnVuY3Rpb24oe1xuICAgICAgZGVmaW5lZDogZGVmaW5lZCxcbiAgICAgIHZhcmludDogdmFyaW50LFxuICAgICAgZW5jOiBlbmNcbiAgICB9KVxuXG4gICAgLy8gY29tcGlsZSBlbmNvZGVcblxuICAgIHZhciBlbmNvZGUgPSBnZW5mdW4oKVxuICAgICAgKCdmdW5jdGlvbiBlbmNvZGUgKG9iaiwgYnVmLCBvZmZzZXQpIHsnKVxuICAgICAgICAoJ2lmICghb2Zmc2V0KSBvZmZzZXQgPSAwJylcbiAgICAgICAgKCdpZiAoIWJ1ZikgYnVmID0gbmV3IEJ1ZmZlcihlbmNvZGluZ0xlbmd0aChvYmopKScpXG4gICAgICAgICgndmFyIG9sZE9mZnNldCA9IG9mZnNldCcpXG5cbiAgICBPYmplY3Qua2V5cyhvbmVvZnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBtc2cgPSBKU09OLnN0cmluZ2lmeSgnb25seSBvbmUgb2YgdGhlIHByb3BlcnRpZXMgZGVmaW5lZCBpbiBvbmVvZiAnICsgbmFtZSArICcgY2FuIGJlIHNldCcpXG4gICAgICB2YXIgY250ID0gb25lb2ZzW25hbWVdXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICByZXR1cm4gJytkZWZpbmVkKCcgKyBnZW5vYmooJ29iaicsIHByb3ApICsgJyknXG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcgKyAnKVxuXG4gICAgICBlbmNvZGUoJ2lmICgoJXMpID4gMSkgdGhyb3cgbmV3IEVycm9yKCVzKScsIGNudCwgbXNnKVxuICAgIH0pXG5cbiAgICBmb3JFYWNoKGZ1bmN0aW9uIChlLCBmLCB2YWwsIGkpIHtcbiAgICAgIGlmIChmLnJlcXVpcmVkKSBlbmNvZGUoJ2lmICghZGVmaW5lZCglcykpIHRocm93IG5ldyBFcnJvciglcyknLCB2YWwsIEpTT04uc3RyaW5naWZ5KGYubmFtZSArICcgaXMgcmVxdWlyZWQnKSlcbiAgICAgIGVsc2UgZW5jb2RlKCdpZiAoZGVmaW5lZCglcykpIHsnLCB2YWwpXG5cbiAgICAgIHZhciBwYWNrZWQgPSBmLnJlcGVhdGVkICYmIGYub3B0aW9ucyAmJiBmLm9wdGlvbnMucGFja2VkXG4gICAgICB2YXIgcCA9IHZhcmludC5lbmNvZGUoZi50YWcgPDwgMyB8IDIpXG4gICAgICB2YXIgaCA9IHZhcmludC5lbmNvZGUoZi50YWcgPDwgMyB8IGUudHlwZSlcbiAgICAgIHZhciBqXG5cbiAgICAgIGlmIChmLm1hcCkge1xuICAgICAgICBlbmNvZGUoKVxuICAgICAgICAgICgndmFyIHRtcCA9IE9iamVjdC5rZXlzKCVzKScsIHZhbClcbiAgICAgICAgICAoJ2ZvciAodmFyIGkgPSAwOyBpIDwgdG1wLmxlbmd0aDsgaSsrKSB7JylcbiAgICAgICAgICAgICgndG1wW2ldID0ge2tleTogdG1wW2ldLCB2YWx1ZTogJXNbdG1wW2ldXX0nLCB2YWwpXG4gICAgICAgICAgKCd9JylcbiAgICAgICAgdmFsID0gJ3RtcCdcbiAgICAgIH1cblxuICAgICAgaWYgKHBhY2tlZCkge1xuICAgICAgICBlbmNvZGUoKVxuICAgICAgICAgICgndmFyIHBhY2tlZExlbiA9IDAnKVxuICAgICAgICAgICgnZm9yICh2YXIgaSA9IDA7IGkgPCAlcy5sZW5ndGg7IGkrKykgeycsIHZhbClcbiAgICAgICAgICAgICgnaWYgKCFkZWZpbmVkKCVzKSkgY29udGludWUnLCB2YWwgKyAnW2ldJylcbiAgICAgICAgICAgICgncGFja2VkTGVuICs9IGVuY1slZF0uZW5jb2RpbmdMZW5ndGgoJXMpJywgaSwgdmFsICsgJ1tpXScpXG4gICAgICAgICAgKCd9JylcblxuICAgICAgICBlbmNvZGUoJ2lmIChwYWNrZWRMZW4pIHsnKVxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgaC5sZW5ndGg7IGorKykgZW5jb2RlKCdidWZbb2Zmc2V0KytdID0gJWQnLCBwW2pdKVxuICAgICAgICBlbmNvZGUoJ3ZhcmludC5lbmNvZGUocGFja2VkTGVuLCBidWYsIG9mZnNldCknKVxuICAgICAgICBlbmNvZGUoJ29mZnNldCArPSB2YXJpbnQuZW5jb2RlLmJ5dGVzJylcbiAgICAgICAgZW5jb2RlKCd9JylcbiAgICAgIH1cblxuICAgICAgaWYgKGYucmVwZWF0ZWQpIHtcbiAgICAgICAgZW5jb2RlKCdmb3IgKHZhciBpID0gMDsgaSA8ICVzLmxlbmd0aDsgaSsrKSB7JywgdmFsKVxuICAgICAgICB2YWwgKz0gJ1tpXSdcbiAgICAgICAgZW5jb2RlKCdpZiAoIWRlZmluZWQoJXMpKSBjb250aW51ZScsIHZhbClcbiAgICAgIH1cblxuICAgICAgaWYgKCFwYWNrZWQpIGZvciAoaiA9IDA7IGogPCBoLmxlbmd0aDsgaisrKSBlbmNvZGUoJ2J1ZltvZmZzZXQrK10gPSAlZCcsIGhbal0pXG5cbiAgICAgIGlmIChlLm1lc3NhZ2UpIHtcbiAgICAgICAgZW5jb2RlKCd2YXJpbnQuZW5jb2RlKGVuY1slZF0uZW5jb2RpbmdMZW5ndGgoJXMpLCBidWYsIG9mZnNldCknLCBpLCB2YWwpXG4gICAgICAgIGVuY29kZSgnb2Zmc2V0ICs9IHZhcmludC5lbmNvZGUuYnl0ZXMnKVxuICAgICAgfVxuXG4gICAgICBlbmNvZGUoJ2VuY1slZF0uZW5jb2RlKCVzLCBidWYsIG9mZnNldCknLCBpLCB2YWwpXG4gICAgICBlbmNvZGUoJ29mZnNldCArPSBlbmNbJWRdLmVuY29kZS5ieXRlcycsIGkpXG5cbiAgICAgIGlmIChmLnJlcGVhdGVkKSBlbmNvZGUoJ30nKVxuICAgICAgaWYgKCFmLnJlcXVpcmVkKSBlbmNvZGUoJ30nKVxuICAgIH0pXG5cbiAgICBlbmNvZGUoKVxuICAgICAgICAoJ2VuY29kZS5ieXRlcyA9IG9mZnNldCAtIG9sZE9mZnNldCcpXG4gICAgICAgICgncmV0dXJuIGJ1ZicpXG4gICAgICAoJ30nKVxuXG4gICAgZW5jb2RlID0gZW5jb2RlLnRvRnVuY3Rpb24oe1xuICAgICAgZW5jb2RpbmdMZW5ndGg6IGVuY29kaW5nTGVuZ3RoLFxuICAgICAgZGVmaW5lZDogZGVmaW5lZCxcbiAgICAgIHZhcmludDogdmFyaW50LFxuICAgICAgZW5jOiBlbmMsXG4gICAgICBCdWZmZXI6IEJ1ZmZlclxuICAgIH0pXG5cbiAgICAvLyBjb21waWxlIGRlY29kZVxuXG4gICAgdmFyIGludmFsaWQgPSBtLmZpZWxkc1xuICAgICAgLm1hcChmdW5jdGlvbiAoZiwgaSkge1xuICAgICAgICByZXR1cm4gZi5yZXF1aXJlZCAmJiAnIWZvdW5kJyArIGlcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIHJldHVybiBmXG4gICAgICB9KVxuICAgICAgLmpvaW4oJyB8fCAnKVxuXG4gICAgdmFyIGRlY29kZSA9IGdlbmZ1bigpXG5cbiAgICB2YXIgb2JqZWN0S2V5cyA9IFtdXG4gICAgZm9yRWFjaChmdW5jdGlvbiAoZSwgZikge1xuICAgICAgdmFyIGRlZiA9IGYub3B0aW9ucyAmJiBmLm9wdGlvbnMuZGVmYXVsdFxuICAgICAgdmFyIHJlc29sdmVkID0gcmVzb2x2ZShmLnR5cGUsIG0uaWQsIGZhbHNlKVxuICAgICAgdmFyIHZhbHMgPSByZXNvbHZlZCAmJiByZXNvbHZlZC52YWx1ZXNcblxuICAgICAgaWYgKHZhbHMpIHsgLy8gaXMgZW51bVxuICAgICAgICBpZiAoZi5yZXBlYXRlZCkge1xuICAgICAgICAgIG9iamVjdEtleXMucHVzaChnZW5vYmoucHJvcGVydHkoZi5uYW1lKSArICc6IFtdJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWYgPSAoZGVmICYmIGRlZiBpbiB2YWxzKSA/IHZhbHNbZGVmXSA6IHZhbHNbT2JqZWN0LmtleXModmFscylbMF1dXG4gICAgICAgICAgb2JqZWN0S2V5cy5wdXNoKGdlbm9iai5wcm9wZXJ0eShmLm5hbWUpICsgJzogJyArIHBhcnNlSW50KGRlZiB8fCAwLCAxMCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICghZi5vbmVvZikge1xuICAgICAgICBvYmplY3RLZXlzLnB1c2goZ2Vub2JqLnByb3BlcnR5KGYubmFtZSkgKyAnOiAnICsgZGVmYXVsdFZhbHVlKGYsIGRlZikpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGRlY29kZSgpXG4gICAgICAoJ2Z1bmN0aW9uIGRlY29kZSAoYnVmLCBvZmZzZXQsIGVuZCkgeycpXG4gICAgICAgICgnaWYgKCFvZmZzZXQpIG9mZnNldCA9IDAnKVxuICAgICAgICAoJ2lmICghZW5kKSBlbmQgPSBidWYubGVuZ3RoJylcbiAgICAgICAgKCdpZiAoIShlbmQgPD0gYnVmLmxlbmd0aCAmJiBvZmZzZXQgPD0gYnVmLmxlbmd0aCkpIHRocm93IG5ldyBFcnJvcihcIkRlY29kZWQgbWVzc2FnZSBpcyBub3QgdmFsaWRcIiknKVxuICAgICAgICAoJ3ZhciBvbGRPZmZzZXQgPSBvZmZzZXQnKVxuICAgICAgICAoJ3ZhciBvYmogPSB7JylcblxuICAgIG9iamVjdEtleXMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCwgaSkge1xuICAgICAgZGVjb2RlKHByb3AgKyAoaSA9PT0gb2JqZWN0S2V5cy5sZW5ndGggLSAxID8gJycgOiAnLCcpKVxuICAgIH0pXG5cbiAgICBkZWNvZGUoJ30nKVxuXG4gICAgZm9yRWFjaChmdW5jdGlvbiAoZSwgZiwgdmFsLCBpKSB7XG4gICAgICBpZiAoZi5yZXF1aXJlZCkgZGVjb2RlKCd2YXIgZm91bmQlZCA9IGZhbHNlJywgaSlcbiAgICB9KVxuXG4gICAgZGVjb2RlKCd3aGlsZSAodHJ1ZSkgeycpXG4gICAgICAoJ2lmIChlbmQgPD0gb2Zmc2V0KSB7JylcbiAgICAgICAgKGludmFsaWQgJiYgJ2lmICglcykgdGhyb3cgbmV3IEVycm9yKFwiRGVjb2RlZCBtZXNzYWdlIGlzIG5vdCB2YWxpZFwiKScsIGludmFsaWQpXG4gICAgICAgICgnZGVjb2RlLmJ5dGVzID0gb2Zmc2V0IC0gb2xkT2Zmc2V0JylcbiAgICAgICAgKCdyZXR1cm4gb2JqJylcbiAgICAgICgnfScpXG4gICAgICAoJ3ZhciBwcmVmaXggPSB2YXJpbnQuZGVjb2RlKGJ1Ziwgb2Zmc2V0KScpXG4gICAgICAoJ29mZnNldCArPSB2YXJpbnQuZGVjb2RlLmJ5dGVzJylcbiAgICAgICgndmFyIHRhZyA9IHByZWZpeCA+PiAzJylcbiAgICAgICgnc3dpdGNoICh0YWcpIHsnKVxuXG4gICAgZm9yRWFjaChmdW5jdGlvbiAoZSwgZiwgdmFsLCBpKSB7XG4gICAgICB2YXIgcGFja2VkID0gZi5yZXBlYXRlZCAmJiBmLm9wdGlvbnMgJiYgZi5vcHRpb25zLnBhY2tlZFxuXG4gICAgICBkZWNvZGUoJ2Nhc2UgJWQ6JywgZi50YWcpXG5cbiAgICAgIGlmIChmLm9uZW9mKSB7XG4gICAgICAgIG0uZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKG90aGVyRmllbGQpIHtcbiAgICAgICAgICBpZiAob3RoZXJGaWVsZC5vbmVvZiA9PT0gZi5vbmVvZiAmJiBmLm5hbWUgIT09IG90aGVyRmllbGQubmFtZSkge1xuICAgICAgICAgICAgZGVjb2RlKCdkZWxldGUgJXMnLCBnZW5vYmooJ29iaicsIG90aGVyRmllbGQubmFtZSkpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAocGFja2VkKSB7XG4gICAgICAgIGRlY29kZSgpXG4gICAgICAgICAgKCd2YXIgcGFja2VkRW5kID0gdmFyaW50LmRlY29kZShidWYsIG9mZnNldCknKVxuICAgICAgICAgICgnb2Zmc2V0ICs9IHZhcmludC5kZWNvZGUuYnl0ZXMnKVxuICAgICAgICAgICgncGFja2VkRW5kICs9IG9mZnNldCcpXG4gICAgICAgICAgKCd3aGlsZSAob2Zmc2V0IDwgcGFja2VkRW5kKSB7JylcbiAgICAgIH1cblxuICAgICAgaWYgKGUubWVzc2FnZSkge1xuICAgICAgICBkZWNvZGUoJ3ZhciBsZW4gPSB2YXJpbnQuZGVjb2RlKGJ1Ziwgb2Zmc2V0KScpXG4gICAgICAgIGRlY29kZSgnb2Zmc2V0ICs9IHZhcmludC5kZWNvZGUuYnl0ZXMnKVxuICAgICAgICBpZiAoZi5tYXApIHtcbiAgICAgICAgICBkZWNvZGUoJ3ZhciB0bXAgPSBlbmNbJWRdLmRlY29kZShidWYsIG9mZnNldCwgb2Zmc2V0ICsgbGVuKScsIGkpXG4gICAgICAgICAgZGVjb2RlKCclc1t0bXAua2V5XSA9IHRtcC52YWx1ZScsIHZhbClcbiAgICAgICAgfSBlbHNlIGlmIChmLnJlcGVhdGVkKSB7XG4gICAgICAgICAgZGVjb2RlKCclcy5wdXNoKGVuY1slZF0uZGVjb2RlKGJ1Ziwgb2Zmc2V0LCBvZmZzZXQgKyBsZW4pKScsIHZhbCwgaSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWNvZGUoJyVzID0gZW5jWyVkXS5kZWNvZGUoYnVmLCBvZmZzZXQsIG9mZnNldCArIGxlbiknLCB2YWwsIGkpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmLnJlcGVhdGVkKSB7XG4gICAgICAgICAgZGVjb2RlKCclcy5wdXNoKGVuY1slZF0uZGVjb2RlKGJ1Ziwgb2Zmc2V0KSknLCB2YWwsIGkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVjb2RlKCclcyA9IGVuY1slZF0uZGVjb2RlKGJ1Ziwgb2Zmc2V0KScsIHZhbCwgaSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkZWNvZGUoJ29mZnNldCArPSBlbmNbJWRdLmRlY29kZS5ieXRlcycsIGkpXG5cbiAgICAgIGlmIChwYWNrZWQpIGRlY29kZSgnfScpXG4gICAgICBpZiAoZi5yZXF1aXJlZCkgZGVjb2RlKCdmb3VuZCVkID0gdHJ1ZScsIGkpXG4gICAgICBkZWNvZGUoJ2JyZWFrJylcbiAgICB9KVxuXG4gICAgZGVjb2RlKClcbiAgICAgICAgICAoJ2RlZmF1bHQ6JylcbiAgICAgICAgICAoJ29mZnNldCA9IHNraXAocHJlZml4ICYgNywgYnVmLCBvZmZzZXQpJylcbiAgICAgICAgKCd9JylcbiAgICAgICgnfScpXG4gICAgKCd9JylcblxuICAgIGRlY29kZSA9IGRlY29kZS50b0Z1bmN0aW9uKHtcbiAgICAgIHZhcmludDogdmFyaW50LFxuICAgICAgc2tpcDogc2tpcCxcbiAgICAgIGVuYzogZW5jXG4gICAgfSlcblxuICAgIC8vIGVuZCBvZiBjb21waWxhdGlvbiAtIHJldHVybiBhbGwgdGhlIHRoaW5nc1xuXG4gICAgZW5jb2RlLmJ5dGVzID0gZGVjb2RlLmJ5dGVzID0gMFxuXG4gICAgZXhwb3J0cy5idWZmZXIgPSB0cnVlXG4gICAgZXhwb3J0cy5lbmNvZGUgPSBlbmNvZGVcbiAgICBleHBvcnRzLmRlY29kZSA9IGRlY29kZVxuICAgIGV4cG9ydHMuZW5jb2RpbmdMZW5ndGggPSBlbmNvZGluZ0xlbmd0aFxuXG4gICAgcmV0dXJuIGV4cG9ydHNcbiAgfVxuXG4gIHZhciByZXNvbHZlID0gZnVuY3Rpb24gKG5hbWUsIGZyb20sIGNvbXBpbGUpIHtcbiAgICBpZiAoZXh0cmFFbmNvZGluZ3MgJiYgZXh0cmFFbmNvZGluZ3NbbmFtZV0pIHJldHVybiBleHRyYUVuY29kaW5nc1tuYW1lXVxuICAgIGlmIChlbmNvZGluZ3NbbmFtZV0pIHJldHVybiBlbmNvZGluZ3NbbmFtZV1cblxuICAgIHZhciBtID0gKGZyb20gPyBmcm9tICsgJy4nICsgbmFtZSA6IG5hbWUpLnNwbGl0KCcuJylcbiAgICAgIC5tYXAoZnVuY3Rpb24gKHBhcnQsIGksIGxpc3QpIHtcbiAgICAgICAgcmV0dXJuIGxpc3Quc2xpY2UoMCwgaSkuY29uY2F0KG5hbWUpLmpvaW4oJy4nKVxuICAgICAgfSlcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwgaWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCB8fCBtZXNzYWdlc1tpZF0gfHwgZW51bXNbaWRdXG4gICAgICB9LCBudWxsKVxuXG4gICAgaWYgKGNvbXBpbGUgPT09IGZhbHNlKSByZXR1cm4gbVxuICAgIGlmICghbSkgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSAnICsgbmFtZSlcblxuICAgIGlmIChtLnZhbHVlcykgcmV0dXJuIGNvbXBpbGVFbnVtKG0pXG4gICAgcmV0dXJuIGNhY2hlW20uaWRdIHx8IGNvbXBpbGVNZXNzYWdlKG0sIGNhY2hlW20uaWRdID0ge30pXG4gIH1cblxuICByZXR1cm4gKHNjaGVtYS5lbnVtcyB8fCBbXSkuY29uY2F0KChzY2hlbWEubWVzc2FnZXMgfHwgW10pLm1hcChmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgIHJldHVybiByZXNvbHZlKG1lc3NhZ2UuaWQpXG4gIH0pKVxufVxuIiwidmFyIHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG52YXIgc3ZhcmludCA9IHJlcXVpcmUoJ3NpZ25lZC12YXJpbnQnKVxuXG52YXIgZW5jb2RlciA9IGZ1bmN0aW9uICh0eXBlLCBlbmNvZGUsIGRlY29kZSwgZW5jb2RpbmdMZW5ndGgpIHtcbiAgZW5jb2RlLmJ5dGVzID0gZGVjb2RlLmJ5dGVzID0gMFxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogdHlwZSxcbiAgICBlbmNvZGU6IGVuY29kZSxcbiAgICBkZWNvZGU6IGRlY29kZSxcbiAgICBlbmNvZGluZ0xlbmd0aDogZW5jb2RpbmdMZW5ndGhcbiAgfVxufVxuXG5leHBvcnRzLm1ha2UgPSBlbmNvZGVyXG5cbmV4cG9ydHMuYnl0ZXMgPSAoZnVuY3Rpb24gKHRhZykge1xuICB2YXIgYnVmZmVyTGVuZ3RoID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHJldHVybiBCdWZmZXIuaXNCdWZmZXIodmFsKSA/IHZhbC5sZW5ndGggOiBCdWZmZXIuYnl0ZUxlbmd0aCh2YWwpXG4gIH1cblxuICB2YXIgZW5jb2RpbmdMZW5ndGggPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgdmFyIGxlbiA9IGJ1ZmZlckxlbmd0aCh2YWwpXG4gICAgcmV0dXJuIHZhcmludC5lbmNvZGluZ0xlbmd0aChsZW4pICsgbGVuXG4gIH1cblxuICB2YXIgZW5jb2RlID0gZnVuY3Rpb24gKHZhbCwgYnVmZmVyLCBvZmZzZXQpIHtcbiAgICB2YXIgb2xkT2Zmc2V0ID0gb2Zmc2V0XG4gICAgdmFyIGxlbiA9IGJ1ZmZlckxlbmd0aCh2YWwpXG5cbiAgICB2YXJpbnQuZW5jb2RlKGxlbiwgYnVmZmVyLCBvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IHZhcmludC5lbmNvZGUuYnl0ZXNcblxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkgdmFsLmNvcHkoYnVmZmVyLCBvZmZzZXQpXG4gICAgZWxzZSBidWZmZXIud3JpdGUodmFsLCBvZmZzZXQsIGxlbilcbiAgICBvZmZzZXQgKz0gbGVuXG5cbiAgICBlbmNvZGUuYnl0ZXMgPSBvZmZzZXQgLSBvbGRPZmZzZXRcbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cblxuICB2YXIgZGVjb2RlID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gICAgdmFyIG9sZE9mZnNldCA9IG9mZnNldFxuXG4gICAgdmFyIGxlbiA9IHZhcmludC5kZWNvZGUoYnVmZmVyLCBvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IHZhcmludC5kZWNvZGUuYnl0ZXNcblxuICAgIHZhciB2YWwgPSBidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBsZW4pXG4gICAgb2Zmc2V0ICs9IHZhbC5sZW5ndGhcblxuICAgIGRlY29kZS5ieXRlcyA9IG9mZnNldCAtIG9sZE9mZnNldFxuICAgIHJldHVybiB2YWxcbiAgfVxuXG4gIHJldHVybiBlbmNvZGVyKDIsIGVuY29kZSwgZGVjb2RlLCBlbmNvZGluZ0xlbmd0aClcbn0pKClcblxuZXhwb3J0cy5zdHJpbmcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgZW5jb2RpbmdMZW5ndGggPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgdmFyIGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHZhbClcbiAgICByZXR1cm4gdmFyaW50LmVuY29kaW5nTGVuZ3RoKGxlbikgKyBsZW5cbiAgfVxuXG4gIHZhciBlbmNvZGUgPSBmdW5jdGlvbiAodmFsLCBidWZmZXIsIG9mZnNldCkge1xuICAgIHZhciBvbGRPZmZzZXQgPSBvZmZzZXRcbiAgICB2YXIgbGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgodmFsKVxuXG4gICAgdmFyaW50LmVuY29kZShsZW4sIGJ1ZmZlciwgb2Zmc2V0LCAndXRmLTgnKVxuICAgIG9mZnNldCArPSB2YXJpbnQuZW5jb2RlLmJ5dGVzXG5cbiAgICBidWZmZXIud3JpdGUodmFsLCBvZmZzZXQsIGxlbilcbiAgICBvZmZzZXQgKz0gbGVuXG5cbiAgICBlbmNvZGUuYnl0ZXMgPSBvZmZzZXQgLSBvbGRPZmZzZXRcbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cblxuICB2YXIgZGVjb2RlID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gICAgdmFyIG9sZE9mZnNldCA9IG9mZnNldFxuXG4gICAgdmFyIGxlbiA9IHZhcmludC5kZWNvZGUoYnVmZmVyLCBvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IHZhcmludC5kZWNvZGUuYnl0ZXNcblxuICAgIHZhciB2YWwgPSBidWZmZXIudG9TdHJpbmcoJ3V0Zi04Jywgb2Zmc2V0LCBvZmZzZXQgKyBsZW4pXG4gICAgb2Zmc2V0ICs9IGxlblxuXG4gICAgZGVjb2RlLmJ5dGVzID0gb2Zmc2V0IC0gb2xkT2Zmc2V0XG4gICAgcmV0dXJuIHZhbFxuICB9XG5cbiAgcmV0dXJuIGVuY29kZXIoMiwgZW5jb2RlLCBkZWNvZGUsIGVuY29kaW5nTGVuZ3RoKVxufSkoKVxuXG5leHBvcnRzLmJvb2wgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgZW5jb2RpbmdMZW5ndGggPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHZhciBlbmNvZGUgPSBmdW5jdGlvbiAodmFsLCBidWZmZXIsIG9mZnNldCkge1xuICAgIGJ1ZmZlcltvZmZzZXRdID0gdmFsID8gMSA6IDBcbiAgICBlbmNvZGUuYnl0ZXMgPSAxXG4gICAgcmV0dXJuIGJ1ZmZlclxuICB9XG5cbiAgdmFyIGRlY29kZSA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCkge1xuICAgIHZhciBib29sID0gYnVmZmVyW29mZnNldF0gPiAwXG4gICAgZGVjb2RlLmJ5dGVzID0gMVxuICAgIHJldHVybiBib29sXG4gIH1cblxuICByZXR1cm4gZW5jb2RlcigwLCBlbmNvZGUsIGRlY29kZSwgZW5jb2RpbmdMZW5ndGgpXG59KSgpXG5cbmV4cG9ydHMuaW50MzIgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgZGVjb2RlID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gICAgdmFyIHZhbCA9IHZhcmludC5kZWNvZGUoYnVmZmVyLCBvZmZzZXQpXG4gICAgZGVjb2RlLmJ5dGVzID0gdmFyaW50LmRlY29kZS5ieXRlc1xuICAgIHJldHVybiB2YWwgPiAyMTQ3NDgzNjQ3ID8gdmFsIC0gNDI5NDk2NzI5NiA6IHZhbFxuICB9XG5cbiAgdmFyIGVuY29kZSA9IGZ1bmN0aW9uICh2YWwsIGJ1ZmZlciwgb2Zmc2V0KSB7XG4gICAgdmFyaW50LmVuY29kZSh2YWwgPCAwID8gdmFsICsgNDI5NDk2NzI5NiA6IHZhbCwgYnVmZmVyLCBvZmZzZXQpXG4gICAgZW5jb2RlLmJ5dGVzID0gdmFyaW50LmVuY29kZS5ieXRlc1xuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIHZhciBlbmNvZGluZ0xlbmd0aCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICByZXR1cm4gdmFyaW50LmVuY29kaW5nTGVuZ3RoKHZhbCA8IDAgPyB2YWwgKyA0Mjk0OTY3Mjk2IDogdmFsKVxuICB9XG5cbiAgcmV0dXJuIGVuY29kZXIoMCwgdmFyaW50LmVuY29kZSwgZGVjb2RlLCBlbmNvZGluZ0xlbmd0aClcbn0pKClcblxuZXhwb3J0cy5pbnQ2NCA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBkZWNvZGUgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgICB2YXIgdmFsID0gdmFyaW50LmRlY29kZShidWZmZXIsIG9mZnNldClcbiAgICBpZiAodmFsID49IE1hdGgucG93KDIsIDYzKSkge1xuICAgICAgdmFyIGxpbWl0ID0gOVxuICAgICAgd2hpbGUgKGJ1ZmZlcltvZmZzZXQgKyBsaW1pdCAtIDFdID09PSAweGZmKSBsaW1pdC0tXG4gICAgICBsaW1pdCA9IGxpbWl0IHx8IDlcbiAgICAgIHZhciBzdWJzZXQgPSBuZXcgQnVmZmVyKGxpbWl0KVxuICAgICAgYnVmZmVyLmNvcHkoc3Vic2V0LCAwLCBvZmZzZXQsIG9mZnNldCArIGxpbWl0KVxuICAgICAgc3Vic2V0W2xpbWl0IC0gMV0gPSBzdWJzZXRbbGltaXQgLSAxXSAmIDB4N2ZcbiAgICAgIHZhbCA9IC0xICogdmFyaW50LmRlY29kZShzdWJzZXQsIDApXG4gICAgICBkZWNvZGUuYnl0ZXMgPSAxMFxuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvZGUuYnl0ZXMgPSB2YXJpbnQuZGVjb2RlLmJ5dGVzXG4gICAgfVxuICAgIHJldHVybiB2YWxcbiAgfVxuXG4gIHZhciBlbmNvZGUgPSBmdW5jdGlvbiAodmFsLCBidWZmZXIsIG9mZnNldCkge1xuICAgIGlmICh2YWwgPCAwKSB7XG4gICAgICB2YXIgbGFzdCA9IG9mZnNldCArIDlcbiAgICAgIHZhcmludC5lbmNvZGUodmFsICogLTEsIGJ1ZmZlciwgb2Zmc2V0KVxuICAgICAgb2Zmc2V0ICs9IHZhcmludC5lbmNvZGUuYnl0ZXMgLSAxXG4gICAgICBidWZmZXJbb2Zmc2V0XSA9IGJ1ZmZlcltvZmZzZXRdIHwgMHg4MFxuICAgICAgd2hpbGUgKG9mZnNldCA8IGxhc3QgLSAxKSB7XG4gICAgICAgIG9mZnNldCsrXG4gICAgICAgIGJ1ZmZlcltvZmZzZXRdID0gMHhmZlxuICAgICAgfVxuICAgICAgYnVmZmVyW2xhc3RdID0gMHgwMVxuICAgICAgZW5jb2RlLmJ5dGVzID0gMTBcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyaW50LmVuY29kZSh2YWwsIGJ1ZmZlciwgb2Zmc2V0KVxuICAgICAgZW5jb2RlLmJ5dGVzID0gdmFyaW50LmVuY29kZS5ieXRlc1xuICAgIH1cbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cblxuICB2YXIgZW5jb2RpbmdMZW5ndGggPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuIHZhbCA8IDAgPyAxMCA6IHZhcmludC5lbmNvZGluZ0xlbmd0aCh2YWwpXG4gIH1cblxuICByZXR1cm4gZW5jb2RlcigwLCBlbmNvZGUsIGRlY29kZSwgZW5jb2RpbmdMZW5ndGgpXG59KSgpXG5cbmV4cG9ydHMuc2ludDMyID1cbmV4cG9ydHMuc2ludDY0ID0gKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGVuY29kZXIoMCwgc3ZhcmludC5lbmNvZGUsIHN2YXJpbnQuZGVjb2RlLCBzdmFyaW50LmVuY29kaW5nTGVuZ3RoKVxufSkoKVxuXG5leHBvcnRzLnVpbnQzMiA9XG5leHBvcnRzLnVpbnQ2NCA9XG5leHBvcnRzLmVudW0gPVxuZXhwb3J0cy52YXJpbnQgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZW5jb2RlcigwLCB2YXJpbnQuZW5jb2RlLCB2YXJpbnQuZGVjb2RlLCB2YXJpbnQuZW5jb2RpbmdMZW5ndGgpXG59KSgpXG5cbi8vIHdlIGNhbm5vdCByZXByZXNlbnQgdGhlc2UgaW4gamF2YXNjcmlwdCBzbyB3ZSBqdXN0IHVzZSBidWZmZXJzXG5leHBvcnRzLmZpeGVkNjQgPVxuZXhwb3J0cy5zZml4ZWQ2NCA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBlbmNvZGluZ0xlbmd0aCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICByZXR1cm4gOFxuICB9XG5cbiAgdmFyIGVuY29kZSA9IGZ1bmN0aW9uICh2YWwsIGJ1ZmZlciwgb2Zmc2V0KSB7XG4gICAgdmFsLmNvcHkoYnVmZmVyLCBvZmZzZXQpXG4gICAgZW5jb2RlLmJ5dGVzID0gOFxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIHZhciBkZWNvZGUgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgICB2YXIgdmFsID0gYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgOClcbiAgICBkZWNvZGUuYnl0ZXMgPSA4XG4gICAgcmV0dXJuIHZhbFxuICB9XG5cbiAgcmV0dXJuIGVuY29kZXIoMSwgZW5jb2RlLCBkZWNvZGUsIGVuY29kaW5nTGVuZ3RoKVxufSkoKVxuXG5leHBvcnRzLmRvdWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBlbmNvZGluZ0xlbmd0aCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICByZXR1cm4gOFxuICB9XG5cbiAgdmFyIGVuY29kZSA9IGZ1bmN0aW9uICh2YWwsIGJ1ZmZlciwgb2Zmc2V0KSB7XG4gICAgYnVmZmVyLndyaXRlRG91YmxlTEUodmFsLCBvZmZzZXQpXG4gICAgZW5jb2RlLmJ5dGVzID0gOFxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIHZhciBkZWNvZGUgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgICB2YXIgdmFsID0gYnVmZmVyLnJlYWREb3VibGVMRShvZmZzZXQpXG4gICAgZGVjb2RlLmJ5dGVzID0gOFxuICAgIHJldHVybiB2YWxcbiAgfVxuXG4gIHJldHVybiBlbmNvZGVyKDEsIGVuY29kZSwgZGVjb2RlLCBlbmNvZGluZ0xlbmd0aClcbn0pKClcblxuZXhwb3J0cy5maXhlZDMyID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVuY29kaW5nTGVuZ3RoID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHJldHVybiA0XG4gIH1cblxuICB2YXIgZW5jb2RlID0gZnVuY3Rpb24gKHZhbCwgYnVmZmVyLCBvZmZzZXQpIHtcbiAgICBidWZmZXIud3JpdGVVSW50MzJMRSh2YWwsIG9mZnNldClcbiAgICBlbmNvZGUuYnl0ZXMgPSA0XG4gICAgcmV0dXJuIGJ1ZmZlclxuICB9XG5cbiAgdmFyIGRlY29kZSA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCkge1xuICAgIHZhciB2YWwgPSBidWZmZXIucmVhZFVJbnQzMkxFKG9mZnNldClcbiAgICBkZWNvZGUuYnl0ZXMgPSA0XG4gICAgcmV0dXJuIHZhbFxuICB9XG5cbiAgcmV0dXJuIGVuY29kZXIoNSwgZW5jb2RlLCBkZWNvZGUsIGVuY29kaW5nTGVuZ3RoKVxufSkoKVxuXG5leHBvcnRzLnNmaXhlZDMyID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVuY29kaW5nTGVuZ3RoID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHJldHVybiA0XG4gIH1cblxuICB2YXIgZW5jb2RlID0gZnVuY3Rpb24gKHZhbCwgYnVmZmVyLCBvZmZzZXQpIHtcbiAgICBidWZmZXIud3JpdGVJbnQzMkxFKHZhbCwgb2Zmc2V0KVxuICAgIGVuY29kZS5ieXRlcyA9IDRcbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cblxuICB2YXIgZGVjb2RlID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gICAgdmFyIHZhbCA9IGJ1ZmZlci5yZWFkSW50MzJMRShvZmZzZXQpXG4gICAgZGVjb2RlLmJ5dGVzID0gNFxuICAgIHJldHVybiB2YWxcbiAgfVxuXG4gIHJldHVybiBlbmNvZGVyKDUsIGVuY29kZSwgZGVjb2RlLCBlbmNvZGluZ0xlbmd0aClcbn0pKClcblxuZXhwb3J0cy5mbG9hdCA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBlbmNvZGluZ0xlbmd0aCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICByZXR1cm4gNFxuICB9XG5cbiAgdmFyIGVuY29kZSA9IGZ1bmN0aW9uICh2YWwsIGJ1ZmZlciwgb2Zmc2V0KSB7XG4gICAgYnVmZmVyLndyaXRlRmxvYXRMRSh2YWwsIG9mZnNldClcbiAgICBlbmNvZGUuYnl0ZXMgPSA0XG4gICAgcmV0dXJuIGJ1ZmZlclxuICB9XG5cbiAgdmFyIGRlY29kZSA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCkge1xuICAgIHZhciB2YWwgPSBidWZmZXIucmVhZEZsb2F0TEUob2Zmc2V0KVxuICAgIGRlY29kZS5ieXRlcyA9IDRcbiAgICByZXR1cm4gdmFsXG4gIH1cblxuICByZXR1cm4gZW5jb2Rlcig1LCBlbmNvZGUsIGRlY29kZSwgZW5jb2RpbmdMZW5ndGgpXG59KSgpXG4iLCJ2YXIgc2NoZW1hID0gcmVxdWlyZSgncHJvdG9jb2wtYnVmZmVycy1zY2hlbWEnKVxudmFyIGNvbXBpbGUgPSByZXF1aXJlKCcuL2NvbXBpbGUnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwcm90bywgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuICBpZiAoIXByb3RvKSB0aHJvdyBuZXcgRXJyb3IoJ1Bhc3MgaW4gYSAucHJvdG8gc3RyaW5nIG9yIGEgcHJvdG9idWYtc2NoZW1hIHBhcnNlZCBvYmplY3QnKVxuXG4gIHZhciBzY2ggPSAodHlwZW9mIHByb3RvID09PSAnb2JqZWN0JyAmJiAhQnVmZmVyLmlzQnVmZmVyKHByb3RvKSkgPyBwcm90byA6IHNjaGVtYS5wYXJzZShwcm90bylcblxuICAvLyB0byBub3QgbWFrZSB0b1N0cmluZyx0b0pTT04gZW51bWFyYWJsZSB3ZSBtYWtlIGEgZmlyZS1hbmQtZm9yZ2V0IHByb3RvdHlwZVxuICB2YXIgTWVzc2FnZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgICBjb21waWxlKHNjaCwgb3B0cy5lbmNvZGluZ3MgfHwge30pLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICAgIHNlbGZbbS5uYW1lXSA9IG0udmFsdWVzIHx8IG1cbiAgICB9KVxuICB9XG5cbiAgTWVzc2FnZXMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzY2hlbWEuc3RyaW5naWZ5KHNjaClcbiAgfVxuXG4gIE1lc3NhZ2VzLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNjaFxuICB9XG5cbiAgcmV0dXJuIG5ldyBNZXNzYWdlcygpXG59XG4iLCJ2YXIgb25jZSA9IHJlcXVpcmUoJ29uY2UnKVxudmFyIGVvcyA9IHJlcXVpcmUoJ2VuZC1vZi1zdHJlYW0nKVxudmFyIGZzID0gcmVxdWlyZSgnZnMnKSAvLyB3ZSBvbmx5IG5lZWQgZnMgdG8gZ2V0IHRoZSBSZWFkU3RyZWFtIGFuZCBXcml0ZVN0cmVhbSBwcm90b3R5cGVzXG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkge31cblxudmFyIGlzRm4gPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG52YXIgaXNGUyA9IGZ1bmN0aW9uIChzdHJlYW0pIHtcbiAgcmV0dXJuIChzdHJlYW0gaW5zdGFuY2VvZiAoZnMuUmVhZFN0cmVhbSB8fCBub29wKSB8fCBzdHJlYW0gaW5zdGFuY2VvZiAoZnMuV3JpdGVTdHJlYW0gfHwgbm9vcCkpICYmIGlzRm4oc3RyZWFtLmNsb3NlKVxufVxuXG52YXIgaXNSZXF1ZXN0ID0gZnVuY3Rpb24gKHN0cmVhbSkge1xuICByZXR1cm4gc3RyZWFtLnNldEhlYWRlciAmJiBpc0ZuKHN0cmVhbS5hYm9ydClcbn1cblxudmFyIGRlc3Ryb3llciA9IGZ1bmN0aW9uIChzdHJlYW0sIHJlYWRpbmcsIHdyaXRpbmcsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gb25jZShjYWxsYmFjaylcblxuICB2YXIgY2xvc2VkID0gZmFsc2VcbiAgc3RyZWFtLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjbG9zZWQgPSB0cnVlXG4gIH0pXG5cbiAgZW9zKHN0cmVhbSwge3JlYWRhYmxlOiByZWFkaW5nLCB3cml0YWJsZTogd3JpdGluZ30sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGNsb3NlZCA9IHRydWVcbiAgICBjYWxsYmFjaygpXG4gIH0pXG5cbiAgdmFyIGRlc3Ryb3llZCA9IGZhbHNlXG4gIHJldHVybiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGNsb3NlZCkgcmV0dXJuXG4gICAgaWYgKGRlc3Ryb3llZCkgcmV0dXJuXG4gICAgZGVzdHJveWVkID0gdHJ1ZVxuXG4gICAgaWYgKGlzRlMoc3RyZWFtKSkgcmV0dXJuIHN0cmVhbS5jbG9zZSgpIC8vIHVzZSBjbG9zZSBmb3IgZnMgc3RyZWFtcyB0byBhdm9pZCBmZCBsZWFrc1xuICAgIGlmIChpc1JlcXVlc3Qoc3RyZWFtKSkgcmV0dXJuIHN0cmVhbS5hYm9ydCgpIC8vIHJlcXVlc3QuZGVzdHJveSBqdXN0IGRvIC5lbmQgLSAuYWJvcnQgaXMgd2hhdCB3ZSB3YW50XG5cbiAgICBpZiAoaXNGbihzdHJlYW0uZGVzdHJveSkpIHJldHVybiBzdHJlYW0uZGVzdHJveSgpXG5cbiAgICBjYWxsYmFjayhlcnIgfHwgbmV3IEVycm9yKCdzdHJlYW0gd2FzIGRlc3Ryb3llZCcpKVxuICB9XG59XG5cbnZhciBjYWxsID0gZnVuY3Rpb24gKGZuKSB7XG4gIGZuKClcbn1cblxudmFyIHBpcGUgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcbiAgcmV0dXJuIGZyb20ucGlwZSh0bylcbn1cblxudmFyIHB1bXAgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdHJlYW1zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKVxuICB2YXIgY2FsbGJhY2sgPSBpc0ZuKHN0cmVhbXNbc3RyZWFtcy5sZW5ndGggLSAxXSB8fCBub29wKSAmJiBzdHJlYW1zLnBvcCgpIHx8IG5vb3BcblxuICBpZiAoQXJyYXkuaXNBcnJheShzdHJlYW1zWzBdKSkgc3RyZWFtcyA9IHN0cmVhbXNbMF1cbiAgaWYgKHN0cmVhbXMubGVuZ3RoIDwgMikgdGhyb3cgbmV3IEVycm9yKCdwdW1wIHJlcXVpcmVzIHR3byBzdHJlYW1zIHBlciBtaW5pbXVtJylcblxuICB2YXIgZXJyb3JcbiAgdmFyIGRlc3Ryb3lzID0gc3RyZWFtcy5tYXAoZnVuY3Rpb24gKHN0cmVhbSwgaSkge1xuICAgIHZhciByZWFkaW5nID0gaSA8IHN0cmVhbXMubGVuZ3RoIC0gMVxuICAgIHZhciB3cml0aW5nID0gaSA+IDBcbiAgICByZXR1cm4gZGVzdHJveWVyKHN0cmVhbSwgcmVhZGluZywgd3JpdGluZywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKCFlcnJvcikgZXJyb3IgPSBlcnJcbiAgICAgIGlmIChlcnIpIGRlc3Ryb3lzLmZvckVhY2goY2FsbClcbiAgICAgIGlmIChyZWFkaW5nKSByZXR1cm5cbiAgICAgIGRlc3Ryb3lzLmZvckVhY2goY2FsbClcbiAgICAgIGNhbGxiYWNrKGVycm9yKVxuICAgIH0pXG4gIH0pXG5cbiAgcmV0dXJuIHN0cmVhbXMucmVkdWNlKHBpcGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcHVtcFxuIiwidmFyIG5vdyA9IHJlcXVpcmUoJ3BlcmZvcm1hbmNlLW5vdycpXG4gICwgZ2xvYmFsID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyB7fSA6IHdpbmRvd1xuICAsIHZlbmRvcnMgPSBbJ21veicsICd3ZWJraXQnXVxuICAsIHN1ZmZpeCA9ICdBbmltYXRpb25GcmFtZSdcbiAgLCByYWYgPSBnbG9iYWxbJ3JlcXVlc3QnICsgc3VmZml4XVxuICAsIGNhZiA9IGdsb2JhbFsnY2FuY2VsJyArIHN1ZmZpeF0gfHwgZ2xvYmFsWydjYW5jZWxSZXF1ZXN0JyArIHN1ZmZpeF1cbiAgLCBpc05hdGl2ZSA9IHRydWVcblxuZm9yKHZhciBpID0gMDsgaSA8IHZlbmRvcnMubGVuZ3RoICYmICFyYWY7IGkrKykge1xuICByYWYgPSBnbG9iYWxbdmVuZG9yc1tpXSArICdSZXF1ZXN0JyArIHN1ZmZpeF1cbiAgY2FmID0gZ2xvYmFsW3ZlbmRvcnNbaV0gKyAnQ2FuY2VsJyArIHN1ZmZpeF1cbiAgICAgIHx8IGdsb2JhbFt2ZW5kb3JzW2ldICsgJ0NhbmNlbFJlcXVlc3QnICsgc3VmZml4XVxufVxuXG4vLyBTb21lIHZlcnNpb25zIG9mIEZGIGhhdmUgckFGIGJ1dCBub3QgY0FGXG5pZighcmFmIHx8ICFjYWYpIHtcbiAgaXNOYXRpdmUgPSBmYWxzZVxuXG4gIHZhciBsYXN0ID0gMFxuICAgICwgaWQgPSAwXG4gICAgLCBxdWV1ZSA9IFtdXG4gICAgLCBmcmFtZUR1cmF0aW9uID0gMTAwMCAvIDYwXG5cbiAgcmFmID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICBpZihxdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHZhciBfbm93ID0gbm93KClcbiAgICAgICAgLCBuZXh0ID0gTWF0aC5tYXgoMCwgZnJhbWVEdXJhdGlvbiAtIChfbm93IC0gbGFzdCkpXG4gICAgICBsYXN0ID0gbmV4dCArIF9ub3dcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjcCA9IHF1ZXVlLnNsaWNlKDApXG4gICAgICAgIC8vIENsZWFyIHF1ZXVlIGhlcmUgdG8gcHJldmVudFxuICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBhcHBlbmRpbmcgbGlzdGVuZXJzXG4gICAgICAgIC8vIHRvIHRoZSBjdXJyZW50IGZyYW1lJ3MgcXVldWVcbiAgICAgICAgcXVldWUubGVuZ3RoID0gMFxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgY3AubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZighY3BbaV0uY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgIGNwW2ldLmNhbGxiYWNrKGxhc3QpXG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgdGhyb3cgZSB9LCAwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgTWF0aC5yb3VuZChuZXh0KSlcbiAgICB9XG4gICAgcXVldWUucHVzaCh7XG4gICAgICBoYW5kbGU6ICsraWQsXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgICBjYW5jZWxsZWQ6IGZhbHNlXG4gICAgfSlcbiAgICByZXR1cm4gaWRcbiAgfVxuXG4gIGNhZiA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYocXVldWVbaV0uaGFuZGxlID09PSBoYW5kbGUpIHtcbiAgICAgICAgcXVldWVbaV0uY2FuY2VsbGVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuKSB7XG4gIC8vIFdyYXAgaW4gYSBuZXcgZnVuY3Rpb24gdG8gcHJldmVudFxuICAvLyBgY2FuY2VsYCBwb3RlbnRpYWxseSBiZWluZyBhc3NpZ25lZFxuICAvLyB0byB0aGUgbmF0aXZlIHJBRiBmdW5jdGlvblxuICBpZighaXNOYXRpdmUpIHtcbiAgICByZXR1cm4gcmFmLmNhbGwoZ2xvYmFsLCBmbilcbiAgfVxuICByZXR1cm4gcmFmLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbigpIHtcbiAgICB0cnl7XG4gICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0aHJvdyBlIH0sIDApXG4gICAgfVxuICB9KVxufVxubW9kdWxlLmV4cG9ydHMuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gIGNhZi5hcHBseShnbG9iYWwsIGFyZ3VtZW50cylcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIGR1cGxleCBzdHJlYW0gaXMganVzdCBhIHN0cmVhbSB0aGF0IGlzIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLlxuLy8gU2luY2UgSlMgZG9lc24ndCBoYXZlIG11bHRpcGxlIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UsIHRoaXMgY2xhc3Ncbi8vIHByb3RvdHlwYWxseSBpbmhlcml0cyBmcm9tIFJlYWRhYmxlLCBhbmQgdGhlbiBwYXJhc2l0aWNhbGx5IGZyb21cbi8vIFdyaXRhYmxlLlxuXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleDtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgcmV0dXJuIGtleXM7XG59XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV9yZWFkYWJsZScpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3dyaXRhYmxlJyk7XG5cbnV0aWwuaW5oZXJpdHMoRHVwbGV4LCBSZWFkYWJsZSk7XG5cbmZvckVhY2gob2JqZWN0S2V5cyhXcml0YWJsZS5wcm90b3R5cGUpLCBmdW5jdGlvbihtZXRob2QpIHtcbiAgaWYgKCFEdXBsZXgucHJvdG90eXBlW21ldGhvZF0pXG4gICAgRHVwbGV4LnByb3RvdHlwZVttZXRob2RdID0gV3JpdGFibGUucHJvdG90eXBlW21ldGhvZF07XG59KTtcblxuZnVuY3Rpb24gRHVwbGV4KG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpXG4gICAgcmV0dXJuIG5ldyBEdXBsZXgob3B0aW9ucyk7XG5cbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlYWRhYmxlID09PSBmYWxzZSlcbiAgICB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy53cml0YWJsZSA9PT0gZmFsc2UpXG4gICAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuXG4gIHRoaXMuYWxsb3dIYWxmT3BlbiA9IHRydWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuYWxsb3dIYWxmT3BlbiA9PT0gZmFsc2UpXG4gICAgdGhpcy5hbGxvd0hhbGZPcGVuID0gZmFsc2U7XG5cbiAgdGhpcy5vbmNlKCdlbmQnLCBvbmVuZCk7XG59XG5cbi8vIHRoZSBuby1oYWxmLW9wZW4gZW5mb3JjZXJcbmZ1bmN0aW9uIG9uZW5kKCkge1xuICAvLyBpZiB3ZSBhbGxvdyBoYWxmLW9wZW4gc3RhdGUsIG9yIGlmIHRoZSB3cml0YWJsZSBzaWRlIGVuZGVkLFxuICAvLyB0aGVuIHdlJ3JlIG9rLlxuICBpZiAodGhpcy5hbGxvd0hhbGZPcGVuIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQpXG4gICAgcmV0dXJuO1xuXG4gIC8vIG5vIG1vcmUgZGF0YSBjYW4gYmUgd3JpdHRlbi5cbiAgLy8gQnV0IGFsbG93IG1vcmUgd3JpdGVzIHRvIGhhcHBlbiBpbiB0aGlzIHRpY2suXG4gIHByb2Nlc3MubmV4dFRpY2sodGhpcy5lbmQuYmluZCh0aGlzKSk7XG59XG5cbmZ1bmN0aW9uIGZvckVhY2ggKHhzLCBmKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZih4c1tpXSwgaSk7XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHBhc3N0aHJvdWdoIHN0cmVhbS5cbi8vIGJhc2ljYWxseSBqdXN0IHRoZSBtb3N0IG1pbmltYWwgc29ydCBvZiBUcmFuc2Zvcm0gc3RyZWFtLlxuLy8gRXZlcnkgd3JpdHRlbiBjaHVuayBnZXRzIG91dHB1dCBhcy1pcy5cblxubW9kdWxlLmV4cG9ydHMgPSBQYXNzVGhyb3VnaDtcblxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vX3N0cmVhbV90cmFuc2Zvcm0nKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFBhc3NUaHJvdWdoLCBUcmFuc2Zvcm0pO1xuXG5mdW5jdGlvbiBQYXNzVGhyb3VnaChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXNzVGhyb3VnaCkpXG4gICAgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaChvcHRpb25zKTtcblxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblxuUGFzc1Rocm91Z2gucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG51bGwsIGNodW5rKTtcbn07XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFkYWJsZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuUmVhZGFibGUuUmVhZGFibGVTdGF0ZSA9IFJlYWRhYmxlU3RhdGU7XG5cbnZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbmlmICghRUUubGlzdGVuZXJDb3VudCkgRUUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJzKHR5cGUpLmxlbmd0aDtcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBTdHJpbmdEZWNvZGVyO1xuXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgZGVidWcgPSByZXF1aXJlKCd1dGlsJyk7XG5pZiAoZGVidWcgJiYgZGVidWcuZGVidWdsb2cpIHtcbiAgZGVidWcgPSBkZWJ1Zy5kZWJ1Z2xvZygnc3RyZWFtJyk7XG59IGVsc2Uge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uICgpIHt9O1xufVxuLyo8L3JlcGxhY2VtZW50PiovXG5cblxudXRpbC5pbmhlcml0cyhSZWFkYWJsZSwgU3RyZWFtKTtcblxuZnVuY3Rpb24gUmVhZGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgdmFyIER1cGxleCA9IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciBkZWZhdWx0SHdtID0gb3B0aW9ucy5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IChod20gfHwgaHdtID09PSAwKSA/IGh3bSA6IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSB+fnRoaXMuaGlnaFdhdGVyTWFyaztcblxuICB0aGlzLmJ1ZmZlciA9IFtdO1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIHRoaXMucGlwZXMgPSBudWxsO1xuICB0aGlzLnBpcGVzQ291bnQgPSAwO1xuICB0aGlzLmZsb3dpbmcgPSBudWxsO1xuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIHRoaXMuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyB3aGVuZXZlciB3ZSByZXR1cm4gbnVsbCwgdGhlbiB3ZSBzZXQgYSBmbGFnIHRvIHNheVxuICAvLyB0aGF0IHdlJ3JlIGF3YWl0aW5nIGEgJ3JlYWRhYmxlJyBldmVudCBlbWlzc2lvbi5cbiAgdGhpcy5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZUxpc3RlbmluZyA9IGZhbHNlO1xuXG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleClcbiAgICB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyB3aGVuIHBpcGluZywgd2Ugb25seSBjYXJlIGFib3V0ICdyZWFkYWJsZScgZXZlbnRzIHRoYXQgaGFwcGVuXG4gIC8vIGFmdGVyIHJlYWQoKWluZyBhbGwgdGhlIGJ5dGVzIGFuZCBub3QgZ2V0dGluZyBhbnkgcHVzaGJhY2suXG4gIHRoaXMucmFuT3V0ID0gZmFsc2U7XG5cbiAgLy8gdGhlIG51bWJlciBvZiB3cml0ZXJzIHRoYXQgYXJlIGF3YWl0aW5nIGEgZHJhaW4gZXZlbnQgaW4gLnBpcGUoKXNcbiAgdGhpcy5hd2FpdERyYWluID0gMDtcblxuICAvLyBpZiB0cnVlLCBhIG1heWJlUmVhZE1vcmUgaGFzIGJlZW4gc2NoZWR1bGVkXG4gIHRoaXMucmVhZGluZ01vcmUgPSBmYWxzZTtcblxuICB0aGlzLmRlY29kZXIgPSBudWxsO1xuICB0aGlzLmVuY29kaW5nID0gbnVsbDtcbiAgaWYgKG9wdGlvbnMuZW5jb2RpbmcpIHtcbiAgICBpZiAoIVN0cmluZ0RlY29kZXIpXG4gICAgICBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKTtcbiAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7XG4gIHZhciBEdXBsZXggPSByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSlcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlKG9wdGlvbnMpO1xuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBuZXcgUmVhZGFibGVTdGF0ZShvcHRpb25zLCB0aGlzKTtcblxuICAvLyBsZWdhY3lcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG5cbiAgU3RyZWFtLmNhbGwodGhpcyk7XG59XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgaWYgKHV0aWwuaXNTdHJpbmcoY2h1bmspICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZW5jb2RpbmcgPSBlbmNvZGluZyB8fCBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgaWYgKGVuY29kaW5nICE9PSBzdGF0ZS5lbmNvZGluZykge1xuICAgICAgY2h1bmsgPSBuZXcgQnVmZmVyKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICBlbmNvZGluZyA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGZhbHNlKTtcbn07XG5cbi8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpXG5SZWFkYWJsZS5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uKGNodW5rKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgJycsIHRydWUpO1xufTtcblxuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQpIHtcbiAgdmFyIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG4gIGlmIChlcikge1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfSBlbHNlIGlmICh1dGlsLmlzTnVsbE9yVW5kZWZpbmVkKGNodW5rKSkge1xuICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICBpZiAoIXN0YXRlLmVuZGVkKVxuICAgICAgb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKTtcbiAgfSBlbHNlIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoc3RhdGUuZW5kZWQgJiYgIWFkZFRvRnJvbnQpIHtcbiAgICAgIHZhciBlID0gbmV3IEVycm9yKCdzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRicpO1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZSk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5lbmRFbWl0dGVkICYmIGFkZFRvRnJvbnQpIHtcbiAgICAgIHZhciBlID0gbmV3IEVycm9yKCdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcpO1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFhZGRUb0Zyb250ICYmICFlbmNvZGluZylcbiAgICAgICAgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcblxuICAgICAgaWYgKCFhZGRUb0Zyb250KVxuICAgICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG5cbiAgICAgIC8vIGlmIHdlIHdhbnQgdGhlIGRhdGEgbm93LCBqdXN0IGVtaXQgaXQuXG4gICAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLnN5bmMpIHtcbiAgICAgICAgc3RyZWFtLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIHN0cmVhbS5yZWFkKDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXBkYXRlIHRoZSBidWZmZXIgaW5mby5cbiAgICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgICAgICBpZiAoYWRkVG9Gcm9udClcbiAgICAgICAgICBzdGF0ZS5idWZmZXIudW5zaGlmdChjaHVuayk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG5cbiAgICAgICAgaWYgKHN0YXRlLm5lZWRSZWFkYWJsZSlcbiAgICAgICAgICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbiAgICAgIH1cblxuICAgICAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIWFkZFRvRnJvbnQpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gbmVlZE1vcmVEYXRhKHN0YXRlKTtcbn1cblxuXG5cbi8vIGlmIGl0J3MgcGFzdCB0aGUgaGlnaCB3YXRlciBtYXJrLCB3ZSBjYW4gcHVzaCBpbiBzb21lIG1vcmUuXG4vLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZVxuLy8gbW9yZSBieXRlcy4gIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsXG4vLyBzdWNoIGFzIHRoZSByZXBsLiAgQWxzbywgaWYgdGhlIHB1c2goKSB0cmlnZ2VyZWQgYVxuLy8gcmVhZGFibGUgZXZlbnQsIGFuZCB0aGUgdXNlciBjYWxsZWQgcmVhZChsYXJnZU51bWJlcikgc3VjaCB0aGF0XG4vLyBuZWVkUmVhZGFibGUgd2FzIHNldCwgdGhlbiB3ZSBvdWdodCB0byBwdXNoIG1vcmUsIHNvIHRoYXQgYW5vdGhlclxuLy8gJ3JlYWRhYmxlJyBldmVudCB3aWxsIGJlIHRyaWdnZXJlZC5cbmZ1bmN0aW9uIG5lZWRNb3JlRGF0YShzdGF0ZSkge1xuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmXG4gICAgICAgICAoc3RhdGUubmVlZFJlYWRhYmxlIHx8XG4gICAgICAgICAgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fFxuICAgICAgICAgIHN0YXRlLmxlbmd0aCA9PT0gMCk7XG59XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oZW5jKSB7XG4gIGlmICghU3RyaW5nRGVjb2RlcilcbiAgICBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoZW5jKTtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IGVuYztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBEb24ndCByYWlzZSB0aGUgaHdtID4gMTI4TUJcbnZhciBNQVhfSFdNID0gMHg4MDAwMDA7XG5mdW5jdGlvbiByb3VuZFVwVG9OZXh0UG93ZXJPZjIobikge1xuICBpZiAobiA+PSBNQVhfSFdNKSB7XG4gICAgbiA9IE1BWF9IV007XG4gIH0gZWxzZSB7XG4gICAgLy8gR2V0IHRoZSBuZXh0IGhpZ2hlc3QgcG93ZXIgb2YgMlxuICAgIG4tLTtcbiAgICBmb3IgKHZhciBwID0gMTsgcCA8IDMyOyBwIDw8PSAxKSBuIHw9IG4gPj4gcDtcbiAgICBuKys7XG4gIH1cbiAgcmV0dXJuIG47XG59XG5cbmZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobiwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZClcbiAgICByZXR1cm4gMDtcblxuICBpZiAoc3RhdGUub2JqZWN0TW9kZSlcbiAgICByZXR1cm4gbiA9PT0gMCA/IDAgOiAxO1xuXG4gIGlmIChpc05hTihuKSB8fCB1dGlsLmlzTnVsbChuKSkge1xuICAgIC8vIG9ubHkgZmxvdyBvbmUgYnVmZmVyIGF0IGEgdGltZVxuICAgIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmJ1ZmZlci5sZW5ndGgpXG4gICAgICByZXR1cm4gc3RhdGUuYnVmZmVyWzBdLmxlbmd0aDtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICB9XG5cbiAgaWYgKG4gPD0gMClcbiAgICByZXR1cm4gMDtcblxuICAvLyBJZiB3ZSdyZSBhc2tpbmcgZm9yIG1vcmUgdGhhbiB0aGUgdGFyZ2V0IGJ1ZmZlciBsZXZlbCxcbiAgLy8gdGhlbiByYWlzZSB0aGUgd2F0ZXIgbWFyay4gIEJ1bXAgdXAgdG8gdGhlIG5leHQgaGlnaGVzdFxuICAvLyBwb3dlciBvZiAyLCB0byBwcmV2ZW50IGluY3JlYXNpbmcgaXQgZXhjZXNzaXZlbHkgaW4gdGlueVxuICAvLyBhbW91bnRzLlxuICBpZiAobiA+IHN0YXRlLmhpZ2hXYXRlck1hcmspXG4gICAgc3RhdGUuaGlnaFdhdGVyTWFyayA9IHJvdW5kVXBUb05leHRQb3dlck9mMihuKTtcblxuICAvLyBkb24ndCBoYXZlIHRoYXQgbXVjaC4gIHJldHVybiBudWxsLCB1bmxlc3Mgd2UndmUgZW5kZWQuXG4gIGlmIChuID4gc3RhdGUubGVuZ3RoKSB7XG4gICAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBuO1xufVxuXG4vLyB5b3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihuKSB7XG4gIGRlYnVnKCdyZWFkJywgbik7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBuT3JpZyA9IG47XG5cbiAgaWYgKCF1dGlsLmlzTnVtYmVyKG4pIHx8IG4gPiAwKVxuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuXG4gIC8vIGlmIHdlJ3JlIGRvaW5nIHJlYWQoMCkgdG8gdHJpZ2dlciBhIHJlYWRhYmxlIGV2ZW50LCBidXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGEgYnVuY2ggb2YgZGF0YSBpbiB0aGUgYnVmZmVyLCB0aGVuIGp1c3QgdHJpZ2dlclxuICAvLyB0aGUgJ3JlYWRhYmxlJyBldmVudCBhbmQgbW92ZSBvbi5cbiAgaWYgKG4gPT09IDAgJiZcbiAgICAgIHN0YXRlLm5lZWRSZWFkYWJsZSAmJlxuICAgICAgKHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmVuZGVkKSkge1xuICAgIGRlYnVnKCdyZWFkOiBlbWl0UmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKTtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKVxuICAgICAgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgZWxzZVxuICAgICAgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbiA9IGhvd011Y2hUb1JlYWQobiwgc3RhdGUpO1xuXG4gIC8vIGlmIHdlJ3ZlIGVuZGVkLCBhbmQgd2UncmUgbm93IGNsZWFyLCB0aGVuIGZpbmlzaCBpdCB1cC5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUuZW5kZWQpIHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKVxuICAgICAgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgdmFyIGRvUmVhZCA9IHN0YXRlLm5lZWRSZWFkYWJsZTtcbiAgZGVidWcoJ25lZWQgcmVhZGFibGUnLCBkb1JlYWQpO1xuXG4gIC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwIHx8IHN0YXRlLmxlbmd0aCAtIG4gPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZG9SZWFkID0gdHJ1ZTtcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpO1xuICB9XG5cbiAgLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZykge1xuICAgIGRvUmVhZCA9IGZhbHNlO1xuICAgIGRlYnVnKCdyZWFkaW5nIG9yIGVuZGVkJywgZG9SZWFkKTtcbiAgfVxuXG4gIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpO1xuICAgIHN0YXRlLnJlYWRpbmcgPSB0cnVlO1xuICAgIHN0YXRlLnN5bmMgPSB0cnVlO1xuICAgIC8vIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMClcbiAgICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgLy8gY2FsbCBpbnRlcm5hbCByZWFkIG1ldGhvZFxuICAgIHRoaXMuX3JlYWQoc3RhdGUuaGlnaFdhdGVyTWFyayk7XG4gICAgc3RhdGUuc3luYyA9IGZhbHNlO1xuICB9XG5cbiAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgLy8gYW5kIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IG11Y2ggZGF0YSB3ZSBjYW4gcmV0dXJuIHRvIHRoZSB1c2VyLlxuICBpZiAoZG9SZWFkICYmICFzdGF0ZS5yZWFkaW5nKVxuICAgIG4gPSBob3dNdWNoVG9SZWFkKG5PcmlnLCBzdGF0ZSk7XG5cbiAgdmFyIHJldDtcbiAgaWYgKG4gPiAwKVxuICAgIHJldCA9IGZyb21MaXN0KG4sIHN0YXRlKTtcbiAgZWxzZVxuICAgIHJldCA9IG51bGw7XG5cbiAgaWYgKHV0aWwuaXNOdWxsKHJldCkpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIG4gPSAwO1xuICB9XG5cbiAgc3RhdGUubGVuZ3RoIC09IG47XG5cbiAgLy8gSWYgd2UgaGF2ZSBub3RoaW5nIGluIHRoZSBidWZmZXIsIHRoZW4gd2Ugd2FudCB0byBrbm93XG4gIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuZW5kZWQpXG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyBJZiB3ZSB0cmllZCB0byByZWFkKCkgcGFzdCB0aGUgRU9GLCB0aGVuIGVtaXQgZW5kIG9uIHRoZSBuZXh0IHRpY2suXG4gIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApXG4gICAgZW5kUmVhZGFibGUodGhpcyk7XG5cbiAgaWYgKCF1dGlsLmlzTnVsbChyZXQpKVxuICAgIHRoaXMuZW1pdCgnZGF0YScsIHJldCk7XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIGNodW5rSW52YWxpZChzdGF0ZSwgY2h1bmspIHtcbiAgdmFyIGVyID0gbnVsbDtcbiAgaWYgKCF1dGlsLmlzQnVmZmVyKGNodW5rKSAmJlxuICAgICAgIXV0aWwuaXNTdHJpbmcoY2h1bmspICYmXG4gICAgICAhdXRpbC5pc051bGxPclVuZGVmaW5lZChjaHVuaykgJiZcbiAgICAgICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgcmV0dXJuIGVyO1xufVxuXG5cbmZ1bmN0aW9uIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuXG4gIC8vIGVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBpZiAoc3RhdGUuc3luYylcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZV8oc3RyZWFtKTtcbiAgICAgIH0pO1xuICAgIGVsc2VcbiAgICAgIGVtaXRSZWFkYWJsZV8oc3RyZWFtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGVfKHN0cmVhbSkge1xuICBkZWJ1ZygnZW1pdCByZWFkYWJsZScpO1xuICBzdHJlYW0uZW1pdCgncmVhZGFibGUnKTtcbiAgZmxvdyhzdHJlYW0pO1xufVxuXG5cbi8vIGF0IHRoaXMgcG9pbnQsIHRoZSB1c2VyIGhhcyBwcmVzdW1hYmx5IHNlZW4gdGhlICdyZWFkYWJsZScgZXZlbnQsXG4vLyBhbmQgY2FsbGVkIHJlYWQoKSB0byBjb25zdW1lIHNvbWUgZGF0YS4gIHRoYXQgbWF5IGhhdmUgdHJpZ2dlcmVkXG4vLyBpbiB0dXJuIGFub3RoZXIgX3JlYWQobikgY2FsbCwgaW4gd2hpY2ggY2FzZSByZWFkaW5nID0gdHJ1ZSBpZlxuLy8gaXQncyBpbiBwcm9ncmVzcy5cbi8vIEhvd2V2ZXIsIGlmIHdlJ3JlIG5vdCBlbmRlZCwgb3IgcmVhZGluZywgYW5kIHRoZSBsZW5ndGggPCBod20sXG4vLyB0aGVuIGdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIG1vcmUgcHJlZW1wdGl2ZWx5LlxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWU7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG1heWJlUmVhZE1vcmVfKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgd2hpbGUgKCFzdGF0ZS5yZWFkaW5nICYmICFzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5lbmRlZCAmJlxuICAgICAgICAgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRlYnVnKCdtYXliZVJlYWRNb3JlIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICAgIGlmIChsZW4gPT09IHN0YXRlLmxlbmd0aClcbiAgICAgIC8vIGRpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVhaztcbiAgICBlbHNlXG4gICAgICBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gIH1cbiAgc3RhdGUucmVhZGluZ01vcmUgPSBmYWxzZTtcbn1cblxuLy8gYWJzdHJhY3QgbWV0aG9kLiAgdG8gYmUgb3ZlcnJpZGRlbiBpbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gY2FsbCBjYihlciwgZGF0YSkgd2hlcmUgZGF0YSBpcyA8PSBuIGluIGxlbmd0aC5cbi8vIGZvciB2aXJ0dWFsIChub24tc3RyaW5nLCBub24tYnVmZmVyKSBzdHJlYW1zLCBcImxlbmd0aFwiIGlzIHNvbWV3aGF0XG4vLyBhcmJpdHJhcnksIGFuZCBwZXJoYXBzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuXG5SZWFkYWJsZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbihuKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpKTtcbn07XG5cblJlYWRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdCwgcGlwZU9wdHMpIHtcbiAgdmFyIHNyYyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgc3dpdGNoIChzdGF0ZS5waXBlc0NvdW50KSB7XG4gICAgY2FzZSAwOlxuICAgICAgc3RhdGUucGlwZXMgPSBkZXN0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc3RhdGUucGlwZXMgPSBbc3RhdGUucGlwZXMsIGRlc3RdO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0YXRlLnBpcGVzLnB1c2goZGVzdCk7XG4gICAgICBicmVhaztcbiAgfVxuICBzdGF0ZS5waXBlc0NvdW50ICs9IDE7XG4gIGRlYnVnKCdwaXBlIGNvdW50PSVkIG9wdHM9JWonLCBzdGF0ZS5waXBlc0NvdW50LCBwaXBlT3B0cyk7XG5cbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJlxuICAgICAgICAgICAgICBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJlxuICAgICAgICAgICAgICBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcblxuICB2YXIgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogY2xlYW51cDtcbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpXG4gICAgcHJvY2Vzcy5uZXh0VGljayhlbmRGbik7XG4gIGVsc2VcbiAgICBzcmMub25jZSgnZW5kJywgZW5kRm4pO1xuXG4gIGRlc3Qub24oJ3VucGlwZScsIG9udW5waXBlKTtcbiAgZnVuY3Rpb24gb251bnBpcGUocmVhZGFibGUpIHtcbiAgICBkZWJ1Zygnb251bnBpcGUnKTtcbiAgICBpZiAocmVhZGFibGUgPT09IHNyYykge1xuICAgICAgY2xlYW51cCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGRlYnVnKCdvbmVuZCcpO1xuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuICAvLyB3aGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAvLyBoYW5kbGVyIGluIGZsb3coKSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgcmVwZWF0ZWRseSBpc1xuICAvLyB0b28gc2xvdy5cbiAgdmFyIG9uZHJhaW4gPSBwaXBlT25EcmFpbihzcmMpO1xuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgZGVidWcoJ2NsZWFudXAnKTtcbiAgICAvLyBjbGVhbnVwIGV2ZW50IGhhbmRsZXJzIG9uY2UgdGhlIHBpcGUgaXMgYnJva2VuXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ3VucGlwZScsIG9udW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIGNsZWFudXApO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uZGF0YSk7XG5cbiAgICAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluICYmXG4gICAgICAgICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpXG4gICAgICBvbmRyYWluKCk7XG4gIH1cblxuICBzcmMub24oJ2RhdGEnLCBvbmRhdGEpO1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgdmFyIHJldCA9IGRlc3Qud3JpdGUoY2h1bmspO1xuICAgIGlmIChmYWxzZSA9PT0gcmV0KSB7XG4gICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJyxcbiAgICAgICAgICAgIHNyYy5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKTtcbiAgICAgIHNyYy5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKys7XG4gICAgICBzcmMucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgZGVzdCBoYXMgYW4gZXJyb3IsIHRoZW4gc3RvcCBwaXBpbmcgaW50byBpdC5cbiAgLy8gaG93ZXZlciwgZG9uJ3Qgc3VwcHJlc3MgdGhlIHRocm93aW5nIGJlaGF2aW9yIGZvciB0aGlzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgZGVidWcoJ29uZXJyb3InLCBlcik7XG4gICAgdW5waXBlKCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBpZiAoRUUubGlzdGVuZXJDb3VudChkZXN0LCAnZXJyb3InKSA9PT0gMClcbiAgICAgIGRlc3QuZW1pdCgnZXJyb3InLCBlcik7XG4gIH1cbiAgLy8gVGhpcyBpcyBhIGJydXRhbGx5IHVnbHkgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlclxuICAvLyBpcyBhdHRhY2hlZCBiZWZvcmUgYW55IHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLlxuICBpZiAoIWRlc3QuX2V2ZW50cyB8fCAhZGVzdC5fZXZlbnRzLmVycm9yKVxuICAgIGRlc3Qub24oJ2Vycm9yJywgb25lcnJvcik7XG4gIGVsc2UgaWYgKGlzQXJyYXkoZGVzdC5fZXZlbnRzLmVycm9yKSlcbiAgICBkZXN0Ll9ldmVudHMuZXJyb3IudW5zaGlmdChvbmVycm9yKTtcbiAgZWxzZVxuICAgIGRlc3QuX2V2ZW50cy5lcnJvciA9IFtvbmVycm9yLCBkZXN0Ll9ldmVudHMuZXJyb3JdO1xuXG5cblxuICAvLyBCb3RoIGNsb3NlIGFuZCBmaW5pc2ggc2hvdWxkIHRyaWdnZXIgdW5waXBlLCBidXQgb25seSBvbmNlLlxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2Nsb3NlJywgb25jbG9zZSk7XG4gIGZ1bmN0aW9uIG9uZmluaXNoKCkge1xuICAgIGRlYnVnKCdvbmZpbmlzaCcpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG5cbiAgZnVuY3Rpb24gdW5waXBlKCkge1xuICAgIGRlYnVnKCd1bnBpcGUnKTtcbiAgICBzcmMudW5waXBlKGRlc3QpO1xuICB9XG5cbiAgLy8gdGVsbCB0aGUgZGVzdCB0aGF0IGl0J3MgYmVpbmcgcGlwZWQgdG9cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKTtcblxuICAvLyBzdGFydCB0aGUgZmxvdyBpZiBpdCBoYXNuJ3QgYmVlbiBzdGFydGVkIGFscmVhZHkuXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpO1xuICAgIHNyYy5yZXN1bWUoKTtcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufTtcblxuZnVuY3Rpb24gcGlwZU9uRHJhaW4oc3JjKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGU7XG4gICAgZGVidWcoJ3BpcGVPbkRyYWluJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4pXG4gICAgICBzdGF0ZS5hd2FpdERyYWluLS07XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gPT09IDAgJiYgRUUubGlzdGVuZXJDb3VudChzcmMsICdkYXRhJykpIHtcbiAgICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgICAgZmxvdyhzcmMpO1xuICAgIH1cbiAgfTtcbn1cblxuXG5SZWFkYWJsZS5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24oZGVzdCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuXG4gIC8vIGlmIHdlJ3JlIG5vdCBwaXBpbmcgYW55d2hlcmUsIHRoZW4gZG8gbm90aGluZy5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDApXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8ganVzdCBvbmUgZGVzdGluYXRpb24uICBtb3N0IGNvbW1vbiBjYXNlLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSkge1xuICAgIC8vIHBhc3NlZCBpbiBvbmUsIGJ1dCBpdCdzIG5vdCB0aGUgcmlnaHQgb25lLlxuICAgIGlmIChkZXN0ICYmIGRlc3QgIT09IHN0YXRlLnBpcGVzKVxuICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAoIWRlc3QpXG4gICAgICBkZXN0ID0gc3RhdGUucGlwZXM7XG5cbiAgICAvLyBnb3QgYSBtYXRjaC5cbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIGlmIChkZXN0KVxuICAgICAgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHNsb3cgY2FzZS4gbXVsdGlwbGUgcGlwZSBkZXN0aW5hdGlvbnMuXG5cbiAgaWYgKCFkZXN0KSB7XG4gICAgLy8gcmVtb3ZlIGFsbC5cbiAgICB2YXIgZGVzdHMgPSBzdGF0ZS5waXBlcztcbiAgICB2YXIgbGVuID0gc3RhdGUucGlwZXNDb3VudDtcbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICAgIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGZpbmQgdGhlIHJpZ2h0IG9uZS5cbiAgdmFyIGkgPSBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KTtcbiAgaWYgKGkgPT09IC0xKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIHN0YXRlLnBpcGVzLnNwbGljZShpLCAxKTtcbiAgc3RhdGUucGlwZXNDb3VudCAtPSAxO1xuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSlcbiAgICBzdGF0ZS5waXBlcyA9IHN0YXRlLnBpcGVzWzBdO1xuXG4gIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBzZXQgdXAgZGF0YSBldmVudHMgaWYgdGhleSBhcmUgYXNrZWQgZm9yXG4vLyBFbnN1cmUgcmVhZGFibGUgbGlzdGVuZXJzIGV2ZW50dWFsbHkgZ2V0IHNvbWV0aGluZ1xuUmVhZGFibGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKTtcblxuICAvLyBJZiBsaXN0ZW5pbmcgdG8gZGF0YSwgYW5kIGl0IGhhcyBub3QgZXhwbGljaXRseSBiZWVuIHBhdXNlZCxcbiAgLy8gdGhlbiBjYWxsIHJlc3VtZSB0byBzdGFydCB0aGUgZmxvdyBvZiBkYXRhIG9uIHRoZSBuZXh0IHRpY2suXG4gIGlmIChldiA9PT0gJ2RhdGEnICYmIGZhbHNlICE9PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpIHtcbiAgICB0aGlzLnJlc3VtZSgpO1xuICB9XG5cbiAgaWYgKGV2ID09PSAncmVhZGFibGUnICYmIHRoaXMucmVhZGFibGUpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICghc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcpIHtcbiAgICAgIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIGlmICghc3RhdGUucmVhZGluZykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZGVidWcoJ3JlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCcpO1xuICAgICAgICAgIHNlbGYucmVhZCgwKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxlbmd0aCkge1xuICAgICAgICBlbWl0UmVhZGFibGUodGhpcywgc3RhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uO1xuXG4vLyBwYXVzZSgpIGFuZCByZXN1bWUoKSBhcmUgcmVtbmFudHMgb2YgdGhlIGxlZ2FjeSByZWFkYWJsZSBzdHJlYW0gQVBJXG4vLyBJZiB0aGUgdXNlciB1c2VzIHRoZW0sIHRoZW4gc3dpdGNoIGludG8gb2xkIG1vZGUuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdyZXN1bWUnKTtcbiAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICAgIGRlYnVnKCdyZXN1bWUgcmVhZCAwJyk7XG4gICAgICB0aGlzLnJlYWQoMCk7XG4gICAgfVxuICAgIHJlc3VtZSh0aGlzLCBzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiByZXN1bWUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlc3VtZVNjaGVkdWxlZCkge1xuICAgIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IHRydWU7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lXyhzdHJlYW0sIHN0YXRlKSB7XG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICBzdHJlYW0uZW1pdCgncmVzdW1lJyk7XG4gIGZsb3coc3RyZWFtKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpXG4gICAgc3RyZWFtLnJlYWQoMCk7XG59XG5cblJlYWRhYmxlLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcbiAgaWYgKGZhbHNlICE9PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGF1c2UnKTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG4gIGlmIChzdGF0ZS5mbG93aW5nKSB7XG4gICAgZG8ge1xuICAgICAgdmFyIGNodW5rID0gc3RyZWFtLnJlYWQoKTtcbiAgICB9IHdoaWxlIChudWxsICE9PSBjaHVuayAmJiBzdGF0ZS5mbG93aW5nKTtcbiAgfVxufVxuXG4vLyB3cmFwIGFuIG9sZC1zdHlsZSBzdHJlYW0gYXMgdGhlIGFzeW5jIGRhdGEgc291cmNlLlxuLy8gVGhpcyBpcyAqbm90KiBwYXJ0IG9mIHRoZSByZWFkYWJsZSBzdHJlYW0gaW50ZXJmYWNlLlxuLy8gSXQgaXMgYW4gdWdseSB1bmZvcnR1bmF0ZSBtZXNzIG9mIGhpc3RvcnkuXG5SZWFkYWJsZS5wcm90b3R5cGUud3JhcCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgcGF1c2VkID0gZmFsc2U7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnKCd3cmFwcGVkIGVuZCcpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpXG4gICAgICAgIHNlbGYucHVzaChjaHVuayk7XG4gICAgfVxuXG4gICAgc2VsZi5wdXNoKG51bGwpO1xuICB9KTtcblxuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbihjaHVuaykge1xuICAgIGRlYnVnKCd3cmFwcGVkIGRhdGEnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlcilcbiAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG4gICAgaWYgKCFjaHVuayB8fCAhc3RhdGUub2JqZWN0TW9kZSAmJiAhY2h1bmsubGVuZ3RoKVxuICAgICAgcmV0dXJuO1xuXG4gICAgdmFyIHJldCA9IHNlbGYucHVzaChjaHVuayk7XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHByb3h5IGFsbCB0aGUgb3RoZXIgbWV0aG9kcy5cbiAgLy8gaW1wb3J0YW50IHdoZW4gd3JhcHBpbmcgZmlsdGVycyBhbmQgZHVwbGV4ZXMuXG4gIGZvciAodmFyIGkgaW4gc3RyZWFtKSB7XG4gICAgaWYgKHV0aWwuaXNGdW5jdGlvbihzdHJlYW1baV0pICYmIHV0aWwuaXNVbmRlZmluZWQodGhpc1tpXSkpIHtcbiAgICAgIHRoaXNbaV0gPSBmdW5jdGlvbihtZXRob2QpIHsgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3RyZWFtW21ldGhvZF0uYXBwbHkoc3RyZWFtLCBhcmd1bWVudHMpO1xuICAgICAgfX0oaSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJveHkgY2VydGFpbiBpbXBvcnRhbnQgZXZlbnRzLlxuICB2YXIgZXZlbnRzID0gWydlcnJvcicsICdjbG9zZScsICdkZXN0cm95JywgJ3BhdXNlJywgJ3Jlc3VtZSddO1xuICBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24oZXYpIHtcbiAgICBzdHJlYW0ub24oZXYsIHNlbGYuZW1pdC5iaW5kKHNlbGYsIGV2KSk7XG4gIH0pO1xuXG4gIC8vIHdoZW4gd2UgdHJ5IHRvIGNvbnN1bWUgc29tZSBtb3JlIGJ5dGVzLCBzaW1wbHkgdW5wYXVzZSB0aGVcbiAgLy8gdW5kZXJseWluZyBzdHJlYW0uXG4gIHNlbGYuX3JlYWQgPSBmdW5jdGlvbihuKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgX3JlYWQnLCBuKTtcbiAgICBpZiAocGF1c2VkKSB7XG4gICAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICAgIHN0cmVhbS5yZXN1bWUoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHNlbGY7XG59O1xuXG5cblxuLy8gZXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuUmVhZGFibGUuX2Zyb21MaXN0ID0gZnJvbUxpc3Q7XG5cbi8vIFBsdWNrIG9mZiBuIGJ5dGVzIGZyb20gYW4gYXJyYXkgb2YgYnVmZmVycy5cbi8vIExlbmd0aCBpcyB0aGUgY29tYmluZWQgbGVuZ3RocyBvZiBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIGxpc3QuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICB2YXIgbGlzdCA9IHN0YXRlLmJ1ZmZlcjtcbiAgdmFyIGxlbmd0aCA9IHN0YXRlLmxlbmd0aDtcbiAgdmFyIHN0cmluZ01vZGUgPSAhIXN0YXRlLmRlY29kZXI7XG4gIHZhciBvYmplY3RNb2RlID0gISFzdGF0ZS5vYmplY3RNb2RlO1xuICB2YXIgcmV0O1xuXG4gIC8vIG5vdGhpbmcgaW4gdGhlIGxpc3QsIGRlZmluaXRlbHkgZW1wdHkuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gbnVsbDtcblxuICBpZiAobGVuZ3RoID09PSAwKVxuICAgIHJldCA9IG51bGw7XG4gIGVsc2UgaWYgKG9iamVjdE1vZGUpXG4gICAgcmV0ID0gbGlzdC5zaGlmdCgpO1xuICBlbHNlIGlmICghbiB8fCBuID49IGxlbmd0aCkge1xuICAgIC8vIHJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgYXJyYXkuXG4gICAgaWYgKHN0cmluZ01vZGUpXG4gICAgICByZXQgPSBsaXN0LmpvaW4oJycpO1xuICAgIGVsc2VcbiAgICAgIHJldCA9IEJ1ZmZlci5jb25jYXQobGlzdCwgbGVuZ3RoKTtcbiAgICBsaXN0Lmxlbmd0aCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVhZCBqdXN0IHNvbWUgb2YgaXQuXG4gICAgaWYgKG4gPCBsaXN0WzBdLmxlbmd0aCkge1xuICAgICAgLy8ganVzdCB0YWtlIGEgcGFydCBvZiB0aGUgZmlyc3QgbGlzdCBpdGVtLlxuICAgICAgLy8gc2xpY2UgaXMgdGhlIHNhbWUgZm9yIGJ1ZmZlcnMgYW5kIHN0cmluZ3MuXG4gICAgICB2YXIgYnVmID0gbGlzdFswXTtcbiAgICAgIHJldCA9IGJ1Zi5zbGljZSgwLCBuKTtcbiAgICAgIGxpc3RbMF0gPSBidWYuc2xpY2Uobik7XG4gICAgfSBlbHNlIGlmIChuID09PSBsaXN0WzBdLmxlbmd0aCkge1xuICAgICAgLy8gZmlyc3QgbGlzdCBpcyBhIHBlcmZlY3QgbWF0Y2hcbiAgICAgIHJldCA9IGxpc3Quc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29tcGxleCBjYXNlLlxuICAgICAgLy8gd2UgaGF2ZSBlbm91Z2ggdG8gY292ZXIgaXQsIGJ1dCBpdCBzcGFucyBwYXN0IHRoZSBmaXJzdCBidWZmZXIuXG4gICAgICBpZiAoc3RyaW5nTW9kZSlcbiAgICAgICAgcmV0ID0gJyc7XG4gICAgICBlbHNlXG4gICAgICAgIHJldCA9IG5ldyBCdWZmZXIobik7XG5cbiAgICAgIHZhciBjID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsICYmIGMgPCBuOyBpKyspIHtcbiAgICAgICAgdmFyIGJ1ZiA9IGxpc3RbMF07XG4gICAgICAgIHZhciBjcHkgPSBNYXRoLm1pbihuIC0gYywgYnVmLmxlbmd0aCk7XG5cbiAgICAgICAgaWYgKHN0cmluZ01vZGUpXG4gICAgICAgICAgcmV0ICs9IGJ1Zi5zbGljZSgwLCBjcHkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgYnVmLmNvcHkocmV0LCBjLCAwLCBjcHkpO1xuXG4gICAgICAgIGlmIChjcHkgPCBidWYubGVuZ3RoKVxuICAgICAgICAgIGxpc3RbMF0gPSBidWYuc2xpY2UoY3B5KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcblxuICAgICAgICBjICs9IGNweTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuXG4gIC8vIElmIHdlIGdldCBoZXJlIGJlZm9yZSBjb25zdW1pbmcgYWxsIHRoZSBieXRlcywgdGhlbiB0aGF0IGlzIGFcbiAgLy8gYnVnIGluIG5vZGUuICBTaG91bGQgbmV2ZXIgaGFwcGVuLlxuICBpZiAoc3RhdGUubGVuZ3RoID4gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VuZFJlYWRhYmxlIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7XG5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICAvLyBDaGVjayB0aGF0IHdlIGRpZG4ndCBnZXQgb25lIGxhc3QgdW5zaGlmdC5cbiAgICAgIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgc3RhdGUuZW5kRW1pdHRlZCA9IHRydWU7XG4gICAgICAgIHN0cmVhbS5yZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yRWFjaCAoeHMsIGYpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmKHhzW2ldLCBpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmRleE9mICh4cywgeCkge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmICh4c1tpXSA9PT0geCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cblxuLy8gYSB0cmFuc2Zvcm0gc3RyZWFtIGlzIGEgcmVhZGFibGUvd3JpdGFibGUgc3RyZWFtIHdoZXJlIHlvdSBkb1xuLy8gc29tZXRoaW5nIHdpdGggdGhlIGRhdGEuICBTb21ldGltZXMgaXQncyBjYWxsZWQgYSBcImZpbHRlclwiLFxuLy8gYnV0IHRoYXQncyBub3QgYSBncmVhdCBuYW1lIGZvciBpdCwgc2luY2UgdGhhdCBpbXBsaWVzIGEgdGhpbmcgd2hlcmVcbi8vIHNvbWUgYml0cyBwYXNzIHRocm91Z2gsIGFuZCBvdGhlcnMgYXJlIHNpbXBseSBpZ25vcmVkLiAgKFRoYXQgd291bGRcbi8vIGJlIGEgdmFsaWQgZXhhbXBsZSBvZiBhIHRyYW5zZm9ybSwgb2YgY291cnNlLilcbi8vXG4vLyBXaGlsZSB0aGUgb3V0cHV0IGlzIGNhdXNhbGx5IHJlbGF0ZWQgdG8gdGhlIGlucHV0LCBpdCdzIG5vdCBhXG4vLyBuZWNlc3NhcmlseSBzeW1tZXRyaWMgb3Igc3luY2hyb25vdXMgdHJhbnNmb3JtYXRpb24uICBGb3IgZXhhbXBsZSxcbi8vIGEgemxpYiBzdHJlYW0gbWlnaHQgdGFrZSBtdWx0aXBsZSBwbGFpbi10ZXh0IHdyaXRlcygpLCBhbmQgdGhlblxuLy8gZW1pdCBhIHNpbmdsZSBjb21wcmVzc2VkIGNodW5rIHNvbWUgdGltZSBpbiB0aGUgZnV0dXJlLlxuLy9cbi8vIEhlcmUncyBob3cgdGhpcyB3b3Jrczpcbi8vXG4vLyBUaGUgVHJhbnNmb3JtIHN0cmVhbSBoYXMgYWxsIHRoZSBhc3BlY3RzIG9mIHRoZSByZWFkYWJsZSBhbmQgd3JpdGFibGVcbi8vIHN0cmVhbSBjbGFzc2VzLiAgV2hlbiB5b3Ugd3JpdGUoY2h1bmspLCB0aGF0IGNhbGxzIF93cml0ZShjaHVuayxjYilcbi8vIGludGVybmFsbHksIGFuZCByZXR1cm5zIGZhbHNlIGlmIHRoZXJlJ3MgYSBsb3Qgb2YgcGVuZGluZyB3cml0ZXNcbi8vIGJ1ZmZlcmVkIHVwLiAgV2hlbiB5b3UgY2FsbCByZWFkKCksIHRoYXQgY2FsbHMgX3JlYWQobikgdW50aWxcbi8vIHRoZXJlJ3MgZW5vdWdoIHBlbmRpbmcgcmVhZGFibGUgZGF0YSBidWZmZXJlZCB1cC5cbi8vXG4vLyBJbiBhIHRyYW5zZm9ybSBzdHJlYW0sIHRoZSB3cml0dGVuIGRhdGEgaXMgcGxhY2VkIGluIGEgYnVmZmVyLiAgV2hlblxuLy8gX3JlYWQobikgaXMgY2FsbGVkLCBpdCB0cmFuc2Zvcm1zIHRoZSBxdWV1ZWQgdXAgZGF0YSwgY2FsbGluZyB0aGVcbi8vIGJ1ZmZlcmVkIF93cml0ZSBjYidzIGFzIGl0IGNvbnN1bWVzIGNodW5rcy4gIElmIGNvbnN1bWluZyBhIHNpbmdsZVxuLy8gd3JpdHRlbiBjaHVuayB3b3VsZCByZXN1bHQgaW4gbXVsdGlwbGUgb3V0cHV0IGNodW5rcywgdGhlbiB0aGUgZmlyc3Rcbi8vIG91dHB1dHRlZCBiaXQgY2FsbHMgdGhlIHJlYWRjYiwgYW5kIHN1YnNlcXVlbnQgY2h1bmtzIGp1c3QgZ28gaW50b1xuLy8gdGhlIHJlYWQgYnVmZmVyLCBhbmQgd2lsbCBjYXVzZSBpdCB0byBlbWl0ICdyZWFkYWJsZScgaWYgbmVjZXNzYXJ5LlxuLy9cbi8vIFRoaXMgd2F5LCBiYWNrLXByZXNzdXJlIGlzIGFjdHVhbGx5IGRldGVybWluZWQgYnkgdGhlIHJlYWRpbmcgc2lkZSxcbi8vIHNpbmNlIF9yZWFkIGhhcyB0byBiZSBjYWxsZWQgdG8gc3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBjaHVuay4gIEhvd2V2ZXIsXG4vLyBhIHBhdGhvbG9naWNhbCBpbmZsYXRlIHR5cGUgb2YgdHJhbnNmb3JtIGNhbiBjYXVzZSBleGNlc3NpdmUgYnVmZmVyaW5nXG4vLyBoZXJlLiAgRm9yIGV4YW1wbGUsIGltYWdpbmUgYSBzdHJlYW0gd2hlcmUgZXZlcnkgYnl0ZSBvZiBpbnB1dCBpc1xuLy8gaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlciBmcm9tIDAtMjU1LCBhbmQgdGhlbiByZXN1bHRzIGluIHRoYXQgbWFueVxuLy8gYnl0ZXMgb2Ygb3V0cHV0LiAgV3JpdGluZyB0aGUgNCBieXRlcyB7ZmYsZmYsZmYsZmZ9IHdvdWxkIHJlc3VsdCBpblxuLy8gMWtiIG9mIGRhdGEgYmVpbmcgb3V0cHV0LiAgSW4gdGhpcyBjYXNlLCB5b3UgY291bGQgd3JpdGUgYSB2ZXJ5IHNtYWxsXG4vLyBhbW91bnQgb2YgaW5wdXQsIGFuZCBlbmQgdXAgd2l0aCBhIHZlcnkgbGFyZ2UgYW1vdW50IG9mIG91dHB1dC4gIEluXG4vLyBzdWNoIGEgcGF0aG9sb2dpY2FsIGluZmxhdGluZyBtZWNoYW5pc20sIHRoZXJlJ2QgYmUgbm8gd2F5IHRvIHRlbGxcbi8vIHRoZSBzeXN0ZW0gdG8gc3RvcCBkb2luZyB0aGUgdHJhbnNmb3JtLiAgQSBzaW5nbGUgNE1CIHdyaXRlIGNvdWxkXG4vLyBjYXVzZSB0aGUgc3lzdGVtIHRvIHJ1biBvdXQgb2YgbWVtb3J5LlxuLy9cbi8vIEhvd2V2ZXIsIGV2ZW4gaW4gc3VjaCBhIHBhdGhvbG9naWNhbCBjYXNlLCBvbmx5IGEgc2luZ2xlIHdyaXR0ZW4gY2h1bmtcbi8vIHdvdWxkIGJlIGNvbnN1bWVkLCBhbmQgdGhlbiB0aGUgcmVzdCB3b3VsZCB3YWl0ICh1bi10cmFuc2Zvcm1lZCkgdW50aWxcbi8vIHRoZSByZXN1bHRzIG9mIHRoZSBwcmV2aW91cyB0cmFuc2Zvcm1lZCBjaHVuayB3ZXJlIGNvbnN1bWVkLlxuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcblxudmFyIER1cGxleCA9IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFRyYW5zZm9ybSwgRHVwbGV4KTtcblxuXG5mdW5jdGlvbiBUcmFuc2Zvcm1TdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgdGhpcy5hZnRlclRyYW5zZm9ybSA9IGZ1bmN0aW9uKGVyLCBkYXRhKSB7XG4gICAgcmV0dXJuIGFmdGVyVHJhbnNmb3JtKHN0cmVhbSwgZXIsIGRhdGEpO1xuICB9O1xuXG4gIHRoaXMubmVlZFRyYW5zZm9ybSA9IGZhbHNlO1xuICB0aGlzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuICB0aGlzLndyaXRlY2h1bmsgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybShzdHJlYW0sIGVyLCBkYXRhKSB7XG4gIHZhciB0cyA9IHN0cmVhbS5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuXG4gIHZhciBjYiA9IHRzLndyaXRlY2I7XG5cbiAgaWYgKCFjYilcbiAgICByZXR1cm4gc3RyZWFtLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdubyB3cml0ZWNiIGluIFRyYW5zZm9ybSBjbGFzcycpKTtcblxuICB0cy53cml0ZWNodW5rID0gbnVsbDtcbiAgdHMud3JpdGVjYiA9IG51bGw7XG5cbiAgaWYgKCF1dGlsLmlzTnVsbE9yVW5kZWZpbmVkKGRhdGEpKVxuICAgIHN0cmVhbS5wdXNoKGRhdGEpO1xuXG4gIGlmIChjYilcbiAgICBjYihlcik7XG5cbiAgdmFyIHJzID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBycy5yZWFkaW5nID0gZmFsc2U7XG4gIGlmIChycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykge1xuICAgIHN0cmVhbS5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIFRyYW5zZm9ybShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUcmFuc2Zvcm0pKVxuICAgIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuXG4gIER1cGxleC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlID0gbmV3IFRyYW5zZm9ybVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIHdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgdmFyIHN0cmVhbSA9IHRoaXM7XG5cbiAgLy8gc3RhcnQgb3V0IGFza2luZyBmb3IgYSByZWFkYWJsZSBldmVudCBvbmNlIGRhdGEgaXMgdHJhbnNmb3JtZWQuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyB3ZSBoYXZlIGltcGxlbWVudGVkIHRoZSBfcmVhZCBtZXRob2QsIGFuZCBkb25lIHRoZSBvdGhlciB0aGluZ3NcbiAgLy8gdGhhdCBSZWFkYWJsZSB3YW50cyBiZWZvcmUgdGhlIGZpcnN0IF9yZWFkIGNhbGwsIHNvIHVuc2V0IHRoZVxuICAvLyBzeW5jIGd1YXJkIGZsYWcuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlO1xuXG4gIHRoaXMub25jZSgncHJlZmluaXNoJywgZnVuY3Rpb24oKSB7XG4gICAgaWYgKHV0aWwuaXNGdW5jdGlvbih0aGlzLl9mbHVzaCkpXG4gICAgICB0aGlzLl9mbHVzaChmdW5jdGlvbihlcikge1xuICAgICAgICBkb25lKHN0cmVhbSwgZXIpO1xuICAgICAgfSk7XG4gICAgZWxzZVxuICAgICAgZG9uZShzdHJlYW0pO1xuICB9KTtcbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nKSB7XG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgcmV0dXJuIER1cGxleC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBlbmNvZGluZyk7XG59O1xuXG4vLyBUaGlzIGlzIHRoZSBwYXJ0IHdoZXJlIHlvdSBkbyBzdHVmZiFcbi8vIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaW4gaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vICdjaHVuaycgaXMgYW4gaW5wdXQgY2h1bmsuXG4vL1xuLy8gQ2FsbCBgcHVzaChuZXdDaHVuaylgIHRvIHBhc3MgYWxvbmcgdHJhbnNmb3JtZWQgb3V0cHV0XG4vLyB0byB0aGUgcmVhZGFibGUgc2lkZS4gIFlvdSBtYXkgY2FsbCAncHVzaCcgemVybyBvciBtb3JlIHRpbWVzLlxuLy9cbi8vIENhbGwgYGNiKGVycilgIHdoZW4geW91IGFyZSBkb25lIHdpdGggdGhpcyBjaHVuay4gIElmIHlvdSBwYXNzXG4vLyBhbiBlcnJvciwgdGhlbiB0aGF0J2xsIHB1dCB0aGUgaHVydCBvbiB0aGUgd2hvbGUgb3BlcmF0aW9uLiAgSWYgeW91XG4vLyBuZXZlciBjYWxsIGNiKCksIHRoZW4geW91J2xsIG5ldmVyIGdldCBhbm90aGVyIGNodW5rLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuICB0cy53cml0ZWNiID0gY2I7XG4gIHRzLndyaXRlY2h1bmsgPSBjaHVuaztcbiAgdHMud3JpdGVlbmNvZGluZyA9IGVuY29kaW5nO1xuICBpZiAoIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHZhciBycyA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKHRzLm5lZWRUcmFuc2Zvcm0gfHxcbiAgICAgICAgcnMubmVlZFJlYWRhYmxlIHx8XG4gICAgICAgIHJzLmxlbmd0aCA8IHJzLmhpZ2hXYXRlck1hcmspXG4gICAgICB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59O1xuXG4vLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBhcmdzIGFyZSBoZXJlLlxuLy8gX3RyYW5zZm9ybSBkb2VzIGFsbCB0aGUgd29yay5cbi8vIFRoYXQgd2UgZ290IGhlcmUgbWVhbnMgdGhhdCB0aGUgcmVhZGFibGUgc2lkZSB3YW50cyBtb3JlIGRhdGEuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24obikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcblxuICBpZiAoIXV0aWwuaXNOdWxsKHRzLndyaXRlY2h1bmspICYmIHRzLndyaXRlY2IgJiYgIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHRzLnRyYW5zZm9ybWluZyA9IHRydWU7XG4gICAgdGhpcy5fdHJhbnNmb3JtKHRzLndyaXRlY2h1bmssIHRzLndyaXRlZW5jb2RpbmcsIHRzLmFmdGVyVHJhbnNmb3JtKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtYXJrIHRoYXQgd2UgbmVlZCBhIHRyYW5zZm9ybSwgc28gdGhhdCBhbnkgZGF0YSB0aGF0IGNvbWVzIGluXG4gICAgLy8gd2lsbCBnZXQgcHJvY2Vzc2VkLCBub3cgdGhhdCB3ZSd2ZSBhc2tlZCBmb3IgaXQuXG4gICAgdHMubmVlZFRyYW5zZm9ybSA9IHRydWU7XG4gIH1cbn07XG5cblxuZnVuY3Rpb24gZG9uZShzdHJlYW0sIGVyKSB7XG4gIGlmIChlcilcbiAgICByZXR1cm4gc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuXG4gIC8vIGlmIHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgd3JpdGUgYnVmZmVyLCB0aGVuIHRoYXQgbWVhbnNcbiAgLy8gdGhhdCBub3RoaW5nIG1vcmUgd2lsbCBldmVyIGJlIHByb3ZpZGVkXG4gIHZhciB3cyA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHRzID0gc3RyZWFtLl90cmFuc2Zvcm1TdGF0ZTtcblxuICBpZiAod3MubGVuZ3RoKVxuICAgIHRocm93IG5ldyBFcnJvcignY2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwJyk7XG5cbiAgaWYgKHRzLnRyYW5zZm9ybWluZylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmcnKTtcblxuICByZXR1cm4gc3RyZWFtLnB1c2gobnVsbCk7XG59XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gQSBiaXQgc2ltcGxlciB0aGFuIHJlYWRhYmxlIHN0cmVhbXMuXG4vLyBJbXBsZW1lbnQgYW4gYXN5bmMgLl93cml0ZShjaHVuaywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG5cbm1vZHVsZS5leHBvcnRzID0gV3JpdGFibGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlO1xuXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuXG51dGlsLmluaGVyaXRzKFdyaXRhYmxlLCBTdHJlYW0pO1xuXG5mdW5jdGlvbiBXcml0ZVJlcShjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRoaXMuY2h1bmsgPSBjaHVuaztcbiAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICB0aGlzLmNhbGxiYWNrID0gY2I7XG59XG5cbmZ1bmN0aW9uIFdyaXRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIHZhciBEdXBsZXggPSByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gdGhlIHBvaW50IGF0IHdoaWNoIHdyaXRlKCkgc3RhcnRzIHJldHVybmluZyBmYWxzZVxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIHRoYXQgd2UgYWx3YXlzIHJldHVybiBmYWxzZSBpZlxuICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBpcyBub3QgZmx1c2hlZCBpbW1lZGlhdGVseSBvbiB3cml0ZSgpXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciBkZWZhdWx0SHdtID0gb3B0aW9ucy5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IChod20gfHwgaHdtID09PSAwKSA/IGh3bSA6IGRlZmF1bHRId207XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyZWFtXG4gIC8vIGNvbnRhaW5zIGJ1ZmZlcnMgb3Igb2JqZWN0cy5cbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleClcbiAgICB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyBjYXN0IHRvIGludHMuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IH5+dGhpcy5oaWdoV2F0ZXJNYXJrO1xuXG4gIHRoaXMubmVlZERyYWluID0gZmFsc2U7XG4gIC8vIGF0IHRoZSBzdGFydCBvZiBjYWxsaW5nIGVuZCgpXG4gIHRoaXMuZW5kaW5nID0gZmFsc2U7XG4gIC8vIHdoZW4gZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgcmV0dXJuZWRcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICAvLyB3aGVuICdmaW5pc2gnIGlzIGVtaXR0ZWRcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIHNob3VsZCB3ZSBkZWNvZGUgc3RyaW5ncyBpbnRvIGJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdG8gX3dyaXRlP1xuICAvLyB0aGlzIGlzIGhlcmUgc28gdGhhdCBzb21lIG5vZGUtY29yZSBzdHJlYW1zIGNhbiBvcHRpbWl6ZSBzdHJpbmdcbiAgLy8gaGFuZGxpbmcgYXQgYSBsb3dlciBsZXZlbC5cbiAgdmFyIG5vRGVjb2RlID0gb3B0aW9ucy5kZWNvZGVTdHJpbmdzID09PSBmYWxzZTtcbiAgdGhpcy5kZWNvZGVTdHJpbmdzID0gIW5vRGVjb2RlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIG5vdCBhbiBhY3R1YWwgYnVmZmVyIHdlIGtlZXAgdHJhY2sgb2YsIGJ1dCBhIG1lYXN1cmVtZW50XG4gIC8vIG9mIGhvdyBtdWNoIHdlJ3JlIHdhaXRpbmcgdG8gZ2V0IHB1c2hlZCB0byBzb21lIHVuZGVybHlpbmdcbiAgLy8gc29ja2V0IG9yIGZpbGUuXG4gIHRoaXMubGVuZ3RoID0gMDtcblxuICAvLyBhIGZsYWcgdG8gc2VlIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdyaXRlLlxuICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcblxuICAvLyB3aGVuIHRydWUgYWxsIHdyaXRlcyB3aWxsIGJlIGJ1ZmZlcmVkIHVudGlsIC51bmNvcmsoKSBjYWxsXG4gIHRoaXMuY29ya2VkID0gMDtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyBhIGZsYWcgdG8ga25vdyBpZiB3ZSdyZSBwcm9jZXNzaW5nIHByZXZpb3VzbHkgYnVmZmVyZWQgaXRlbXMsIHdoaWNoXG4gIC8vIG1heSBjYWxsIHRoZSBfd3JpdGUoKSBjYWxsYmFjayBpbiB0aGUgc2FtZSB0aWNrLCBzbyB0aGF0IHdlIGRvbid0XG4gIC8vIGVuZCB1cCBpbiBhbiBvdmVybGFwcGVkIG9ud3JpdGUgc2l0dWF0aW9uLlxuICB0aGlzLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCdzIHBhc3NlZCB0byBfd3JpdGUoY2h1bmssY2IpXG4gIHRoaXMub253cml0ZSA9IGZ1bmN0aW9uKGVyKSB7XG4gICAgb253cml0ZShzdHJlYW0sIGVyKTtcbiAgfTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCB0aGUgdXNlciBzdXBwbGllcyB0byB3cml0ZShjaHVuayxlbmNvZGluZyxjYilcbiAgdGhpcy53cml0ZWNiID0gbnVsbDtcblxuICAvLyB0aGUgYW1vdW50IHRoYXQgaXMgYmVpbmcgd3JpdHRlbiB3aGVuIF93cml0ZSBpcyBjYWxsZWQuXG4gIHRoaXMud3JpdGVsZW4gPSAwO1xuXG4gIHRoaXMuYnVmZmVyID0gW107XG5cbiAgLy8gbnVtYmVyIG9mIHBlbmRpbmcgdXNlci1zdXBwbGllZCB3cml0ZSBjYWxsYmFja3NcbiAgLy8gdGhpcyBtdXN0IGJlIDAgYmVmb3JlICdmaW5pc2gnIGNhbiBiZSBlbWl0dGVkXG4gIHRoaXMucGVuZGluZ2NiID0gMDtcblxuICAvLyBlbWl0IHByZWZpbmlzaCBpZiB0aGUgb25seSB0aGluZyB3ZSdyZSB3YWl0aW5nIGZvciBpcyBfd3JpdGUgY2JzXG4gIC8vIFRoaXMgaXMgcmVsZXZhbnQgZm9yIHN5bmNocm9ub3VzIFRyYW5zZm9ybSBzdHJlYW1zXG4gIHRoaXMucHJlZmluaXNoZWQgPSBmYWxzZTtcblxuICAvLyBUcnVlIGlmIHRoZSBlcnJvciB3YXMgYWxyZWFkeSBlbWl0dGVkIGFuZCBzaG91bGQgbm90IGJlIHRocm93biBhZ2FpblxuICB0aGlzLmVycm9yRW1pdHRlZCA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBXcml0YWJsZShvcHRpb25zKSB7XG4gIHZhciBEdXBsZXggPSByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgLy8gV3JpdGFibGUgY3RvciBpcyBhcHBsaWVkIHRvIER1cGxleGVzLCB0aG91Z2ggdGhleSdyZSBub3RcbiAgLy8gaW5zdGFuY2VvZiBXcml0YWJsZSwgdGhleSdyZSBpbnN0YW5jZW9mIFJlYWRhYmxlLlxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgV3JpdGFibGUpICYmICEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpXG4gICAgcmV0dXJuIG5ldyBXcml0YWJsZShvcHRpb25zKTtcblxuICB0aGlzLl93cml0YWJsZVN0YXRlID0gbmV3IFdyaXRhYmxlU3RhdGUob3B0aW9ucywgdGhpcyk7XG5cbiAgLy8gbGVnYWN5LlxuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuLy8gT3RoZXJ3aXNlIHBlb3BsZSBjYW4gcGlwZSBXcml0YWJsZSBzdHJlYW1zLCB3aGljaCBpcyBqdXN0IHdyb25nLlxuV3JpdGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignQ2Fubm90IHBpcGUuIE5vdCByZWFkYWJsZS4nKSk7XG59O1xuXG5cbmZ1bmN0aW9uIHdyaXRlQWZ0ZXJFbmQoc3RyZWFtLCBzdGF0ZSwgY2IpIHtcbiAgdmFyIGVyID0gbmV3IEVycm9yKCd3cml0ZSBhZnRlciBlbmQnKTtcbiAgLy8gVE9ETzogZGVmZXIgZXJyb3IgZXZlbnRzIGNvbnNpc3RlbnRseSBldmVyeXdoZXJlLCBub3QganVzdCB0aGUgY2JcbiAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgIGNiKGVyKTtcbiAgfSk7XG59XG5cbi8vIElmIHdlIGdldCBzb21ldGhpbmcgdGhhdCBpcyBub3QgYSBidWZmZXIsIHN0cmluZywgbnVsbCwgb3IgdW5kZWZpbmVkLFxuLy8gYW5kIHdlJ3JlIG5vdCBpbiBvYmplY3RNb2RlLCB0aGVuIHRoYXQncyBhbiBlcnJvci5cbi8vIE90aGVyd2lzZSBzdHJlYW0gY2h1bmtzIGFyZSBhbGwgY29uc2lkZXJlZCB0byBiZSBvZiBsZW5ndGg9MSwgYW5kIHRoZVxuLy8gd2F0ZXJtYXJrcyBkZXRlcm1pbmUgaG93IG1hbnkgb2JqZWN0cyB0byBrZWVwIGluIHRoZSBidWZmZXIsIHJhdGhlciB0aGFuXG4vLyBob3cgbWFueSBieXRlcyBvciBjaGFyYWN0ZXJzLlxuZnVuY3Rpb24gdmFsaWRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgY2IpIHtcbiAgdmFyIHZhbGlkID0gdHJ1ZTtcbiAgaWYgKCF1dGlsLmlzQnVmZmVyKGNodW5rKSAmJlxuICAgICAgIXV0aWwuaXNTdHJpbmcoY2h1bmspICYmXG4gICAgICAhdXRpbC5pc051bGxPclVuZGVmaW5lZChjaHVuaykgJiZcbiAgICAgICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgdmFyIGVyID0gbmV3IFR5cGVFcnJvcignSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuaycpO1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgY2IoZXIpO1xuICAgIH0pO1xuICAgIHZhbGlkID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbGlkO1xufVxuXG5Xcml0YWJsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIHZhciByZXQgPSBmYWxzZTtcblxuICBpZiAodXRpbC5pc0Z1bmN0aW9uKGVuY29kaW5nKSkge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKHV0aWwuaXNCdWZmZXIoY2h1bmspKVxuICAgIGVuY29kaW5nID0gJ2J1ZmZlcic7XG4gIGVsc2UgaWYgKCFlbmNvZGluZylcbiAgICBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcblxuICBpZiAoIXV0aWwuaXNGdW5jdGlvbihjYikpXG4gICAgY2IgPSBmdW5jdGlvbigpIHt9O1xuXG4gIGlmIChzdGF0ZS5lbmRlZClcbiAgICB3cml0ZUFmdGVyRW5kKHRoaXMsIHN0YXRlLCBjYik7XG4gIGVsc2UgaWYgKHZhbGlkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCBjYikpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICByZXQgPSB3cml0ZU9yQnVmZmVyKHRoaXMsIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuY29yayA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIHN0YXRlLmNvcmtlZCsrO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLnVuY29yayA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQtLTtcblxuICAgIGlmICghc3RhdGUud3JpdGluZyAmJlxuICAgICAgICAhc3RhdGUuY29ya2VkICYmXG4gICAgICAgICFzdGF0ZS5maW5pc2hlZCAmJlxuICAgICAgICAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJlxuICAgICAgICBzdGF0ZS5idWZmZXIubGVuZ3RoKVxuICAgICAgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBkZWNvZGVDaHVuayhzdGF0ZSwgY2h1bmssIGVuY29kaW5nKSB7XG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJlxuICAgICAgc3RhdGUuZGVjb2RlU3RyaW5ncyAhPT0gZmFsc2UgJiZcbiAgICAgIHV0aWwuaXNTdHJpbmcoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBuZXcgQnVmZmVyKGNodW5rLCBlbmNvZGluZyk7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuXG4vLyBpZiB3ZSdyZSBhbHJlYWR5IHdyaXRpbmcgc29tZXRoaW5nLCB0aGVuIGp1c3QgcHV0IHRoaXNcbi8vIGluIHRoZSBxdWV1ZSwgYW5kIHdhaXQgb3VyIHR1cm4uICBPdGhlcndpc2UsIGNhbGwgX3dyaXRlXG4vLyBJZiB3ZSByZXR1cm4gZmFsc2UsIHRoZW4gd2UgbmVlZCBhIGRyYWluIGV2ZW50LCBzbyBzZXQgdGhhdCBmbGFnLlxuZnVuY3Rpb24gd3JpdGVPckJ1ZmZlcihzdHJlYW0sIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNodW5rID0gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZyk7XG4gIGlmICh1dGlsLmlzQnVmZmVyKGNodW5rKSlcbiAgICBlbmNvZGluZyA9ICdidWZmZXInO1xuICB2YXIgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG5cbiAgc3RhdGUubGVuZ3RoICs9IGxlbjtcblxuICB2YXIgcmV0ID0gc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgLy8gd2UgbXVzdCBlbnN1cmUgdGhhdCBwcmV2aW91cyBuZWVkRHJhaW4gd2lsbCBub3QgYmUgcmVzZXQgdG8gZmFsc2UuXG4gIGlmICghcmV0KVxuICAgIHN0YXRlLm5lZWREcmFpbiA9IHRydWU7XG5cbiAgaWYgKHN0YXRlLndyaXRpbmcgfHwgc3RhdGUuY29ya2VkKVxuICAgIHN0YXRlLmJ1ZmZlci5wdXNoKG5ldyBXcml0ZVJlcShjaHVuaywgZW5jb2RpbmcsIGNiKSk7XG4gIGVsc2VcbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW47XG4gIHN0YXRlLndyaXRlY2IgPSBjYjtcbiAgc3RhdGUud3JpdGluZyA9IHRydWU7XG4gIHN0YXRlLnN5bmMgPSB0cnVlO1xuICBpZiAod3JpdGV2KVxuICAgIHN0cmVhbS5fd3JpdGV2KGNodW5rLCBzdGF0ZS5vbndyaXRlKTtcbiAgZWxzZVxuICAgIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKTtcbiAgc3RhdGUuc3luYyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKSB7XG4gIGlmIChzeW5jKVxuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICAgIGNiKGVyKTtcbiAgICB9KTtcbiAgZWxzZSB7XG4gICAgc3RhdGUucGVuZGluZ2NiLS07XG4gICAgY2IoZXIpO1xuICB9XG5cbiAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbn1cblxuZnVuY3Rpb24gb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKSB7XG4gIHN0YXRlLndyaXRpbmcgPSBmYWxzZTtcbiAgc3RhdGUud3JpdGVjYiA9IG51bGw7XG4gIHN0YXRlLmxlbmd0aCAtPSBzdGF0ZS53cml0ZWxlbjtcbiAgc3RhdGUud3JpdGVsZW4gPSAwO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlKHN0cmVhbSwgZXIpIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICB2YXIgc3luYyA9IHN0YXRlLnN5bmM7XG4gIHZhciBjYiA9IHN0YXRlLndyaXRlY2I7XG5cbiAgb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKTtcblxuICBpZiAoZXIpXG4gICAgb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIHN5bmMsIGVyLCBjYik7XG4gIGVsc2Uge1xuICAgIC8vIENoZWNrIGlmIHdlJ3JlIGFjdHVhbGx5IHJlYWR5IHRvIGZpbmlzaCwgYnV0IGRvbid0IGVtaXQgeWV0XG4gICAgdmFyIGZpbmlzaGVkID0gbmVlZEZpbmlzaChzdHJlYW0sIHN0YXRlKTtcblxuICAgIGlmICghZmluaXNoZWQgJiZcbiAgICAgICAgIXN0YXRlLmNvcmtlZCAmJlxuICAgICAgICAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJlxuICAgICAgICBzdGF0ZS5idWZmZXIubGVuZ3RoKSB7XG4gICAgICBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoc3luYykge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgICAgYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpIHtcbiAgaWYgKCFmaW5pc2hlZClcbiAgICBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSk7XG4gIHN0YXRlLnBlbmRpbmdjYi0tO1xuICBjYigpO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuLy8gTXVzdCBmb3JjZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gbmV4dFRpY2ssIHNvIHRoYXQgd2UgZG9uJ3Rcbi8vIGVtaXQgJ2RyYWluJyBiZWZvcmUgdGhlIHdyaXRlKCkgY29uc3VtZXIgZ2V0cyB0aGUgJ2ZhbHNlJyByZXR1cm5cbi8vIHZhbHVlLCBhbmQgaGFzIGEgY2hhbmNlIHRvIGF0dGFjaCBhICdkcmFpbicgbGlzdGVuZXIuXG5mdW5jdGlvbiBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLm5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpO1xuICB9XG59XG5cblxuLy8gaWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nLCB0aGVuIHByb2Nlc3MgaXRcbmZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IHRydWU7XG5cbiAgaWYgKHN0cmVhbS5fd3JpdGV2ICYmIHN0YXRlLmJ1ZmZlci5sZW5ndGggPiAxKSB7XG4gICAgLy8gRmFzdCBjYXNlLCB3cml0ZSBldmVyeXRoaW5nIHVzaW5nIF93cml0ZXYoKVxuICAgIHZhciBjYnMgPSBbXTtcbiAgICBmb3IgKHZhciBjID0gMDsgYyA8IHN0YXRlLmJ1ZmZlci5sZW5ndGg7IGMrKylcbiAgICAgIGNicy5wdXNoKHN0YXRlLmJ1ZmZlcltjXS5jYWxsYmFjayk7XG5cbiAgICAvLyBjb3VudCB0aGUgb25lIHdlIGFyZSBhZGRpbmcsIGFzIHdlbGwuXG4gICAgLy8gVE9ETyhpc2FhY3MpIGNsZWFuIHRoaXMgdXBcbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIHRydWUsIHN0YXRlLmxlbmd0aCwgc3RhdGUuYnVmZmVyLCAnJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNicy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICAgICAgY2JzW2ldKGVycik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDbGVhciBidWZmZXJcbiAgICBzdGF0ZS5idWZmZXIgPSBbXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBTbG93IGNhc2UsIHdyaXRlIGNodW5rcyBvbmUtYnktb25lXG4gICAgZm9yICh2YXIgYyA9IDA7IGMgPCBzdGF0ZS5idWZmZXIubGVuZ3RoOyBjKyspIHtcbiAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmJ1ZmZlcltjXTtcbiAgICAgIHZhciBjaHVuayA9IGVudHJ5LmNodW5rO1xuICAgICAgdmFyIGVuY29kaW5nID0gZW50cnkuZW5jb2Rpbmc7XG4gICAgICB2YXIgY2IgPSBlbnRyeS5jYWxsYmFjaztcbiAgICAgIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcblxuICAgICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcblxuICAgICAgLy8gaWYgd2UgZGlkbid0IGNhbGwgdGhlIG9ud3JpdGUgaW1tZWRpYXRlbHksIHRoZW5cbiAgICAgIC8vIGl0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0IGRvZXMuXG4gICAgICAvLyBhbHNvLCB0aGF0IG1lYW5zIHRoYXQgdGhlIGNodW5rIGFuZCBjYiBhcmUgY3VycmVudGx5XG4gICAgICAvLyBiZWluZyBwcm9jZXNzZWQsIHNvIG1vdmUgdGhlIGJ1ZmZlciBjb3VudGVyIHBhc3QgdGhlbS5cbiAgICAgIGlmIChzdGF0ZS53cml0aW5nKSB7XG4gICAgICAgIGMrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGMgPCBzdGF0ZS5idWZmZXIubGVuZ3RoKVxuICAgICAgc3RhdGUuYnVmZmVyID0gc3RhdGUuYnVmZmVyLnNsaWNlKGMpO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlLmJ1ZmZlci5sZW5ndGggPSAwO1xuICB9XG5cbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IGZhbHNlO1xufVxuXG5Xcml0YWJsZS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpKTtcblxufTtcblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgPSBudWxsO1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmICh1dGlsLmlzRnVuY3Rpb24oY2h1bmspKSB7XG4gICAgY2IgPSBjaHVuaztcbiAgICBjaHVuayA9IG51bGw7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9IGVsc2UgaWYgKHV0aWwuaXNGdW5jdGlvbihlbmNvZGluZykpIHtcbiAgICBjYiA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmICghdXRpbC5pc051bGxPclVuZGVmaW5lZChjaHVuaykpXG4gICAgdGhpcy53cml0ZShjaHVuaywgZW5jb2RpbmcpO1xuXG4gIC8vIC5lbmQoKSBmdWxseSB1bmNvcmtzXG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQgPSAxO1xuICAgIHRoaXMudW5jb3JrKCk7XG4gIH1cblxuICAvLyBpZ25vcmUgdW5uZWNlc3NhcnkgZW5kKCkgY2FsbHMuXG4gIGlmICghc3RhdGUuZW5kaW5nICYmICFzdGF0ZS5maW5pc2hlZClcbiAgICBlbmRXcml0YWJsZSh0aGlzLCBzdGF0ZSwgY2IpO1xufTtcblxuXG5mdW5jdGlvbiBuZWVkRmluaXNoKHN0cmVhbSwgc3RhdGUpIHtcbiAgcmV0dXJuIChzdGF0ZS5lbmRpbmcgJiZcbiAgICAgICAgICBzdGF0ZS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAhc3RhdGUuZmluaXNoZWQgJiZcbiAgICAgICAgICAhc3RhdGUud3JpdGluZyk7XG59XG5cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQpIHtcbiAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIG5lZWQgPSBuZWVkRmluaXNoKHN0cmVhbSwgc3RhdGUpO1xuICBpZiAobmVlZCkge1xuICAgIGlmIChzdGF0ZS5wZW5kaW5nY2IgPT09IDApIHtcbiAgICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgICAgIHN0YXRlLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5lbWl0KCdmaW5pc2gnKTtcbiAgICB9IGVsc2VcbiAgICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmVlZDtcbn1cblxuZnVuY3Rpb24gZW5kV3JpdGFibGUoc3RyZWFtLCBzdGF0ZSwgY2IpIHtcbiAgc3RhdGUuZW5kaW5nID0gdHJ1ZTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIGlmIChjYikge1xuICAgIGlmIChzdGF0ZS5maW5pc2hlZClcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2IpO1xuICAgIGVsc2VcbiAgICAgIHN0cmVhbS5vbmNlKCdmaW5pc2gnLCBjYik7XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xufVxuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcycpO1xuZXhwb3J0cy5TdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKTtcbmV4cG9ydHMuUmVhZGFibGUgPSBleHBvcnRzO1xuZXhwb3J0cy5Xcml0YWJsZSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fd3JpdGFibGUuanMnKTtcbmV4cG9ydHMuRHVwbGV4ID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9kdXBsZXguanMnKTtcbmV4cG9ydHMuVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMnKTtcbmV4cG9ydHMuUGFzc1Rocm91Z2ggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzJyk7XG4iLCIvLyBwcm90b3R5cGUgY2xhc3MgZm9yIGhhc2ggZnVuY3Rpb25zXG5mdW5jdGlvbiBIYXNoIChibG9ja1NpemUsIGZpbmFsU2l6ZSkge1xuICB0aGlzLl9ibG9jayA9IG5ldyBCdWZmZXIoYmxvY2tTaXplKVxuICB0aGlzLl9maW5hbFNpemUgPSBmaW5hbFNpemVcbiAgdGhpcy5fYmxvY2tTaXplID0gYmxvY2tTaXplXG4gIHRoaXMuX2xlbiA9IDBcbiAgdGhpcy5fcyA9IDBcbn1cblxuSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuYykge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jID0gZW5jIHx8ICd1dGY4J1xuICAgIGRhdGEgPSBuZXcgQnVmZmVyKGRhdGEsIGVuYylcbiAgfVxuXG4gIHZhciBsID0gdGhpcy5fbGVuICs9IGRhdGEubGVuZ3RoXG4gIHZhciBzID0gdGhpcy5fcyB8fCAwXG4gIHZhciBmID0gMFxuICB2YXIgYnVmZmVyID0gdGhpcy5fYmxvY2tcblxuICB3aGlsZSAocyA8IGwpIHtcbiAgICB2YXIgdCA9IE1hdGgubWluKGRhdGEubGVuZ3RoLCBmICsgdGhpcy5fYmxvY2tTaXplIC0gKHMgJSB0aGlzLl9ibG9ja1NpemUpKVxuICAgIHZhciBjaCA9ICh0IC0gZilcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2g7IGkrKykge1xuICAgICAgYnVmZmVyWyhzICUgdGhpcy5fYmxvY2tTaXplKSArIGldID0gZGF0YVtpICsgZl1cbiAgICB9XG5cbiAgICBzICs9IGNoXG4gICAgZiArPSBjaFxuXG4gICAgaWYgKChzICUgdGhpcy5fYmxvY2tTaXplKSA9PT0gMCkge1xuICAgICAgdGhpcy5fdXBkYXRlKGJ1ZmZlcilcbiAgICB9XG4gIH1cbiAgdGhpcy5fcyA9IHNcblxuICByZXR1cm4gdGhpc1xufVxuXG5IYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIC8vIFN1cHBvc2UgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSBNLCBpbiBiaXRzLCBpcyBsXG4gIHZhciBsID0gdGhpcy5fbGVuICogOFxuXG4gIC8vIEFwcGVuZCB0aGUgYml0IDEgdG8gdGhlIGVuZCBvZiB0aGUgbWVzc2FnZVxuICB0aGlzLl9ibG9ja1t0aGlzLl9sZW4gJSB0aGlzLl9ibG9ja1NpemVdID0gMHg4MFxuXG4gIC8vIGFuZCB0aGVuIGsgemVybyBiaXRzLCB3aGVyZSBrIGlzIHRoZSBzbWFsbGVzdCBub24tbmVnYXRpdmUgc29sdXRpb24gdG8gdGhlIGVxdWF0aW9uIChsICsgMSArIGspID09PSBmaW5hbFNpemUgbW9kIGJsb2NrU2l6ZVxuICB0aGlzLl9ibG9jay5maWxsKDAsIHRoaXMuX2xlbiAlIHRoaXMuX2Jsb2NrU2l6ZSArIDEpXG5cbiAgaWYgKGwgJSAodGhpcy5fYmxvY2tTaXplICogOCkgPj0gdGhpcy5fZmluYWxTaXplICogOCkge1xuICAgIHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jaylcbiAgICB0aGlzLl9ibG9jay5maWxsKDApXG4gIH1cblxuICAvLyB0byB0aGlzIGFwcGVuZCB0aGUgYmxvY2sgd2hpY2ggaXMgZXF1YWwgdG8gdGhlIG51bWJlciBsIHdyaXR0ZW4gaW4gYmluYXJ5XG4gIC8vIFRPRE86IGhhbmRsZSBjYXNlIHdoZXJlIGwgaXMgPiBNYXRoLnBvdygyLCAyOSlcbiAgdGhpcy5fYmxvY2sud3JpdGVJbnQzMkJFKGwsIHRoaXMuX2Jsb2NrU2l6ZSAtIDQpXG5cbiAgdmFyIGhhc2ggPSB0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spIHx8IHRoaXMuX2hhc2goKVxuXG4gIHJldHVybiBlbmMgPyBoYXNoLnRvU3RyaW5nKGVuYykgOiBoYXNoXG59XG5cbkhhc2gucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcignX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoXG4iLCIvKipcbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2VjdXJlIEhhc2ggQWxnb3JpdGhtLCBTSEEtMjU2LCBhcyBkZWZpbmVkXG4gKiBpbiBGSVBTIDE4MC0yXG4gKiBWZXJzaW9uIDIuMi1iZXRhIENvcHlyaWdodCBBbmdlbCBNYXJpbiwgUGF1bCBKb2huc3RvbiAyMDAwIC0gMjAwOS5cbiAqIE90aGVyIGNvbnRyaWJ1dG9yczogR3JlZyBIb2x0LCBBbmRyZXcgS2VwZXJ0LCBZZG5hciwgTG9zdGluZXRcbiAqXG4gKi9cblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIEhhc2ggPSByZXF1aXJlKCcuL2hhc2gnKVxuXG52YXIgSyA9IFtcbiAgMHg0MjhBMkY5OCwgMHg3MTM3NDQ5MSwgMHhCNUMwRkJDRiwgMHhFOUI1REJBNSxcbiAgMHgzOTU2QzI1QiwgMHg1OUYxMTFGMSwgMHg5MjNGODJBNCwgMHhBQjFDNUVENSxcbiAgMHhEODA3QUE5OCwgMHgxMjgzNUIwMSwgMHgyNDMxODVCRSwgMHg1NTBDN0RDMyxcbiAgMHg3MkJFNUQ3NCwgMHg4MERFQjFGRSwgMHg5QkRDMDZBNywgMHhDMTlCRjE3NCxcbiAgMHhFNDlCNjlDMSwgMHhFRkJFNDc4NiwgMHgwRkMxOURDNiwgMHgyNDBDQTFDQyxcbiAgMHgyREU5MkM2RiwgMHg0QTc0ODRBQSwgMHg1Q0IwQTlEQywgMHg3NkY5ODhEQSxcbiAgMHg5ODNFNTE1MiwgMHhBODMxQzY2RCwgMHhCMDAzMjdDOCwgMHhCRjU5N0ZDNyxcbiAgMHhDNkUwMEJGMywgMHhENUE3OTE0NywgMHgwNkNBNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN0I3MEE4NSwgMHgyRTFCMjEzOCwgMHg0RDJDNkRGQywgMHg1MzM4MEQxMyxcbiAgMHg2NTBBNzM1NCwgMHg3NjZBMEFCQiwgMHg4MUMyQzkyRSwgMHg5MjcyMkM4NSxcbiAgMHhBMkJGRThBMSwgMHhBODFBNjY0QiwgMHhDMjRCOEI3MCwgMHhDNzZDNTFBMyxcbiAgMHhEMTkyRTgxOSwgMHhENjk5MDYyNCwgMHhGNDBFMzU4NSwgMHgxMDZBQTA3MCxcbiAgMHgxOUE0QzExNiwgMHgxRTM3NkMwOCwgMHgyNzQ4Nzc0QywgMHgzNEIwQkNCNSxcbiAgMHgzOTFDMENCMywgMHg0RUQ4QUE0QSwgMHg1QjlDQ0E0RiwgMHg2ODJFNkZGMyxcbiAgMHg3NDhGODJFRSwgMHg3OEE1NjM2RiwgMHg4NEM4NzgxNCwgMHg4Q0M3MDIwOCxcbiAgMHg5MEJFRkZGQSwgMHhBNDUwNkNFQiwgMHhCRUY5QTNGNywgMHhDNjcxNzhGMlxuXVxuXG52YXIgVyA9IG5ldyBBcnJheSg2NClcblxuZnVuY3Rpb24gU2hhMjU2ICgpIHtcbiAgdGhpcy5pbml0KClcblxuICB0aGlzLl93ID0gVyAvLyBuZXcgQXJyYXkoNjQpXG5cbiAgSGFzaC5jYWxsKHRoaXMsIDY0LCA1Nilcbn1cblxuaW5oZXJpdHMoU2hhMjU2LCBIYXNoKVxuXG5TaGEyNTYucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2EgPSAweDZhMDllNjY3IHwgMFxuICB0aGlzLl9iID0gMHhiYjY3YWU4NSB8IDBcbiAgdGhpcy5fYyA9IDB4M2M2ZWYzNzIgfCAwXG4gIHRoaXMuX2QgPSAweGE1NGZmNTNhIHwgMFxuICB0aGlzLl9lID0gMHg1MTBlNTI3ZiB8IDBcbiAgdGhpcy5fZiA9IDB4OWIwNTY4OGMgfCAwXG4gIHRoaXMuX2cgPSAweDFmODNkOWFiIHwgMFxuICB0aGlzLl9oID0gMHg1YmUwY2QxOSB8IDBcblxuICByZXR1cm4gdGhpc1xufVxuXG5mdW5jdGlvbiBDaCAoeCwgeSwgeikge1xuICByZXR1cm4geiBeICh4ICYgKHkgXiB6KSlcbn1cblxuZnVuY3Rpb24gTWFqICh4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIHwgKHogJiAoeCB8IHkpKVxufVxuXG5mdW5jdGlvbiBTaWdtYTAgKHgpIHtcbiAgcmV0dXJuICh4ID4+PiAyIHwgeCA8PCAzMCkgXiAoeCA+Pj4gMTMgfCB4IDw8IDE5KSBeICh4ID4+PiAyMiB8IHggPDwgMTApXG59XG5cbmZ1bmN0aW9uIFNpZ21hMSAoeCkge1xuICByZXR1cm4gKHggPj4+IDYgfCB4IDw8IDI2KSBeICh4ID4+PiAxMSB8IHggPDwgMjEpIF4gKHggPj4+IDI1IHwgeCA8PCA3KVxufVxuXG5mdW5jdGlvbiBHYW1tYTAgKHgpIHtcbiAgcmV0dXJuICh4ID4+PiA3IHwgeCA8PCAyNSkgXiAoeCA+Pj4gMTggfCB4IDw8IDE0KSBeICh4ID4+PiAzKVxufVxuXG5mdW5jdGlvbiBHYW1tYTEgKHgpIHtcbiAgcmV0dXJuICh4ID4+PiAxNyB8IHggPDwgMTUpIF4gKHggPj4+IDE5IHwgeCA8PCAxMykgXiAoeCA+Pj4gMTApXG59XG5cblNoYTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChNKSB7XG4gIHZhciBXID0gdGhpcy5fd1xuXG4gIHZhciBhID0gdGhpcy5fYSB8IDBcbiAgdmFyIGIgPSB0aGlzLl9iIHwgMFxuICB2YXIgYyA9IHRoaXMuX2MgfCAwXG4gIHZhciBkID0gdGhpcy5fZCB8IDBcbiAgdmFyIGUgPSB0aGlzLl9lIHwgMFxuICB2YXIgZiA9IHRoaXMuX2YgfCAwXG4gIHZhciBnID0gdGhpcy5fZyB8IDBcbiAgdmFyIGggPSB0aGlzLl9oIHwgMFxuXG4gIHZhciBqID0gMFxuXG4gIGZ1bmN0aW9uIGNhbGNXICgpIHsgcmV0dXJuIEdhbW1hMShXW2ogLSAyXSkgKyBXW2ogLSA3XSArIEdhbW1hMChXW2ogLSAxNV0pICsgV1tqIC0gMTZdIH1cbiAgZnVuY3Rpb24gbG9vcCAodykge1xuICAgIFdbal0gPSB3XG5cbiAgICB2YXIgVDEgPSBoICsgU2lnbWExKGUpICsgQ2goZSwgZiwgZykgKyBLW2pdICsgd1xuICAgIHZhciBUMiA9IFNpZ21hMChhKSArIE1haihhLCBiLCBjKVxuXG4gICAgaCA9IGdcbiAgICBnID0gZlxuICAgIGYgPSBlXG4gICAgZSA9IGQgKyBUMVxuICAgIGQgPSBjXG4gICAgYyA9IGJcbiAgICBiID0gYVxuICAgIGEgPSBUMSArIFQyXG5cbiAgICBqKytcbiAgfVxuXG4gIHdoaWxlIChqIDwgMTYpIGxvb3AoTS5yZWFkSW50MzJCRShqICogNCkpXG4gIHdoaWxlIChqIDwgNjQpIGxvb3AoY2FsY1coKSlcblxuICB0aGlzLl9hID0gKGEgKyB0aGlzLl9hKSB8IDBcbiAgdGhpcy5fYiA9IChiICsgdGhpcy5fYikgfCAwXG4gIHRoaXMuX2MgPSAoYyArIHRoaXMuX2MpIHwgMFxuICB0aGlzLl9kID0gKGQgKyB0aGlzLl9kKSB8IDBcbiAgdGhpcy5fZSA9IChlICsgdGhpcy5fZSkgfCAwXG4gIHRoaXMuX2YgPSAoZiArIHRoaXMuX2YpIHwgMFxuICB0aGlzLl9nID0gKGcgKyB0aGlzLl9nKSB8IDBcbiAgdGhpcy5faCA9IChoICsgdGhpcy5faCkgfCAwXG59XG5cblNoYTI1Ni5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gbmV3IEJ1ZmZlcigzMilcblxuICBILndyaXRlSW50MzJCRSh0aGlzLl9hLCAwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9iLCA0KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9jLCA4KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9kLCAxMilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZSwgMTYpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2YsIDIwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9nLCAyNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5faCwgMjgpXG5cbiAgcmV0dXJuIEhcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGEyNTZcbiIsInZhciBlc3MgPSByZXF1aXJlKCdldmVudC1zb3VyY2Utc3RyZWFtJylcbnZhciBuZXRzID0gcmVxdWlyZSgnbmV0cycpXG52YXIgcHVtcCA9IHJlcXVpcmUoJ3B1bXAnKVxudmFyIHRocm91Z2ggPSByZXF1aXJlKCd0aHJvdWdoMicpXG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkge31cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXBwLCB1cmxzKSB7XG4gIGlmICghYXBwKSB0aHJvdyBuZXcgRXJyb3IoJ2FwcCBuYW1lIHJlcXVpcmVkJylcbiAgaWYgKCF1cmxzIHx8ICF1cmxzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdzaWduYWxodWIgdXJsKHMpIHJlcXVpcmVkJylcblxuICB2YXIgdGhhdCA9IHt9XG4gIGlmICghQXJyYXkuaXNBcnJheSh1cmxzKSkgdXJscyA9IFt1cmxzXVxuXG4gIHVybHMgPSB1cmxzLm1hcChmdW5jdGlvbiAodXJsKSB7XG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgICByZXR1cm4gdXJsLmluZGV4T2YoJzovLycpID09PSAtMSA/ICdodHRwOi8vJyArIHVybCA6IHVybFxuICB9KVxuXG4gIHRoYXQuc3Vic2NyaWJlID0gZnVuY3Rpb24gKGNoYW5uZWwpIHtcbiAgICB2YXIgZW5kcG9pbnRcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGNoYW5uZWwpKSB7XG4gICAgICBlbmRwb2ludCA9IGNoYW5uZWwuam9pbignLCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZHBvaW50ID0gY2hhbm5lbFxuICAgIH1cblxuICAgIHZhciBhbGwgPSB0aHJvdWdoLm9iaigpXG4gICAgdmFyIHN0cmVhbXMgPSB1cmxzLm1hcChmdW5jdGlvbiAodXJsKSB7XG4gICAgICByZXR1cm4gZXNzKHVybCArICcvdjEvJyArIGFwcCArICcvJyArIGVuZHBvaW50LCB7anNvbjogdHJ1ZX0pXG4gICAgfSlcblxuICAgIGlmIChzdHJlYW1zLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHN0cmVhbXNbMF1cblxuICAgIHZhciBhbGwgPSB0aHJvdWdoLm9iaigpXG5cbiAgICBhbGwuc2V0TWF4TGlzdGVuZXJzKDApXG4gICAgc3RyZWFtcy5mb3JFYWNoKGZ1bmN0aW9uIChzdHJlYW0pIHtcbiAgICAgIHN0cmVhbS5vbignb3BlbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYWxsLmVtaXQoJ29wZW4nKVxuICAgICAgfSlcbiAgICAgIHB1bXAoc3RyZWFtLCBhbGwpXG4gICAgfSlcblxuICAgIHJldHVybiBhbGxcbiAgfVxuXG4gIHZhciBicm9hZGNhc3QgPSBmdW5jdGlvbiAodXJsLCBjaGFubmVsLCBtZXNzYWdlLCBjYikge1xuICAgIG5ldHMoe1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBqc29uOiBtZXNzYWdlLFxuICAgICAgdXJsOiB1cmwgKyAnL3YxLycgKyBhcHAgKyAnLycgKyBjaGFubmVsXG4gICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSAyMDApIHJldHVybiBjYihuZXcgRXJyb3IoJ0JhZCBzdGF0dXM6ICcgKyByZXMuc3RhdHVzQ29kZSkpXG4gICAgICBjYigpXG4gICAgfSlcbiAgfVxuXG4gIHRoYXQuYnJvYWRjYXN0ID0gZnVuY3Rpb24gKGNoYW5uZWwsIG1lc3NhZ2UsIGNiKSB7XG4gICAgaWYgKCFjYikgY2IgPSBub29wXG5cbiAgICB2YXIgcGVuZGluZyA9IHVybHMubGVuZ3RoXG4gICAgdmFyIGVycm9ycyA9IDBcblxuICAgIHVybHMuZm9yRWFjaChmdW5jdGlvbiAodXJsKSB7XG4gICAgICBicm9hZGNhc3QodXJsLCBjaGFubmVsLCBtZXNzYWdlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIpIGVycm9ycysrXG4gICAgICAgIGlmICgtLXBlbmRpbmcpIHJldHVyblxuICAgICAgICBpZiAoZXJyb3JzID09PSB1cmxzLmxlbmd0aCkgcmV0dXJuIGNiKGVycilcbiAgICAgICAgY2IoKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cbiIsInZhciB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUgKHYsIGIsIG8pIHtcbiAgdiA9IHYgPj0gMCA/IHYqMiA6IHYqLTIgLSAxXG4gIHZhciByID0gdmFyaW50LmVuY29kZSh2LCBiLCBvKVxuICBlbmNvZGUuYnl0ZXMgPSB2YXJpbnQuZW5jb2RlLmJ5dGVzXG4gIHJldHVybiByXG59XG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZSAoYiwgbykge1xuICB2YXIgdiA9IHZhcmludC5kZWNvZGUoYiwgbylcbiAgZGVjb2RlLmJ5dGVzID0gdmFyaW50LmRlY29kZS5ieXRlc1xuICByZXR1cm4gdiAmIDEgPyAodisxKSAvIC0yIDogdiAvIDJcbn1cblxuZXhwb3J0cy5lbmNvZGluZ0xlbmd0aCA9IGZ1bmN0aW9uICh2KSB7XG4gIHJldHVybiB2YXJpbnQuZW5jb2RpbmdMZW5ndGgodiA+PSAwID8gdioyIDogdiotMiAtIDEpXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlYWRcblxudmFyIE1TQiA9IDB4ODBcbiAgLCBSRVNUID0gMHg3RlxuXG5mdW5jdGlvbiByZWFkKGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciByZXMgICAgPSAwXG4gICAgLCBvZmZzZXQgPSBvZmZzZXQgfHwgMFxuICAgICwgc2hpZnQgID0gMFxuICAgICwgY291bnRlciA9IG9mZnNldFxuICAgICwgYlxuICAgICwgbCA9IGJ1Zi5sZW5ndGhcbiAgXG4gIGRvIHtcbiAgICBpZihjb3VudGVyID49IGwpIHtcbiAgICAgIHJlYWQuYnl0ZXNSZWFkID0gMFxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBiID0gYnVmW2NvdW50ZXIrK11cbiAgICByZXMgKz0gc2hpZnQgPCAyOFxuICAgICAgPyAoYiAmIFJFU1QpIDw8IHNoaWZ0XG4gICAgICA6IChiICYgUkVTVCkgKiBNYXRoLnBvdygyLCBzaGlmdClcbiAgICBzaGlmdCArPSA3XG4gIH0gd2hpbGUgKGIgPj0gTVNCKVxuICBcbiAgcmVhZC5ieXRlcyA9IGNvdW50ZXIgLSBvZmZzZXRcbiAgXG4gIHJldHVybiByZXNcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZW5jb2RlXG5cbnZhciBNU0IgPSAweDgwXG4gICwgUkVTVCA9IDB4N0ZcbiAgLCBNU0JBTEwgPSB+UkVTVFxuICAsIElOVCA9IE1hdGgucG93KDIsIDMxKVxuXG5mdW5jdGlvbiBlbmNvZGUobnVtLCBvdXQsIG9mZnNldCkge1xuICBvdXQgPSBvdXQgfHwgW11cbiAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDBcbiAgdmFyIG9sZE9mZnNldCA9IG9mZnNldFxuXG4gIHdoaWxlKG51bSA+PSBJTlQpIHtcbiAgICBvdXRbb2Zmc2V0KytdID0gKG51bSAmIDB4RkYpIHwgTVNCXG4gICAgbnVtIC89IDEyOFxuICB9XG4gIHdoaWxlKG51bSAmIE1TQkFMTCkge1xuICAgIG91dFtvZmZzZXQrK10gPSAobnVtICYgMHhGRikgfCBNU0JcbiAgICBudW0gPj4+PSA3XG4gIH1cbiAgb3V0W29mZnNldF0gPSBudW0gfCAwXG4gIFxuICBlbmNvZGUuYnl0ZXMgPSBvZmZzZXQgLSBvbGRPZmZzZXQgKyAxXG4gIFxuICByZXR1cm4gb3V0XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBlbmNvZGU6IHJlcXVpcmUoJy4vZW5jb2RlLmpzJylcbiAgLCBkZWNvZGU6IHJlcXVpcmUoJy4vZGVjb2RlLmpzJylcbiAgLCBlbmNvZGluZ0xlbmd0aDogcmVxdWlyZSgnLi9sZW5ndGguanMnKVxufVxuIiwiXG52YXIgTjEgPSBNYXRoLnBvdygyLCAgNylcbnZhciBOMiA9IE1hdGgucG93KDIsIDE0KVxudmFyIE4zID0gTWF0aC5wb3coMiwgMjEpXG52YXIgTjQgPSBNYXRoLnBvdygyLCAyOClcbnZhciBONSA9IE1hdGgucG93KDIsIDM1KVxudmFyIE42ID0gTWF0aC5wb3coMiwgNDIpXG52YXIgTjcgPSBNYXRoLnBvdygyLCA0OSlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSA8IE4xID8gMVxuICA6IHZhbHVlIDwgTjIgPyAyXG4gIDogdmFsdWUgPCBOMyA/IDNcbiAgOiB2YWx1ZSA8IE40ID8gNFxuICA6IHZhbHVlIDwgTjUgPyA1XG4gIDogdmFsdWUgPCBONiA/IDZcbiAgOiB2YWx1ZSA8IE43ID8gN1xuICA6ICAgICAgICAgICAgICA4XG4gIClcbn1cbiIsIi8qIGdsb2JhbCBCbG9iICovXG5cbm1vZHVsZS5leHBvcnRzID0gUGVlclxuXG52YXIgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzaW1wbGUtcGVlcicpXG52YXIgZ2V0QnJvd3NlclJUQyA9IHJlcXVpcmUoJ2dldC1icm93c2VyLXJ0YycpXG52YXIgaGF0ID0gcmVxdWlyZSgnaGF0JylcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCdpcy10eXBlZGFycmF5JylcbnZhciBvbmNlID0gcmVxdWlyZSgnb25jZScpXG52YXIgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcblxuaW5oZXJpdHMoUGVlciwgc3RyZWFtLkR1cGxleClcblxuLyoqXG4gKiBXZWJSVEMgcGVlciBjb25uZWN0aW9uLiBTYW1lIEFQSSBhcyBub2RlIGNvcmUgYG5ldC5Tb2NrZXRgLCBwbHVzIGEgZmV3IGV4dHJhIG1ldGhvZHMuXG4gKiBEdXBsZXggc3RyZWFtLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqL1xuZnVuY3Rpb24gUGVlciAob3B0cykge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgaWYgKCEoc2VsZiBpbnN0YW5jZW9mIFBlZXIpKSByZXR1cm4gbmV3IFBlZXIob3B0cylcbiAgc2VsZi5fZGVidWcoJ25ldyBwZWVyICVvJywgb3B0cylcblxuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuICBvcHRzLmFsbG93SGFsZk9wZW4gPSBmYWxzZVxuICBpZiAob3B0cy5oaWdoV2F0ZXJNYXJrID09IG51bGwpIG9wdHMuaGlnaFdhdGVyTWFyayA9IDEwMjQgKiAxMDI0XG5cbiAgc3RyZWFtLkR1cGxleC5jYWxsKHNlbGYsIG9wdHMpXG5cbiAgc2VsZi5pbml0aWF0b3IgPSBvcHRzLmluaXRpYXRvciB8fCBmYWxzZVxuICBzZWxmLmNoYW5uZWxDb25maWcgPSBvcHRzLmNoYW5uZWxDb25maWcgfHwgUGVlci5jaGFubmVsQ29uZmlnXG4gIHNlbGYuY2hhbm5lbE5hbWUgPSBvcHRzLmluaXRpYXRvciA/IChvcHRzLmNoYW5uZWxOYW1lIHx8IGhhdCgxNjApKSA6IG51bGxcbiAgc2VsZi5jb25maWcgPSBvcHRzLmNvbmZpZyB8fCBQZWVyLmNvbmZpZ1xuICBzZWxmLmNvbnN0cmFpbnRzID0gb3B0cy5jb25zdHJhaW50cyB8fCBQZWVyLmNvbnN0cmFpbnRzXG4gIHNlbGYub2ZmZXJDb25zdHJhaW50cyA9IG9wdHMub2ZmZXJDb25zdHJhaW50c1xuICBzZWxmLmFuc3dlckNvbnN0cmFpbnRzID0gb3B0cy5hbnN3ZXJDb25zdHJhaW50c1xuICBzZWxmLnJlY29ubmVjdFRpbWVyID0gb3B0cy5yZWNvbm5lY3RUaW1lciB8fCBmYWxzZVxuICBzZWxmLnNkcFRyYW5zZm9ybSA9IG9wdHMuc2RwVHJhbnNmb3JtIHx8IGZ1bmN0aW9uIChzZHApIHsgcmV0dXJuIHNkcCB9XG4gIHNlbGYuc3RyZWFtID0gb3B0cy5zdHJlYW0gfHwgZmFsc2VcbiAgc2VsZi50cmlja2xlID0gb3B0cy50cmlja2xlICE9PSB1bmRlZmluZWQgPyBvcHRzLnRyaWNrbGUgOiB0cnVlXG5cbiAgc2VsZi5kZXN0cm95ZWQgPSBmYWxzZVxuICBzZWxmLmNvbm5lY3RlZCA9IGZhbHNlXG5cbiAgLy8gc28gUGVlciBvYmplY3QgYWx3YXlzIGhhcyBzYW1lIHNoYXBlIChWOCBvcHRpbWl6YXRpb24pXG4gIHNlbGYucmVtb3RlQWRkcmVzcyA9IHVuZGVmaW5lZFxuICBzZWxmLnJlbW90ZUZhbWlseSA9IHVuZGVmaW5lZFxuICBzZWxmLnJlbW90ZVBvcnQgPSB1bmRlZmluZWRcbiAgc2VsZi5sb2NhbEFkZHJlc3MgPSB1bmRlZmluZWRcbiAgc2VsZi5sb2NhbFBvcnQgPSB1bmRlZmluZWRcblxuICBzZWxmLl9pc1dydGMgPSAhIW9wdHMud3J0YyAvLyBIQUNLOiB0byBmaXggYHdydGNgIGJ1Zy4gU2VlIGlzc3VlOiAjNjBcbiAgc2VsZi5fd3J0YyA9IG9wdHMud3J0YyB8fCBnZXRCcm93c2VyUlRDKClcbiAgaWYgKCFzZWxmLl93cnRjKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFdlYlJUQyBzdXBwb3J0OiBTcGVjaWZ5IGBvcHRzLndydGNgIG9wdGlvbiBpbiB0aGlzIGVudmlyb25tZW50JylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBXZWJSVEMgc3VwcG9ydDogTm90IGEgc3VwcG9ydGVkIGJyb3dzZXInKVxuICAgIH1cbiAgfVxuXG4gIHNlbGYuX21heEJ1ZmZlcmVkQW1vdW50ID0gb3B0cy5oaWdoV2F0ZXJNYXJrXG4gIHNlbGYuX3BjUmVhZHkgPSBmYWxzZVxuICBzZWxmLl9jaGFubmVsUmVhZHkgPSBmYWxzZVxuICBzZWxmLl9pY2VDb21wbGV0ZSA9IGZhbHNlIC8vIGljZSBjYW5kaWRhdGUgdHJpY2tsZSBkb25lIChnb3QgbnVsbCBjYW5kaWRhdGUpXG4gIHNlbGYuX2NoYW5uZWwgPSBudWxsXG4gIHNlbGYuX3BlbmRpbmdDYW5kaWRhdGVzID0gW11cblxuICBzZWxmLl9jaHVuayA9IG51bGxcbiAgc2VsZi5fY2IgPSBudWxsXG4gIHNlbGYuX2ludGVydmFsID0gbnVsbFxuICBzZWxmLl9yZWNvbm5lY3RUaW1lb3V0ID0gbnVsbFxuXG4gIHNlbGYuX3BjID0gbmV3IChzZWxmLl93cnRjLlJUQ1BlZXJDb25uZWN0aW9uKShzZWxmLmNvbmZpZywgc2VsZi5jb25zdHJhaW50cylcbiAgc2VsZi5fcGMub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBzZWxmLl9vbkljZUNvbm5lY3Rpb25TdGF0ZUNoYW5nZS5iaW5kKHNlbGYpXG4gIHNlbGYuX3BjLm9uc2lnbmFsaW5nc3RhdGVjaGFuZ2UgPSBzZWxmLl9vblNpZ25hbGluZ1N0YXRlQ2hhbmdlLmJpbmQoc2VsZilcbiAgc2VsZi5fcGMub25pY2VjYW5kaWRhdGUgPSBzZWxmLl9vbkljZUNhbmRpZGF0ZS5iaW5kKHNlbGYpXG5cbiAgaWYgKHNlbGYuc3RyZWFtKSBzZWxmLl9wYy5hZGRTdHJlYW0oc2VsZi5zdHJlYW0pXG4gIHNlbGYuX3BjLm9uYWRkc3RyZWFtID0gc2VsZi5fb25BZGRTdHJlYW0uYmluZChzZWxmKVxuXG4gIGlmIChzZWxmLmluaXRpYXRvcikge1xuICAgIHNlbGYuX3NldHVwRGF0YSh7IGNoYW5uZWw6IHNlbGYuX3BjLmNyZWF0ZURhdGFDaGFubmVsKHNlbGYuY2hhbm5lbE5hbWUsIHNlbGYuY2hhbm5lbENvbmZpZykgfSlcbiAgICBzZWxmLl9wYy5vbm5lZ290aWF0aW9ubmVlZGVkID0gb25jZShzZWxmLl9jcmVhdGVPZmZlci5iaW5kKHNlbGYpKVxuICAgIC8vIE9ubHkgQ2hyb21lIHRyaWdnZXJzIFwibmVnb3RpYXRpb25uZWVkZWRcIjsgdGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIG90aGVyXG4gICAgLy8gaW1wbGVtZW50YXRpb25zXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICF3aW5kb3cud2Via2l0UlRDUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHNlbGYuX3BjLm9ubmVnb3RpYXRpb25uZWVkZWQoKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzZWxmLl9wYy5vbmRhdGFjaGFubmVsID0gc2VsZi5fc2V0dXBEYXRhLmJpbmQoc2VsZilcbiAgfVxuXG4gIHNlbGYub24oJ2ZpbmlzaCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2VsZi5jb25uZWN0ZWQpIHtcbiAgICAgIC8vIFdoZW4gbG9jYWwgcGVlciBpcyBmaW5pc2hlZCB3cml0aW5nLCBjbG9zZSBjb25uZWN0aW9uIHRvIHJlbW90ZSBwZWVyLlxuICAgICAgLy8gSGFsZiBvcGVuIGNvbm5lY3Rpb25zIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC5cbiAgICAgIC8vIFdhaXQgYSBiaXQgYmVmb3JlIGRlc3Ryb3lpbmcgc28gdGhlIGRhdGFjaGFubmVsIGZsdXNoZXMuXG4gICAgICAvLyBUT0RPOiBpcyB0aGVyZSBhIG1vcmUgcmVsaWFibGUgd2F5IHRvIGFjY29tcGxpc2ggdGhpcz9cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLl9kZXN0cm95KClcbiAgICAgIH0sIDEwMClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgZGF0YSBjaGFubmVsIGlzIG5vdCBjb25uZWN0ZWQgd2hlbiBsb2NhbCBwZWVyIGlzIGZpbmlzaGVkIHdyaXRpbmcsIHdhaXQgdW50aWxcbiAgICAgIC8vIGRhdGEgaXMgZmx1c2hlZCB0byBuZXR3b3JrIGF0IFwiY29ubmVjdFwiIGV2ZW50LlxuICAgICAgLy8gVE9ETzogaXMgdGhlcmUgYSBtb3JlIHJlbGlhYmxlIHdheSB0byBhY2NvbXBsaXNoIHRoaXM/XG4gICAgICBzZWxmLm9uY2UoJ2Nvbm5lY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNlbGYuX2Rlc3Ryb3koKVxuICAgICAgICB9LCAxMDApXG4gICAgICB9KVxuICAgIH1cbiAgfSlcbn1cblxuUGVlci5XRUJSVENfU1VQUE9SVCA9ICEhZ2V0QnJvd3NlclJUQygpXG5cbi8qKlxuICogRXhwb3NlIGNvbmZpZywgY29uc3RyYWludHMsIGFuZCBkYXRhIGNoYW5uZWwgY29uZmlnIGZvciBvdmVycmlkaW5nIGFsbCBQZWVyXG4gKiBpbnN0YW5jZXMuIE90aGVyd2lzZSwganVzdCBzZXQgb3B0cy5jb25maWcsIG9wdHMuY29uc3RyYWludHMsIG9yIG9wdHMuY2hhbm5lbENvbmZpZ1xuICogd2hlbiBjb25zdHJ1Y3RpbmcgYSBQZWVyLlxuICovXG5QZWVyLmNvbmZpZyA9IHtcbiAgaWNlU2VydmVyczogW1xuICAgIHtcbiAgICAgIHVybDogJ3N0dW46MjMuMjEuMTUwLjEyMScsIC8vIGRlcHJlY2F0ZWQsIHJlcGxhY2VkIGJ5IGB1cmxzYFxuICAgICAgdXJsczogJ3N0dW46MjMuMjEuMTUwLjEyMSdcbiAgICB9XG4gIF1cbn1cblBlZXIuY29uc3RyYWludHMgPSB7fVxuUGVlci5jaGFubmVsQ29uZmlnID0ge31cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFBlZXIucHJvdG90eXBlLCAnYnVmZmVyU2l6ZScsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgcmV0dXJuIChzZWxmLl9jaGFubmVsICYmIHNlbGYuX2NoYW5uZWwuYnVmZmVyZWRBbW91bnQpIHx8IDBcbiAgfVxufSlcblxuUGVlci5wcm90b3R5cGUuYWRkcmVzcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHJldHVybiB7IHBvcnQ6IHNlbGYubG9jYWxQb3J0LCBmYW1pbHk6ICdJUHY0JywgYWRkcmVzczogc2VsZi5sb2NhbEFkZHJlc3MgfVxufVxuXG5QZWVyLnByb3RvdHlwZS5zaWduYWwgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgaWYgKHNlbGYuZGVzdHJveWVkKSB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBzaWduYWwgYWZ0ZXIgcGVlciBpcyBkZXN0cm95ZWQnKVxuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBkYXRhID0ge31cbiAgICB9XG4gIH1cbiAgc2VsZi5fZGVidWcoJ3NpZ25hbCgpJylcblxuICBmdW5jdGlvbiBhZGRJY2VDYW5kaWRhdGUgKGNhbmRpZGF0ZSkge1xuICAgIHRyeSB7XG4gICAgICBzZWxmLl9wYy5hZGRJY2VDYW5kaWRhdGUoXG4gICAgICAgIG5ldyBzZWxmLl93cnRjLlJUQ0ljZUNhbmRpZGF0ZShjYW5kaWRhdGUpLCBub29wLCBzZWxmLl9vbkVycm9yLmJpbmQoc2VsZilcbiAgICAgIClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNlbGYuX2Rlc3Ryb3kobmV3IEVycm9yKCdlcnJvciBhZGRpbmcgY2FuZGlkYXRlOiAnICsgZXJyLm1lc3NhZ2UpKVxuICAgIH1cbiAgfVxuXG4gIGlmIChkYXRhLnNkcCkge1xuICAgIHNlbGYuX3BjLnNldFJlbW90ZURlc2NyaXB0aW9uKG5ldyAoc2VsZi5fd3J0Yy5SVENTZXNzaW9uRGVzY3JpcHRpb24pKGRhdGEpLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoc2VsZi5kZXN0cm95ZWQpIHJldHVyblxuICAgICAgaWYgKHNlbGYuX3BjLnJlbW90ZURlc2NyaXB0aW9uLnR5cGUgPT09ICdvZmZlcicpIHNlbGYuX2NyZWF0ZUFuc3dlcigpXG5cbiAgICAgIHNlbGYuX3BlbmRpbmdDYW5kaWRhdGVzLmZvckVhY2goYWRkSWNlQ2FuZGlkYXRlKVxuICAgICAgc2VsZi5fcGVuZGluZ0NhbmRpZGF0ZXMgPSBbXVxuICAgIH0sIHNlbGYuX29uRXJyb3IuYmluZChzZWxmKSlcbiAgfVxuICBpZiAoZGF0YS5jYW5kaWRhdGUpIHtcbiAgICBpZiAoc2VsZi5fcGMucmVtb3RlRGVzY3JpcHRpb24pIGFkZEljZUNhbmRpZGF0ZShkYXRhLmNhbmRpZGF0ZSlcbiAgICBlbHNlIHNlbGYuX3BlbmRpbmdDYW5kaWRhdGVzLnB1c2goZGF0YS5jYW5kaWRhdGUpXG4gIH1cbiAgaWYgKCFkYXRhLnNkcCAmJiAhZGF0YS5jYW5kaWRhdGUpIHtcbiAgICBzZWxmLl9kZXN0cm95KG5ldyBFcnJvcignc2lnbmFsKCkgY2FsbGVkIHdpdGggaW52YWxpZCBzaWduYWwgZGF0YScpKVxuICB9XG59XG5cbi8qKlxuICogU2VuZCB0ZXh0L2JpbmFyeSBkYXRhIHRvIHRoZSByZW1vdGUgcGVlci5cbiAqIEBwYXJhbSB7VHlwZWRBcnJheVZpZXd8QXJyYXlCdWZmZXJ8QnVmZmVyfHN0cmluZ3xCbG9ifE9iamVjdH0gY2h1bmtcbiAqL1xuUGVlci5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIChjaHVuaykge1xuICB2YXIgc2VsZiA9IHRoaXNcblxuICBpZiAoIWlzVHlwZWRBcnJheS5zdHJpY3QoY2h1bmspICYmICEoY2h1bmsgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgJiZcbiAgICAhQnVmZmVyLmlzQnVmZmVyKGNodW5rKSAmJiB0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmXG4gICAgKHR5cGVvZiBCbG9iID09PSAndW5kZWZpbmVkJyB8fCAhKGNodW5rIGluc3RhbmNlb2YgQmxvYikpKSB7XG4gICAgY2h1bmsgPSBKU09OLnN0cmluZ2lmeShjaHVuaylcbiAgfVxuXG4gIC8vIEhBQ0s6IGB3cnRjYCBtb2R1bGUgZG9lc24ndCBhY2NlcHQgbm9kZS5qcyBidWZmZXIuIFNlZSBpc3N1ZTogIzYwXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmspICYmIHNlbGYuX2lzV3J0Yykge1xuICAgIGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoY2h1bmspXG4gIH1cblxuICB2YXIgbGVuID0gY2h1bmsubGVuZ3RoIHx8IGNodW5rLmJ5dGVMZW5ndGggfHwgY2h1bmsuc2l6ZVxuICBzZWxmLl9jaGFubmVsLnNlbmQoY2h1bmspXG4gIHNlbGYuX2RlYnVnKCd3cml0ZTogJWQgYnl0ZXMnLCBsZW4pXG59XG5cblBlZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAob25jbG9zZSkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgc2VsZi5fZGVzdHJveShudWxsLCBvbmNsb3NlKVxufVxuXG5QZWVyLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIG9uY2xvc2UpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmIChzZWxmLmRlc3Ryb3llZCkgcmV0dXJuXG4gIGlmIChvbmNsb3NlKSBzZWxmLm9uY2UoJ2Nsb3NlJywgb25jbG9zZSlcblxuICBzZWxmLl9kZWJ1ZygnZGVzdHJveSAoZXJyb3I6ICVzKScsIGVyciAmJiBlcnIubWVzc2FnZSlcblxuICBzZWxmLnJlYWRhYmxlID0gc2VsZi53cml0YWJsZSA9IGZhbHNlXG5cbiAgaWYgKCFzZWxmLl9yZWFkYWJsZVN0YXRlLmVuZGVkKSBzZWxmLnB1c2gobnVsbClcbiAgaWYgKCFzZWxmLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkKSBzZWxmLmVuZCgpXG5cbiAgc2VsZi5kZXN0cm95ZWQgPSB0cnVlXG4gIHNlbGYuY29ubmVjdGVkID0gZmFsc2VcbiAgc2VsZi5fcGNSZWFkeSA9IGZhbHNlXG4gIHNlbGYuX2NoYW5uZWxSZWFkeSA9IGZhbHNlXG5cbiAgc2VsZi5fY2h1bmsgPSBudWxsXG4gIHNlbGYuX2NiID0gbnVsbFxuICBjbGVhckludGVydmFsKHNlbGYuX2ludGVydmFsKVxuICBjbGVhclRpbWVvdXQoc2VsZi5fcmVjb25uZWN0VGltZW91dClcblxuICBpZiAoc2VsZi5fcGMpIHtcbiAgICB0cnkge1xuICAgICAgc2VsZi5fcGMuY2xvc2UoKVxuICAgIH0gY2F0Y2ggKGVycikge31cblxuICAgIHNlbGYuX3BjLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gbnVsbFxuICAgIHNlbGYuX3BjLm9uc2lnbmFsaW5nc3RhdGVjaGFuZ2UgPSBudWxsXG4gICAgc2VsZi5fcGMub25pY2VjYW5kaWRhdGUgPSBudWxsXG4gIH1cblxuICBpZiAoc2VsZi5fY2hhbm5lbCkge1xuICAgIHRyeSB7XG4gICAgICBzZWxmLl9jaGFubmVsLmNsb3NlKClcbiAgICB9IGNhdGNoIChlcnIpIHt9XG5cbiAgICBzZWxmLl9jaGFubmVsLm9ubWVzc2FnZSA9IG51bGxcbiAgICBzZWxmLl9jaGFubmVsLm9ub3BlbiA9IG51bGxcbiAgICBzZWxmLl9jaGFubmVsLm9uY2xvc2UgPSBudWxsXG4gIH1cbiAgc2VsZi5fcGMgPSBudWxsXG4gIHNlbGYuX2NoYW5uZWwgPSBudWxsXG5cbiAgaWYgKGVycikgc2VsZi5lbWl0KCdlcnJvcicsIGVycilcbiAgc2VsZi5lbWl0KCdjbG9zZScpXG59XG5cblBlZXIucHJvdG90eXBlLl9zZXR1cERhdGEgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHNlbGYuX2NoYW5uZWwgPSBldmVudC5jaGFubmVsXG4gIHNlbGYuY2hhbm5lbE5hbWUgPSBzZWxmLl9jaGFubmVsLmxhYmVsXG5cbiAgc2VsZi5fY2hhbm5lbC5iaW5hcnlUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICBzZWxmLl9jaGFubmVsLm9ubWVzc2FnZSA9IHNlbGYuX29uQ2hhbm5lbE1lc3NhZ2UuYmluZChzZWxmKVxuICBzZWxmLl9jaGFubmVsLm9ub3BlbiA9IHNlbGYuX29uQ2hhbm5lbE9wZW4uYmluZChzZWxmKVxuICBzZWxmLl9jaGFubmVsLm9uY2xvc2UgPSBzZWxmLl9vbkNoYW5uZWxDbG9zZS5iaW5kKHNlbGYpXG59XG5cblBlZXIucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKCkge31cblxuUGVlci5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmIChzZWxmLmRlc3Ryb3llZCkgcmV0dXJuIGNiKG5ldyBFcnJvcignY2Fubm90IHdyaXRlIGFmdGVyIHBlZXIgaXMgZGVzdHJveWVkJykpXG5cbiAgaWYgKHNlbGYuY29ubmVjdGVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNlbGYuc2VuZChjaHVuaylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBzZWxmLl9vbkVycm9yKGVycilcbiAgICB9XG4gICAgaWYgKHNlbGYuX2NoYW5uZWwuYnVmZmVyZWRBbW91bnQgPiBzZWxmLl9tYXhCdWZmZXJlZEFtb3VudCkge1xuICAgICAgc2VsZi5fZGVidWcoJ3N0YXJ0IGJhY2twcmVzc3VyZTogYnVmZmVyZWRBbW91bnQgJWQnLCBzZWxmLl9jaGFubmVsLmJ1ZmZlcmVkQW1vdW50KVxuICAgICAgc2VsZi5fY2IgPSBjYlxuICAgIH0gZWxzZSB7XG4gICAgICBjYihudWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzZWxmLl9kZWJ1Zygnd3JpdGUgYmVmb3JlIGNvbm5lY3QnKVxuICAgIHNlbGYuX2NodW5rID0gY2h1bmtcbiAgICBzZWxmLl9jYiA9IGNiXG4gIH1cbn1cblxuUGVlci5wcm90b3R5cGUuX2NyZWF0ZU9mZmVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgaWYgKHNlbGYuZGVzdHJveWVkKSByZXR1cm5cblxuICBzZWxmLl9wYy5jcmVhdGVPZmZlcihmdW5jdGlvbiAob2ZmZXIpIHtcbiAgICBpZiAoc2VsZi5kZXN0cm95ZWQpIHJldHVyblxuICAgIG9mZmVyLnNkcCA9IHNlbGYuc2RwVHJhbnNmb3JtKG9mZmVyLnNkcClcbiAgICBzZWxmLl9wYy5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyLCBub29wLCBzZWxmLl9vbkVycm9yLmJpbmQoc2VsZikpXG4gICAgdmFyIHNlbmRPZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzaWduYWwgPSBzZWxmLl9wYy5sb2NhbERlc2NyaXB0aW9uIHx8IG9mZmVyXG4gICAgICBzZWxmLl9kZWJ1Zygnc2lnbmFsJylcbiAgICAgIHNlbGYuZW1pdCgnc2lnbmFsJywge1xuICAgICAgICB0eXBlOiBzaWduYWwudHlwZSxcbiAgICAgICAgc2RwOiBzaWduYWwuc2RwXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoc2VsZi50cmlja2xlIHx8IHNlbGYuX2ljZUNvbXBsZXRlKSBzZW5kT2ZmZXIoKVxuICAgIGVsc2Ugc2VsZi5vbmNlKCdfaWNlQ29tcGxldGUnLCBzZW5kT2ZmZXIpIC8vIHdhaXQgZm9yIGNhbmRpZGF0ZXNcbiAgfSwgc2VsZi5fb25FcnJvci5iaW5kKHNlbGYpLCBzZWxmLm9mZmVyQ29uc3RyYWludHMpXG59XG5cblBlZXIucHJvdG90eXBlLl9jcmVhdGVBbnN3ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBpZiAoc2VsZi5kZXN0cm95ZWQpIHJldHVyblxuXG4gIHNlbGYuX3BjLmNyZWF0ZUFuc3dlcihmdW5jdGlvbiAoYW5zd2VyKSB7XG4gICAgaWYgKHNlbGYuZGVzdHJveWVkKSByZXR1cm5cbiAgICBhbnN3ZXIuc2RwID0gc2VsZi5zZHBUcmFuc2Zvcm0oYW5zd2VyLnNkcClcbiAgICBzZWxmLl9wYy5zZXRMb2NhbERlc2NyaXB0aW9uKGFuc3dlciwgbm9vcCwgc2VsZi5fb25FcnJvci5iaW5kKHNlbGYpKVxuICAgIHZhciBzZW5kQW5zd2VyID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHNpZ25hbCA9IHNlbGYuX3BjLmxvY2FsRGVzY3JpcHRpb24gfHwgYW5zd2VyXG4gICAgICBzZWxmLl9kZWJ1Zygnc2lnbmFsJylcbiAgICAgIHNlbGYuZW1pdCgnc2lnbmFsJywge1xuICAgICAgICB0eXBlOiBzaWduYWwudHlwZSxcbiAgICAgICAgc2RwOiBzaWduYWwuc2RwXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoc2VsZi50cmlja2xlIHx8IHNlbGYuX2ljZUNvbXBsZXRlKSBzZW5kQW5zd2VyKClcbiAgICBlbHNlIHNlbGYub25jZSgnX2ljZUNvbXBsZXRlJywgc2VuZEFuc3dlcilcbiAgfSwgc2VsZi5fb25FcnJvci5iaW5kKHNlbGYpLCBzZWxmLmFuc3dlckNvbnN0cmFpbnRzKVxufVxuXG5QZWVyLnByb3RvdHlwZS5fb25JY2VDb25uZWN0aW9uU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBpZiAoc2VsZi5kZXN0cm95ZWQpIHJldHVyblxuICB2YXIgaWNlR2F0aGVyaW5nU3RhdGUgPSBzZWxmLl9wYy5pY2VHYXRoZXJpbmdTdGF0ZVxuICB2YXIgaWNlQ29ubmVjdGlvblN0YXRlID0gc2VsZi5fcGMuaWNlQ29ubmVjdGlvblN0YXRlXG4gIHNlbGYuX2RlYnVnKCdpY2VDb25uZWN0aW9uU3RhdGVDaGFuZ2UgJXMgJXMnLCBpY2VHYXRoZXJpbmdTdGF0ZSwgaWNlQ29ubmVjdGlvblN0YXRlKVxuICBzZWxmLmVtaXQoJ2ljZUNvbm5lY3Rpb25TdGF0ZUNoYW5nZScsIGljZUdhdGhlcmluZ1N0YXRlLCBpY2VDb25uZWN0aW9uU3RhdGUpXG4gIGlmIChpY2VDb25uZWN0aW9uU3RhdGUgPT09ICdjb25uZWN0ZWQnIHx8IGljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICBjbGVhclRpbWVvdXQoc2VsZi5fcmVjb25uZWN0VGltZW91dClcbiAgICBzZWxmLl9wY1JlYWR5ID0gdHJ1ZVxuICAgIHNlbGYuX21heWJlUmVhZHkoKVxuICB9XG4gIGlmIChpY2VDb25uZWN0aW9uU3RhdGUgPT09ICdkaXNjb25uZWN0ZWQnKSB7XG4gICAgaWYgKHNlbGYucmVjb25uZWN0VGltZXIpIHtcbiAgICAgIC8vIElmIHVzZXIgaGFzIHNldCBgb3B0LnJlY29ubmVjdFRpbWVyYCwgYWxsb3cgdGltZSBmb3IgSUNFIHRvIGF0dGVtcHQgYSByZWNvbm5lY3RcbiAgICAgIGNsZWFyVGltZW91dChzZWxmLl9yZWNvbm5lY3RUaW1lb3V0KVxuICAgICAgc2VsZi5fcmVjb25uZWN0VGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLl9kZXN0cm95KClcbiAgICAgIH0sIHNlbGYucmVjb25uZWN0VGltZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYuX2Rlc3Ryb3koKVxuICAgIH1cbiAgfVxuICBpZiAoaWNlQ29ubmVjdGlvblN0YXRlID09PSAnZmFpbGVkJykge1xuICAgIHNlbGYuX2Rlc3Ryb3koKVxuICB9XG4gIGlmIChpY2VDb25uZWN0aW9uU3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgc2VsZi5fZGVzdHJveSgpXG4gIH1cbn1cblxuUGVlci5wcm90b3R5cGUuX21heWJlUmVhZHkgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBzZWxmLl9kZWJ1ZygnbWF5YmVSZWFkeSBwYyAlcyBjaGFubmVsICVzJywgc2VsZi5fcGNSZWFkeSwgc2VsZi5fY2hhbm5lbFJlYWR5KVxuICBpZiAoc2VsZi5jb25uZWN0ZWQgfHwgc2VsZi5fY29ubmVjdGluZyB8fCAhc2VsZi5fcGNSZWFkeSB8fCAhc2VsZi5fY2hhbm5lbFJlYWR5KSByZXR1cm5cbiAgc2VsZi5fY29ubmVjdGluZyA9IHRydWVcblxuICBpZiAoIXNlbGYuX3BjLmdldFN0YXRzKSB7XG4gICAgb25TdGF0cyhbXSlcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAhIXdpbmRvdy5tb3pSVENQZWVyQ29ubmVjdGlvbikge1xuICAgIHNlbGYuX3BjLmdldFN0YXRzKG51bGwsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgIHZhciBpdGVtcyA9IFtdXG4gICAgICByZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pXG4gICAgICB9KVxuICAgICAgb25TdGF0cyhpdGVtcylcbiAgICB9LCBzZWxmLl9vbkVycm9yLmJpbmQoc2VsZikpXG4gIH0gZWxzZSB7XG4gICAgc2VsZi5fcGMuZ2V0U3RhdHMoZnVuY3Rpb24gKHJlcykge1xuICAgICAgdmFyIGl0ZW1zID0gW11cbiAgICAgIHJlcy5yZXN1bHQoKS5mb3JFYWNoKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSB7fVxuICAgICAgICByZXN1bHQubmFtZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgaXRlbVtuYW1lXSA9IHJlc3VsdC5zdGF0KG5hbWUpXG4gICAgICAgIH0pXG4gICAgICAgIGl0ZW0uaWQgPSByZXN1bHQuaWRcbiAgICAgICAgaXRlbS50eXBlID0gcmVzdWx0LnR5cGVcbiAgICAgICAgaXRlbS50aW1lc3RhbXAgPSByZXN1bHQudGltZXN0YW1wXG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSlcbiAgICAgIH0pXG4gICAgICBvblN0YXRzKGl0ZW1zKVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBvblN0YXRzIChpdGVtcykge1xuICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdyZW1vdGVjYW5kaWRhdGUnICYmIGl0ZW0uY2FuZGlkYXRlVHlwZSA9PT0gJ2hvc3QnKSB7XG4gICAgICAgIHNlbGYucmVtb3RlQWRkcmVzcyA9IGl0ZW0uaXBBZGRyZXNzXG4gICAgICAgIHNlbGYucmVtb3RlUG9ydCA9IE51bWJlcihpdGVtLnBvcnROdW1iZXIpXG4gICAgICAgIHNlbGYucmVtb3RlRmFtaWx5ID0gJ0lQdjQnXG4gICAgICAgIHNlbGYuX2RlYnVnKFxuICAgICAgICAgICdjb25uZWN0IHJlbW90ZTogJXM6JXMgKCVzKScsXG4gICAgICAgICAgc2VsZi5yZW1vdGVBZGRyZXNzLCBzZWxmLnJlbW90ZVBvcnQsIHNlbGYucmVtb3RlRmFtaWx5XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAnbG9jYWxjYW5kaWRhdGUnICYmIGl0ZW0uY2FuZGlkYXRlVHlwZSA9PT0gJ2hvc3QnKSB7XG4gICAgICAgIHNlbGYubG9jYWxBZGRyZXNzID0gaXRlbS5pcEFkZHJlc3NcbiAgICAgICAgc2VsZi5sb2NhbFBvcnQgPSBOdW1iZXIoaXRlbS5wb3J0TnVtYmVyKVxuICAgICAgICBzZWxmLl9kZWJ1ZygnY29ubmVjdCBsb2NhbDogJXM6JXMnLCBzZWxmLmxvY2FsQWRkcmVzcywgc2VsZi5sb2NhbFBvcnQpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNlbGYuX2Nvbm5lY3RpbmcgPSBmYWxzZVxuICAgIHNlbGYuY29ubmVjdGVkID0gdHJ1ZVxuXG4gICAgaWYgKHNlbGYuX2NodW5rKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZWxmLnNlbmQoc2VsZi5fY2h1bmspXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuX29uRXJyb3IoZXJyKVxuICAgICAgfVxuICAgICAgc2VsZi5fY2h1bmsgPSBudWxsXG4gICAgICBzZWxmLl9kZWJ1Zygnc2VudCBjaHVuayBmcm9tIFwid3JpdGUgYmVmb3JlIGNvbm5lY3RcIicpXG5cbiAgICAgIHZhciBjYiA9IHNlbGYuX2NiXG4gICAgICBzZWxmLl9jYiA9IG51bGxcbiAgICAgIGNiKG51bGwpXG4gICAgfVxuXG4gICAgc2VsZi5faW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNlbGYuX2NiIHx8ICFzZWxmLl9jaGFubmVsIHx8IHNlbGYuX2NoYW5uZWwuYnVmZmVyZWRBbW91bnQgPiBzZWxmLl9tYXhCdWZmZXJlZEFtb3VudCkgcmV0dXJuXG4gICAgICBzZWxmLl9kZWJ1ZygnZW5kaW5nIGJhY2twcmVzc3VyZTogYnVmZmVyZWRBbW91bnQgJWQnLCBzZWxmLl9jaGFubmVsLmJ1ZmZlcmVkQW1vdW50KVxuICAgICAgdmFyIGNiID0gc2VsZi5fY2JcbiAgICAgIHNlbGYuX2NiID0gbnVsbFxuICAgICAgY2IobnVsbClcbiAgICB9LCAxNTApXG4gICAgaWYgKHNlbGYuX2ludGVydmFsLnVucmVmKSBzZWxmLl9pbnRlcnZhbC51bnJlZigpXG5cbiAgICBzZWxmLl9kZWJ1ZygnY29ubmVjdCcpXG4gICAgc2VsZi5lbWl0KCdjb25uZWN0JylcbiAgfVxufVxuXG5QZWVyLnByb3RvdHlwZS5fb25TaWduYWxpbmdTdGF0ZUNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmIChzZWxmLmRlc3Ryb3llZCkgcmV0dXJuXG4gIHNlbGYuX2RlYnVnKCdzaWduYWxpbmdTdGF0ZUNoYW5nZSAlcycsIHNlbGYuX3BjLnNpZ25hbGluZ1N0YXRlKVxuICBzZWxmLmVtaXQoJ3NpZ25hbGluZ1N0YXRlQ2hhbmdlJywgc2VsZi5fcGMuc2lnbmFsaW5nU3RhdGUpXG59XG5cblBlZXIucHJvdG90eXBlLl9vbkljZUNhbmRpZGF0ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgaWYgKHNlbGYuZGVzdHJveWVkKSByZXR1cm5cbiAgaWYgKGV2ZW50LmNhbmRpZGF0ZSAmJiBzZWxmLnRyaWNrbGUpIHtcbiAgICBzZWxmLmVtaXQoJ3NpZ25hbCcsIHtcbiAgICAgIGNhbmRpZGF0ZToge1xuICAgICAgICBjYW5kaWRhdGU6IGV2ZW50LmNhbmRpZGF0ZS5jYW5kaWRhdGUsXG4gICAgICAgIHNkcE1MaW5lSW5kZXg6IGV2ZW50LmNhbmRpZGF0ZS5zZHBNTGluZUluZGV4LFxuICAgICAgICBzZHBNaWQ6IGV2ZW50LmNhbmRpZGF0ZS5zZHBNaWRcbiAgICAgIH1cbiAgICB9KVxuICB9IGVsc2UgaWYgKCFldmVudC5jYW5kaWRhdGUpIHtcbiAgICBzZWxmLl9pY2VDb21wbGV0ZSA9IHRydWVcbiAgICBzZWxmLmVtaXQoJ19pY2VDb21wbGV0ZScpXG4gIH1cbn1cblxuUGVlci5wcm90b3R5cGUuX29uQ2hhbm5lbE1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmIChzZWxmLmRlc3Ryb3llZCkgcmV0dXJuXG4gIHZhciBkYXRhID0gZXZlbnQuZGF0YVxuICBzZWxmLl9kZWJ1ZygncmVhZDogJWQgYnl0ZXMnLCBkYXRhLmJ5dGVMZW5ndGggfHwgZGF0YS5sZW5ndGgpXG5cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIGRhdGEgPSBuZXcgQnVmZmVyKGRhdGEpXG4gICAgc2VsZi5wdXNoKGRhdGEpXG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpXG4gICAgfSBjYXRjaCAoZXJyKSB7fVxuICAgIHNlbGYuZW1pdCgnZGF0YScsIGRhdGEpXG4gIH1cbn1cblxuUGVlci5wcm90b3R5cGUuX29uQ2hhbm5lbE9wZW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBpZiAoc2VsZi5jb25uZWN0ZWQgfHwgc2VsZi5kZXN0cm95ZWQpIHJldHVyblxuICBzZWxmLl9kZWJ1Zygnb24gY2hhbm5lbCBvcGVuJylcbiAgc2VsZi5fY2hhbm5lbFJlYWR5ID0gdHJ1ZVxuICBzZWxmLl9tYXliZVJlYWR5KClcbn1cblxuUGVlci5wcm90b3R5cGUuX29uQ2hhbm5lbENsb3NlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgaWYgKHNlbGYuZGVzdHJveWVkKSByZXR1cm5cbiAgc2VsZi5fZGVidWcoJ29uIGNoYW5uZWwgY2xvc2UnKVxuICBzZWxmLl9kZXN0cm95KClcbn1cblxuUGVlci5wcm90b3R5cGUuX29uQWRkU3RyZWFtID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBpZiAoc2VsZi5kZXN0cm95ZWQpIHJldHVyblxuICBzZWxmLl9kZWJ1Zygnb24gYWRkIHN0cmVhbScpXG4gIHNlbGYuZW1pdCgnc3RyZWFtJywgZXZlbnQuc3RyZWFtKVxufVxuXG5QZWVyLnByb3RvdHlwZS5fb25FcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmIChzZWxmLmRlc3Ryb3llZCkgcmV0dXJuXG4gIHNlbGYuX2RlYnVnKCdlcnJvciAlcycsIGVyci5tZXNzYWdlIHx8IGVycilcbiAgc2VsZi5fZGVzdHJveShlcnIpXG59XG5cblBlZXIucHJvdG90eXBlLl9kZWJ1ZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpXG4gIHZhciBpZCA9IHNlbGYuY2hhbm5lbE5hbWUgJiYgc2VsZi5jaGFubmVsTmFtZS5zdWJzdHJpbmcoMCwgNylcbiAgYXJnc1swXSA9ICdbJyArIGlkICsgJ10gJyArIGFyZ3NbMF1cbiAgZGVidWcuYXBwbHkobnVsbCwgYXJncylcbn1cblxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuIiwiXG52YXIgc29kaXVtID0gcmVxdWlyZSgnbGlic29kaXVtLXdyYXBwZXJzJylcblxuZnVuY3Rpb24gSShiKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoYikgPyBuZXcgVWludDhBcnJheShiKSA6IGJcbn1cblxuZnVuY3Rpb24gQihiKSB7XG4gIHJldHVybiAoYiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpID8gbmV3IEJ1ZmZlcihiKSA6IGJcbn1cblxuZnVuY3Rpb24gYnVmZmVyaXplKGZuKSB7XG4gIGlmKCdmdW5jdGlvbicgIT09IHR5cGVvZiBmbilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBhIGZ1bmN0aW9uJylcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLm1hcC5jYWxsKGFyZ3VtZW50cywgSSlcbiAgICB2YXIgciA9ICBCKGZuLmFwcGx5KHRoaXMsIGFyZ3MpKVxuICAgIHJldHVybiByXG4gIH1cbn1cblxuZnVuY3Rpb24ga2V5cyAoaykge1xuICByZXR1cm4ge1xuICAgIHB1YmxpY0tleTogQihrLnB1YmxpY0tleSksXG4gICAgc2VjcmV0S2V5OiBCKGsuc2VjcmV0S2V5IHx8IGsucHJpdmF0ZUtleSlcbiAgfVxufVxuXG5leHBvcnRzLmNyeXB0b19zaWduX3NlZWRfa2V5cGFpciA9IGZ1bmN0aW9uIChzZWVkKSB7XG4gIHJldHVybiBrZXlzKHNvZGl1bS5jcnlwdG9fc2lnbl9zZWVkX2tleXBhaXIoSShzZWVkKSkpXG59XG5cbmV4cG9ydHMuY3J5cHRvX3NpZ25fa2V5cGFpciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGtleXMoc29kaXVtLmNyeXB0b19zaWduX2tleXBhaXIoKSlcbn1cblxuZXhwb3J0cy5jcnlwdG9fYm94X2tleXBhaXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBrZXlzKHNvZGl1bS5jcnlwdG9fYm94X2tleXBhaXIoKSlcbn1cblxuO1tcbiAgJ3NpZ25fdmVyaWZ5X2RldGFjaGVkJyxcbiAgJ3NpZ25fZGV0YWNoZWQnLFxuICAnc2lnbicsXG4gICdzaWduX29wZW4nLFxuICAnc2lnbl9lZDI1NTE5X3BrX3RvX2N1cnZlMjU1MTknLFxuICAnc2lnbl9lZDI1NTE5X3NrX3RvX2N1cnZlMjU1MTknLFxuICAnc2NhbGFybXVsdCcsXG4gICdzZWNyZXRib3hfZWFzeScsXG4gICdzZWNyZXRib3hfb3Blbl9lYXN5JyxcbiAgJ2JveF9lYXN5JyxcbiAgJ2JveF9vcGVuX2Vhc3knLFxuICAnYXV0aCcsXG4gICdhdXRoX3ZlcmlmeScsXG4gICdoYXNoJ1xuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmKG5hbWUgPT09ICdhdXRoX3ZlcmlmeScpIHtcbiAgICAvL3RoaXMgaXMgaW5jb25zaXN0ZW50IHdpdGggc2lnbl92ZXJpZnkhIVxuICAgIHZhciBmbiA9IGJ1ZmZlcml6ZShzb2RpdW0uY3J5cHRvX2F1dGhfdmVyaWZ5KVxuICAgIGV4cG9ydHNbJ2NyeXB0b18nK25hbWVdID0gZnVuY3Rpb24gKG1zZywgdG9rLCBrZXkpIHsgcmV0dXJuIGZuKG1zZywgdG9rLCBrZXkpID8gMCA6IDEgfVxuICB9XG4gIGVsc2VcbiAgICBleHBvcnRzWydjcnlwdG9fJytuYW1lXSA9IGJ1ZmZlcml6ZShzb2RpdW1bJ2NyeXB0b18nK25hbWVdKVxufSlcblxudmFyIFNoYTI1NiA9IHJlcXVpcmUoJ3NoYS5qcy9zaGEyNTYnKVxuZXhwb3J0cy5jcnlwdG9faGFzaF9zaGEyNTYgPSBmdW5jdGlvbiAobXNnKSB7XG4gIHJldHVybiBuZXcgU2hhMjU2KCkudXBkYXRlKG1zZykuZGlnZXN0KClcbn1cblxuZnVuY3Rpb24gbnVsbElmVGhyZXcgKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHsgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkgfVxuICAgIGNhdGNoIChlcnIpIHsgcmV0dXJuIG51bGwgfVxuICB9XG59XG5cbmV4cG9ydHMuY3J5cHRvX3NlY3JldGJveF9vcGVuX2Vhc3kgPSBudWxsSWZUaHJldyhleHBvcnRzLmNyeXB0b19zZWNyZXRib3hfb3Blbl9lYXN5KVxuZXhwb3J0cy5jcnlwdG9fYm94X29wZW5fZWFzeSA9IG51bGxJZlRocmV3KGV4cG9ydHMuY3J5cHRvX2JveF9vcGVuX2Vhc3kpXG5cbiIsInZhciBvbmNlID0gcmVxdWlyZSgnb25jZScpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oc3RyZWFtLCBjYikge1xuICBpZiAoIWNiKSByZXR1cm4gc3RyZWFtXG5cbiAgdmFyIGxpc3QgPSBbXVxuXG4gIGNiID0gb25jZShjYilcblxuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbihkYXRhKSB7XG4gICAgbGlzdC5wdXNoKGRhdGEpXG4gIH0pXG5cbiAgc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICBjYihudWxsLCBsaXN0KVxuICB9KVxuXG4gIHN0cmVhbS5vbignY2xvc2UnLCBmdW5jdGlvbigpIHtcbiAgICBjYihuZXcgRXJyb3IoJ1ByZW1hdHVyZSBjbG9zZScpKVxuICB9KVxuXG4gIHN0cmVhbS5vbignZXJyb3InLCBjYilcblxuICByZXR1cm4gc3RyZWFtXG59IiwidmFyIG5hcmdzID0gL1xceyhbMC05YS16QS1aXSspXFx9L2dcbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRlbXBsYXRlXG5cbmZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZykge1xuICAgIHZhciBhcmdzXG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiB0eXBlb2YgYXJndW1lbnRzWzFdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHNbMV1cbiAgICB9IGVsc2Uge1xuICAgICAgICBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpXG4gICAgfVxuXG4gICAgaWYgKCFhcmdzIHx8ICFhcmdzLmhhc093blByb3BlcnR5KSB7XG4gICAgICAgIGFyZ3MgPSB7fVxuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShuYXJncywgZnVuY3Rpb24gcmVwbGFjZUFyZyhtYXRjaCwgaSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIHJlc3VsdFxuXG4gICAgICAgIGlmIChzdHJpbmdbaW5kZXggLSAxXSA9PT0gXCJ7XCIgJiZcbiAgICAgICAgICAgIHN0cmluZ1tpbmRleCArIG1hdGNoLmxlbmd0aF0gPT09IFwifVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gaVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXJncy5oYXNPd25Qcm9wZXJ0eShpKSA/IGFyZ3NbaV0gOiBudWxsXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9XG4gICAgfSlcbn1cbiIsInZhciBzd2FybSA9IHJlcXVpcmUoJ3dlYnJ0Yy1zd2FybScpXG52YXIgc2lnbmFsaHViID0gcmVxdWlyZSgnc2lnbmFsaHViJylcbnZhciBoc29kaXVtID0gcmVxdWlyZSgnaHlwZXJsb2ctc29kaXVtJylcbnZhciBoeXBlcmxvZyA9IHJlcXVpcmUoJ2h5cGVybG9nJylcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpXG52YXIgdGhyb3VnaCA9IHJlcXVpcmUoJ3Rocm91Z2gyJylcbnZhciBwdW1wID0gcmVxdWlyZSgncHVtcCcpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdHMpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykgb3B0cyA9IHsgaWQ6IG9wdHMgfVxuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuICB2YXIga2V5cyA9IG9wdHMua2V5cyB8fCB7fVxuICB2YXIga29wdHMgPSB7XG4gICAgcHVibGljS2V5OiBub3Jta2V5KGRlZmluZWQoXG4gICAgICBvcHRzLnB1YmxpY0tleSwgb3B0cy5wdWJsaWMsIG9wdHMucHViLCBvcHRzLmlkZW50aXR5LCBvcHRzLmlkLFxuICAgICAga2V5cy5wdWJsaWNLZXksIGtleXMucHVibGljLCBrZXlzLnB1Yiwga2V5cy5pZGVudGl0eSwga2V5cy5pZFxuICAgICkpLFxuICAgIHNlY3JldEtleTogbm9ybWtleShkZWZpbmVkKFxuICAgICAgb3B0cy5zZWNyZXRLZXksIG9wdHMuc2VjcmV0LCBvcHRzLnByaXZhdGUsIG9wdHMucHJpdixcbiAgICAgIGtleXMuc2VjcmV0S2V5LCBrZXlzLnNlY3JldCwga2V5cy5wcml2YXRlLCBrZXlzLnByaXZcbiAgICApKVxuICB9XG4gIHZhciB0b3BpYyA9IGtvcHRzLnB1YmxpY0tleS50b1N0cmluZygnaGV4JylcbiAgdmFyIGxvZyA9IGh5cGVybG9nKG9wdHMuZGIsIGhzb2RpdW0ob3B0cy5zb2RpdW0sIGtvcHRzLCBvcHRzKSlcbiAgdmFyIGh1YiA9IHNpZ25hbGh1Yignc3dhcm1sb2cuJyArIHRvcGljLCBvcHRzLmh1YnMpXG4gIHZhciBzdyA9IHN3YXJtKGh1Yiwgb3B0cylcbiAgdmFyIHBlZXJTdHJlYW0gPSBvcHRzLnBlZXJTdHJlYW0gfHwgZnVuY3Rpb24gKHBlZXIpIHsgcmV0dXJuIHBlZXIgfVxuXG4gIHN3Lm9uKCdwZWVyJywgZnVuY3Rpb24gKHBlZXIsIGlkKSB7XG4gICAgdmFyIHN0cmVhbSA9IHBlZXJTdHJlYW0ocGVlcilcbiAgICBwdW1wKHN0cmVhbSwgdG9CdWZmZXIoKSwgbG9nLnJlcGxpY2F0ZSh7IGxpdmU6IHRydWUgfSksIHN0cmVhbSlcbiAgfSlcbiAgcmV0dXJuIGxvZ1xufVxuXG5mdW5jdGlvbiBub3Jta2V5IChpZCkge1xuICBpZiAoL1xcLmVkMjU1MTkkLy50ZXN0KGlkKSkge1xuICAgIHZhciBiNjQgPSBpZC5yZXBsYWNlKC9cXC5lZDI1NTE5JC8sJycpLnJlcGxhY2UoL15ALywnJylcbiAgICByZXR1cm4gQnVmZmVyKGI2NCwnYmFzZTY0JylcbiAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoaWQpKSB7XG4gICAgcmV0dXJuIGlkXG4gIH0gZWxzZSBpZiAoaWQpIHJldHVybiBCdWZmZXIoaWQsICdoZXgnKVxufVxuXG5mdW5jdGlvbiB0b0J1ZmZlciAoKSB7XG4gIHJldHVybiB0aHJvdWdoLm9iaihmdW5jdGlvbiAoYnVmLCBlbmMsIG5leHQpIHtcbiAgICBuZXh0KG51bGwsIEJ1ZmZlci5pc0J1ZmZlcihidWYpID8gYnVmIDogQnVmZmVyKGJ1ZikpXG4gIH0pXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhZGFibGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgcHJvY2Vzc05leHRUaWNrID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlO1xuXG52YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBFRWxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBlbWl0dGVyLmxpc3RlbmVycyh0eXBlKS5sZW5ndGg7XG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbTtcbihmdW5jdGlvbiAoKXt0cnl7XG4gIFN0cmVhbSA9IHJlcXVpcmUoJ3N0JyArICdyZWFtJyk7XG59Y2F0Y2goXyl7fWZpbmFsbHl7XG4gIGlmICghU3RyZWFtKVxuICAgIFN0cmVhbSA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbn19KCkpXG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBkZWJ1Z1V0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgZGVidWc7XG5pZiAoZGVidWdVdGlsICYmIGRlYnVnVXRpbC5kZWJ1Z2xvZykge1xuICBkZWJ1ZyA9IGRlYnVnVXRpbC5kZWJ1Z2xvZygnc3RyZWFtJyk7XG59IGVsc2Uge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uICgpIHt9O1xufVxuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBTdHJpbmdEZWNvZGVyO1xuXG51dGlsLmluaGVyaXRzKFJlYWRhYmxlLCBTdHJlYW0pO1xuXG52YXIgRHVwbGV4O1xuZnVuY3Rpb24gUmVhZGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcuIFVzZWQgdG8gbWFrZSByZWFkKG4pIGlnbm9yZSBuIGFuZCB0b1xuICAvLyBtYWtlIGFsbCB0aGUgYnVmZmVyIG1lcmdpbmcgYW5kIGxlbmd0aCBjaGVja3MgZ28gYXdheVxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoc3RyZWFtIGluc3RhbmNlb2YgRHVwbGV4KVxuICAgIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIGRlZmF1bHRId20gPSB0aGlzLm9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDtcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gKGh3bSB8fCBod20gPT09IDApID8gaHdtIDogZGVmYXVsdEh3bTtcblxuICAvLyBjYXN0IHRvIGludHMuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IH5+dGhpcy5oaWdoV2F0ZXJNYXJrO1xuXG4gIHRoaXMuYnVmZmVyID0gW107XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgdGhpcy5waXBlcyA9IG51bGw7XG4gIHRoaXMucGlwZXNDb3VudCA9IDA7XG4gIHRoaXMuZmxvd2luZyA9IG51bGw7XG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIHRoaXMucmVhZGluZyA9IGZhbHNlO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIG9ud3JpdGUgY2IgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LFxuICAvLyBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlIGFueVxuICAvLyBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBjYWxsLlxuICB0aGlzLnN5bmMgPSB0cnVlO1xuXG4gIC8vIHdoZW5ldmVyIHdlIHJldHVybiBudWxsLCB0aGVuIHdlIHNldCBhIGZsYWcgdG8gc2F5XG4gIC8vIHRoYXQgd2UncmUgYXdhaXRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGVtaXNzaW9uLlxuICB0aGlzLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLnJlYWRhYmxlTGlzdGVuaW5nID0gZmFsc2U7XG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBvcHRpb25zLmRlZmF1bHRFbmNvZGluZyB8fCAndXRmOCc7XG5cbiAgLy8gd2hlbiBwaXBpbmcsIHdlIG9ubHkgY2FyZSBhYm91dCAncmVhZGFibGUnIGV2ZW50cyB0aGF0IGhhcHBlblxuICAvLyBhZnRlciByZWFkKClpbmcgYWxsIHRoZSBieXRlcyBhbmQgbm90IGdldHRpbmcgYW55IHB1c2hiYWNrLlxuICB0aGlzLnJhbk91dCA9IGZhbHNlO1xuXG4gIC8vIHRoZSBudW1iZXIgb2Ygd3JpdGVycyB0aGF0IGFyZSBhd2FpdGluZyBhIGRyYWluIGV2ZW50IGluIC5waXBlKClzXG4gIHRoaXMuYXdhaXREcmFpbiA9IDA7XG5cbiAgLy8gaWYgdHJ1ZSwgYSBtYXliZVJlYWRNb3JlIGhhcyBiZWVuIHNjaGVkdWxlZFxuICB0aGlzLnJlYWRpbmdNb3JlID0gZmFsc2U7XG5cbiAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gIGlmIChvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgaWYgKCFTdHJpbmdEZWNvZGVyKVxuICAgICAgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyk7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gIH1cbn1cblxudmFyIER1cGxleDtcbmZ1bmN0aW9uIFJlYWRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZGFibGUpKVxuICAgIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucyk7XG5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeVxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5yZWFkID09PSAnZnVuY3Rpb24nKVxuICAgIHRoaXMuX3JlYWQgPSBvcHRpb25zLnJlYWQ7XG5cbiAgU3RyZWFtLmNhbGwodGhpcyk7XG59XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICBpZiAoZW5jb2RpbmcgIT09IHN0YXRlLmVuY29kaW5nKSB7XG4gICAgICBjaHVuayA9IG5ldyBCdWZmZXIoY2h1bmssIGVuY29kaW5nKTtcbiAgICAgIGVuY29kaW5nID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgZmFsc2UpO1xufTtcblxuLy8gVW5zaGlmdCBzaG91bGQgKmFsd2F5cyogYmUgc29tZXRoaW5nIGRpcmVjdGx5IG91dCBvZiByZWFkKClcblJlYWRhYmxlLnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24oY2h1bmspIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCAnJywgdHJ1ZSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9PT0gZmFsc2U7XG59O1xuXG5mdW5jdGlvbiByZWFkYWJsZUFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgYWRkVG9Gcm9udCkge1xuICB2YXIgZXIgPSBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKTtcbiAgaWYgKGVyKSB7XG4gICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9IGVsc2UgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSk7XG4gIH0gZWxzZSBpZiAoc3RhdGUub2JqZWN0TW9kZSB8fCBjaHVuayAmJiBjaHVuay5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHN0YXRlLmVuZGVkICYmICFhZGRUb0Zyb250KSB7XG4gICAgICB2YXIgZSA9IG5ldyBFcnJvcignc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnKTtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGUpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUuZW5kRW1pdHRlZCAmJiBhZGRUb0Zyb250KSB7XG4gICAgICB2YXIgZSA9IG5ldyBFcnJvcignc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnKTtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhYWRkVG9Gcm9udCAmJiAhZW5jb2RpbmcpXG4gICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAgIGlmICghYWRkVG9Gcm9udClcbiAgICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuXG4gICAgICAvLyBpZiB3ZSB3YW50IHRoZSBkYXRhIG5vdywganVzdCBlbWl0IGl0LlxuICAgICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmICFzdGF0ZS5zeW5jKSB7XG4gICAgICAgIHN0cmVhbS5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICBzdHJlYW0ucmVhZCgwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgYnVmZmVyIGluZm8uXG4gICAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICAgICAgaWYgKGFkZFRvRnJvbnQpXG4gICAgICAgICAgc3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuXG4gICAgICAgIGlmIChzdGF0ZS5uZWVkUmVhZGFibGUpXG4gICAgICAgICAgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG4gICAgICB9XG5cbiAgICAgIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCFhZGRUb0Zyb250KSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIG5lZWRNb3JlRGF0YShzdGF0ZSk7XG59XG5cblxuLy8gaWYgaXQncyBwYXN0IHRoZSBoaWdoIHdhdGVyIG1hcmssIHdlIGNhbiBwdXNoIGluIHNvbWUgbW9yZS5cbi8vIEFsc28sIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXQsIHdlIGNhbiBzdGFuZCBzb21lXG4vLyBtb3JlIGJ5dGVzLiAgVGhpcyBpcyB0byB3b3JrIGFyb3VuZCBjYXNlcyB3aGVyZSBod209MCxcbi8vIHN1Y2ggYXMgdGhlIHJlcGwuICBBbHNvLCBpZiB0aGUgcHVzaCgpIHRyaWdnZXJlZCBhXG4vLyByZWFkYWJsZSBldmVudCwgYW5kIHRoZSB1c2VyIGNhbGxlZCByZWFkKGxhcmdlTnVtYmVyKSBzdWNoIHRoYXRcbi8vIG5lZWRSZWFkYWJsZSB3YXMgc2V0LCB0aGVuIHdlIG91Z2h0IHRvIHB1c2ggbW9yZSwgc28gdGhhdCBhbm90aGVyXG4vLyAncmVhZGFibGUnIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkLlxuZnVuY3Rpb24gbmVlZE1vcmVEYXRhKHN0YXRlKSB7XG4gIHJldHVybiAhc3RhdGUuZW5kZWQgJiZcbiAgICAgICAgIChzdGF0ZS5uZWVkUmVhZGFibGUgfHxcbiAgICAgICAgICBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8XG4gICAgICAgICAgc3RhdGUubGVuZ3RoID09PSAwKTtcbn1cblxuLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5SZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbihlbmMpIHtcbiAgaWYgKCFTdHJpbmdEZWNvZGVyKVxuICAgIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nID0gZW5jO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiA4TUJcbnZhciBNQVhfSFdNID0gMHg4MDAwMDA7XG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID49IE1BWF9IV00pIHtcbiAgICBuID0gTUFYX0hXTTtcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyXG4gICAgbi0tO1xuICAgIG4gfD0gbiA+Pj4gMTtcbiAgICBuIHw9IG4gPj4+IDI7XG4gICAgbiB8PSBuID4+PiA0O1xuICAgIG4gfD0gbiA+Pj4gODtcbiAgICBuIHw9IG4gPj4+IDE2O1xuICAgIG4rKztcbiAgfVxuICByZXR1cm4gbjtcbn1cblxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKVxuICAgIHJldHVybiAwO1xuXG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKVxuICAgIHJldHVybiBuID09PSAwID8gMCA6IDE7XG5cbiAgaWYgKG4gPT09IG51bGwgfHwgaXNOYU4obikpIHtcbiAgICAvLyBvbmx5IGZsb3cgb25lIGJ1ZmZlciBhdCBhIHRpbWVcbiAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5idWZmZXIubGVuZ3RoKVxuICAgICAgcmV0dXJuIHN0YXRlLmJ1ZmZlclswXS5sZW5ndGg7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbiAgfVxuXG4gIGlmIChuIDw9IDApXG4gICAgcmV0dXJuIDA7XG5cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIHRhcmdldCBidWZmZXIgbGV2ZWwsXG4gIC8vIHRoZW4gcmFpc2UgdGhlIHdhdGVyIG1hcmsuICBCdW1wIHVwIHRvIHRoZSBuZXh0IGhpZ2hlc3RcbiAgLy8gcG93ZXIgb2YgMiwgdG8gcHJldmVudCBpbmNyZWFzaW5nIGl0IGV4Y2Vzc2l2ZWx5IGluIHRpbnlcbiAgLy8gYW1vdW50cy5cbiAgaWYgKG4gPiBzdGF0ZS5oaWdoV2F0ZXJNYXJrKVxuICAgIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKTtcblxuICAvLyBkb24ndCBoYXZlIHRoYXQgbXVjaC4gIHJldHVybiBudWxsLCB1bmxlc3Mgd2UndmUgZW5kZWQuXG4gIGlmIChuID4gc3RhdGUubGVuZ3RoKSB7XG4gICAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuO1xufVxuXG4vLyB5b3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihuKSB7XG4gIGRlYnVnKCdyZWFkJywgbik7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBuT3JpZyA9IG47XG5cbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuID4gMClcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcblxuICAvLyBpZiB3ZSdyZSBkb2luZyByZWFkKDApIHRvIHRyaWdnZXIgYSByZWFkYWJsZSBldmVudCwgYnV0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhIGJ1bmNoIG9mIGRhdGEgaW4gdGhlIGJ1ZmZlciwgdGhlbiBqdXN0IHRyaWdnZXJcbiAgLy8gdGhlICdyZWFkYWJsZScgZXZlbnQgYW5kIG1vdmUgb24uXG4gIGlmIChuID09PSAwICYmXG4gICAgICBzdGF0ZS5uZWVkUmVhZGFibGUgJiZcbiAgICAgIChzdGF0ZS5sZW5ndGggPj0gc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5lbmRlZCkpIHtcbiAgICBkZWJ1ZygncmVhZDogZW1pdFJlYWRhYmxlJywgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZClcbiAgICAgIGVuZFJlYWRhYmxlKHRoaXMpO1xuICAgIGVsc2VcbiAgICAgIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKTtcblxuICAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMClcbiAgICAgIGVuZFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQWxsIHRoZSBhY3R1YWwgY2h1bmsgZ2VuZXJhdGlvbiBsb2dpYyBuZWVkcyB0byBiZVxuICAvLyAqYmVsb3cqIHRoZSBjYWxsIHRvIF9yZWFkLiAgVGhlIHJlYXNvbiBpcyB0aGF0IGluIGNlcnRhaW5cbiAgLy8gc3ludGhldGljIHN0cmVhbSBjYXNlcywgc3VjaCBhcyBwYXNzdGhyb3VnaCBzdHJlYW1zLCBfcmVhZFxuICAvLyBtYXkgYmUgYSBjb21wbGV0ZWx5IHN5bmNocm9ub3VzIG9wZXJhdGlvbiB3aGljaCBtYXkgY2hhbmdlXG4gIC8vIHRoZSBzdGF0ZSBvZiB0aGUgcmVhZCBidWZmZXIsIHByb3ZpZGluZyBlbm91Z2ggZGF0YSB3aGVuXG4gIC8vIGJlZm9yZSB0aGVyZSB3YXMgKm5vdCogZW5vdWdoLlxuICAvL1xuICAvLyBTbywgdGhlIHN0ZXBzIGFyZTpcbiAgLy8gMS4gRmlndXJlIG91dCB3aGF0IHRoZSBzdGF0ZSBvZiB0aGluZ3Mgd2lsbCBiZSBhZnRlciB3ZSBkb1xuICAvLyBhIHJlYWQgZnJvbSB0aGUgYnVmZmVyLlxuICAvL1xuICAvLyAyLiBJZiB0aGF0IHJlc3VsdGluZyBzdGF0ZSB3aWxsIHRyaWdnZXIgYSBfcmVhZCwgdGhlbiBjYWxsIF9yZWFkLlxuICAvLyBOb3RlIHRoYXQgdGhpcyBtYXkgYmUgYXN5bmNocm9ub3VzLCBvciBzeW5jaHJvbm91cy4gIFllcywgaXQgaXNcbiAgLy8gZGVlcGx5IHVnbHkgdG8gd3JpdGUgQVBJcyB0aGlzIHdheSwgYnV0IHRoYXQgc3RpbGwgZG9lc24ndCBtZWFuXG4gIC8vIHRoYXQgdGhlIFJlYWRhYmxlIGNsYXNzIHNob3VsZCBiZWhhdmUgaW1wcm9wZXJseSwgYXMgc3RyZWFtcyBhcmVcbiAgLy8gZGVzaWduZWQgdG8gYmUgc3luYy9hc3luYyBhZ25vc3RpYy5cbiAgLy8gVGFrZSBub3RlIGlmIHRoZSBfcmVhZCBjYWxsIGlzIHN5bmMgb3IgYXN5bmMgKGllLCBpZiB0aGUgcmVhZCBjYWxsXG4gIC8vIGhhcyByZXR1cm5lZCB5ZXQpLCBzbyB0aGF0IHdlIGtub3cgd2hldGhlciBvciBub3QgaXQncyBzYWZlIHRvIGVtaXRcbiAgLy8gJ3JlYWRhYmxlJyBldGMuXG4gIC8vXG4gIC8vIDMuIEFjdHVhbGx5IHB1bGwgdGhlIHJlcXVlc3RlZCBjaHVua3Mgb3V0IG9mIHRoZSBidWZmZXIgYW5kIHJldHVybi5cblxuICAvLyBpZiB3ZSBuZWVkIGEgcmVhZGFibGUgZXZlbnQsIHRoZW4gd2UgbmVlZCB0byBkbyBzb21lIHJlYWRpbmcuXG4gIHZhciBkb1JlYWQgPSBzdGF0ZS5uZWVkUmVhZGFibGU7XG4gIGRlYnVnKCduZWVkIHJlYWRhYmxlJywgZG9SZWFkKTtcblxuICAvLyBpZiB3ZSBjdXJyZW50bHkgaGF2ZSBsZXNzIHRoYW4gdGhlIGhpZ2hXYXRlck1hcmssIHRoZW4gYWxzbyByZWFkIHNvbWVcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCB8fCBzdGF0ZS5sZW5ndGggLSBuIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRvUmVhZCA9IHRydWU7XG4gICAgZGVidWcoJ2xlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrJywgZG9SZWFkKTtcbiAgfVxuXG4gIC8vIGhvd2V2ZXIsIGlmIHdlJ3ZlIGVuZGVkLCB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQsIGFuZCBpZiB3ZSdyZSBhbHJlYWR5XG4gIC8vIHJlYWRpbmcsIHRoZW4gaXQncyB1bm5lY2Vzc2FyeS5cbiAgaWYgKHN0YXRlLmVuZGVkIHx8IHN0YXRlLnJlYWRpbmcpIHtcbiAgICBkb1JlYWQgPSBmYWxzZTtcbiAgICBkZWJ1ZygncmVhZGluZyBvciBlbmRlZCcsIGRvUmVhZCk7XG4gIH1cblxuICBpZiAoZG9SZWFkKSB7XG4gICAgZGVidWcoJ2RvIHJlYWQnKTtcbiAgICBzdGF0ZS5yZWFkaW5nID0gdHJ1ZTtcbiAgICBzdGF0ZS5zeW5jID0gdHJ1ZTtcbiAgICAvLyBpZiB0aGUgbGVuZ3RoIGlzIGN1cnJlbnRseSB6ZXJvLCB0aGVuIHdlICpuZWVkKiBhIHJlYWRhYmxlIGV2ZW50LlxuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApXG4gICAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIC8vIGNhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcbiAgICB0aGlzLl9yZWFkKHN0YXRlLmhpZ2hXYXRlck1hcmspO1xuICAgIHN0YXRlLnN5bmMgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIElmIF9yZWFkIHB1c2hlZCBkYXRhIHN5bmNocm9ub3VzbHksIHRoZW4gYHJlYWRpbmdgIHdpbGwgYmUgZmFsc2UsXG4gIC8vIGFuZCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBtdWNoIGRhdGEgd2UgY2FuIHJldHVybiB0byB0aGUgdXNlci5cbiAgaWYgKGRvUmVhZCAmJiAhc3RhdGUucmVhZGluZylcbiAgICBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuXG4gIHZhciByZXQ7XG4gIGlmIChuID4gMClcbiAgICByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7XG4gIGVsc2VcbiAgICByZXQgPSBudWxsO1xuXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIG4gPSAwO1xuICB9XG5cbiAgc3RhdGUubGVuZ3RoIC09IG47XG5cbiAgLy8gSWYgd2UgaGF2ZSBub3RoaW5nIGluIHRoZSBidWZmZXIsIHRoZW4gd2Ugd2FudCB0byBrbm93XG4gIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuZW5kZWQpXG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyBJZiB3ZSB0cmllZCB0byByZWFkKCkgcGFzdCB0aGUgRU9GLCB0aGVuIGVtaXQgZW5kIG9uIHRoZSBuZXh0IHRpY2suXG4gIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApXG4gICAgZW5kUmVhZGFibGUodGhpcyk7XG5cbiAgaWYgKHJldCAhPT0gbnVsbClcbiAgICB0aGlzLmVtaXQoJ2RhdGEnLCByZXQpO1xuXG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKSB7XG4gIHZhciBlciA9IG51bGw7XG4gIGlmICghKEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpICYmXG4gICAgICB0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmXG4gICAgICBjaHVuayAhPT0gbnVsbCAmJlxuICAgICAgY2h1bmsgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICByZXR1cm4gZXI7XG59XG5cblxuZnVuY3Rpb24gb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5lbmRlZCkgcmV0dXJuO1xuICBpZiAoc3RhdGUuZGVjb2Rlcikge1xuICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkge1xuICAgICAgc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWU7XG5cbiAgLy8gZW1pdCAncmVhZGFibGUnIG5vdyB0byBtYWtlIHN1cmUgaXQgZ2V0cyBwaWNrZWQgdXAuXG4gIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xufVxuXG4vLyBEb24ndCBlbWl0IHJlYWRhYmxlIHJpZ2h0IGF3YXkgaW4gc3luYyBtb2RlLCBiZWNhdXNlIHRoaXMgY2FuIHRyaWdnZXJcbi8vIGFub3RoZXIgcmVhZCgpIGNhbGwgPT4gc3RhY2sgb3ZlcmZsb3cuICBUaGlzIHdheSwgaXQgbWlnaHQgdHJpZ2dlclxuLy8gYSBuZXh0VGljayByZWN1cnNpb24gd2FybmluZywgYnV0IHRoYXQncyBub3Qgc28gYmFkLlxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkge1xuICAgIGRlYnVnKCdlbWl0UmVhZGFibGUnLCBzdGF0ZS5mbG93aW5nKTtcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSB0cnVlO1xuICAgIGlmIChzdGF0ZS5zeW5jKVxuICAgICAgcHJvY2Vzc05leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSk7XG4gICAgZWxzZVxuICAgICAgZW1pdFJlYWRhYmxlXyhzdHJlYW0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZV8oc3RyZWFtKSB7XG4gIGRlYnVnKCdlbWl0IHJlYWRhYmxlJyk7XG4gIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpO1xuICBmbG93KHN0cmVhbSk7XG59XG5cblxuLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nTW9yZSkge1xuICAgIHN0YXRlLnJlYWRpbmdNb3JlID0gdHJ1ZTtcbiAgICBwcm9jZXNzTmV4dFRpY2sobWF5YmVSZWFkTW9yZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgd2hpbGUgKCFzdGF0ZS5yZWFkaW5nICYmICFzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5lbmRlZCAmJlxuICAgICAgICAgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRlYnVnKCdtYXliZVJlYWRNb3JlIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICAgIGlmIChsZW4gPT09IHN0YXRlLmxlbmd0aClcbiAgICAgIC8vIGRpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVhaztcbiAgICBlbHNlXG4gICAgICBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gIH1cbiAgc3RhdGUucmVhZGluZ01vcmUgPSBmYWxzZTtcbn1cblxuLy8gYWJzdHJhY3QgbWV0aG9kLiAgdG8gYmUgb3ZlcnJpZGRlbiBpbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gY2FsbCBjYihlciwgZGF0YSkgd2hlcmUgZGF0YSBpcyA8PSBuIGluIGxlbmd0aC5cbi8vIGZvciB2aXJ0dWFsIChub24tc3RyaW5nLCBub24tYnVmZmVyKSBzdHJlYW1zLCBcImxlbmd0aFwiIGlzIHNvbWV3aGF0XG4vLyBhcmJpdHJhcnksIGFuZCBwZXJoYXBzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuXG5SZWFkYWJsZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbihuKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpKTtcbn07XG5cblJlYWRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdCwgcGlwZU9wdHMpIHtcbiAgdmFyIHNyYyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgc3dpdGNoIChzdGF0ZS5waXBlc0NvdW50KSB7XG4gICAgY2FzZSAwOlxuICAgICAgc3RhdGUucGlwZXMgPSBkZXN0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc3RhdGUucGlwZXMgPSBbc3RhdGUucGlwZXMsIGRlc3RdO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0YXRlLnBpcGVzLnB1c2goZGVzdCk7XG4gICAgICBicmVhaztcbiAgfVxuICBzdGF0ZS5waXBlc0NvdW50ICs9IDE7XG4gIGRlYnVnKCdwaXBlIGNvdW50PSVkIG9wdHM9JWonLCBzdGF0ZS5waXBlc0NvdW50LCBwaXBlT3B0cyk7XG5cbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJlxuICAgICAgICAgICAgICBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJlxuICAgICAgICAgICAgICBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcblxuICB2YXIgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogY2xlYW51cDtcbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpXG4gICAgcHJvY2Vzc05leHRUaWNrKGVuZEZuKTtcbiAgZWxzZVxuICAgIHNyYy5vbmNlKCdlbmQnLCBlbmRGbik7XG5cbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSkge1xuICAgIGRlYnVnKCdvbnVucGlwZScpO1xuICAgIGlmIChyZWFkYWJsZSA9PT0gc3JjKSB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgZGVidWcoJ29uZW5kJyk7XG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG4gIC8vIHdoZW4gdGhlIGRlc3QgZHJhaW5zLCBpdCByZWR1Y2VzIHRoZSBhd2FpdERyYWluIGNvdW50ZXJcbiAgLy8gb24gdGhlIHNvdXJjZS4gIFRoaXMgd291bGQgYmUgbW9yZSBlbGVnYW50IHdpdGggYSAub25jZSgpXG4gIC8vIGhhbmRsZXIgaW4gZmxvdygpLCBidXQgYWRkaW5nIGFuZCByZW1vdmluZyByZXBlYXRlZGx5IGlzXG4gIC8vIHRvbyBzbG93LlxuICB2YXIgb25kcmFpbiA9IHBpcGVPbkRyYWluKHNyYyk7XG4gIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbik7XG5cbiAgdmFyIGNsZWFuZWRVcCA9IGZhbHNlO1xuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIGRlYnVnKCdjbGVhbnVwJyk7XG4gICAgLy8gY2xlYW51cCBldmVudCBoYW5kbGVycyBvbmNlIHRoZSBwaXBlIGlzIGJyb2tlblxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgb25kcmFpbik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBjbGVhbnVwKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpO1xuXG4gICAgY2xlYW5lZFVwID0gdHJ1ZTtcblxuICAgIC8vIGlmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gJiZcbiAgICAgICAgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSlcbiAgICAgIG9uZHJhaW4oKTtcbiAgfVxuXG4gIHNyYy5vbignZGF0YScsIG9uZGF0YSk7XG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGRlYnVnKCdvbmRhdGEnKTtcbiAgICB2YXIgcmV0ID0gZGVzdC53cml0ZShjaHVuayk7XG4gICAgaWYgKGZhbHNlID09PSByZXQpIHtcbiAgICAgIC8vIElmIHRoZSB1c2VyIHVucGlwZWQgZHVyaW5nIGBkZXN0LndyaXRlKClgLCBpdCBpcyBwb3NzaWJsZVxuICAgICAgLy8gdG8gZ2V0IHN0dWNrIGluIGEgcGVybWFuZW50bHkgcGF1c2VkIHN0YXRlIGlmIHRoYXQgd3JpdGVcbiAgICAgIC8vIGFsc28gcmV0dXJuZWQgZmFsc2UuXG4gICAgICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSAmJlxuICAgICAgICAgIHN0YXRlLnBpcGVzWzBdID09PSBkZXN0ICYmXG4gICAgICAgICAgc3JjLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA9PT0gMSAmJlxuICAgICAgICAgICFjbGVhbmVkVXApIHtcbiAgICAgICAgZGVidWcoJ2ZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZScsIHNyYy5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKTtcbiAgICAgICAgc3JjLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4rKztcbiAgICAgIH1cbiAgICAgIHNyYy5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBkZXN0IGhhcyBhbiBlcnJvciwgdGhlbiBzdG9wIHBpcGluZyBpbnRvIGl0LlxuICAvLyBob3dldmVyLCBkb24ndCBzdXBwcmVzcyB0aGUgdGhyb3dpbmcgYmVoYXZpb3IgZm9yIHRoaXMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGVyKTtcbiAgICB1bnBpcGUoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGlmIChFRWxpc3RlbmVyQ291bnQoZGVzdCwgJ2Vycm9yJykgPT09IDApXG4gICAgICBkZXN0LmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9XG4gIC8vIFRoaXMgaXMgYSBicnV0YWxseSB1Z2x5IGhhY2sgdG8gbWFrZSBzdXJlIHRoYXQgb3VyIGVycm9yIGhhbmRsZXJcbiAgLy8gaXMgYXR0YWNoZWQgYmVmb3JlIGFueSB1c2VybGFuZCBvbmVzLiAgTkVWRVIgRE8gVEhJUy5cbiAgaWYgKCFkZXN0Ll9ldmVudHMgfHwgIWRlc3QuX2V2ZW50cy5lcnJvcilcbiAgICBkZXN0Lm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICBlbHNlIGlmIChpc0FycmF5KGRlc3QuX2V2ZW50cy5lcnJvcikpXG4gICAgZGVzdC5fZXZlbnRzLmVycm9yLnVuc2hpZnQob25lcnJvcik7XG4gIGVsc2VcbiAgICBkZXN0Ll9ldmVudHMuZXJyb3IgPSBbb25lcnJvciwgZGVzdC5fZXZlbnRzLmVycm9yXTtcblxuXG4gIC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnY2xvc2UnLCBvbmNsb3NlKTtcbiAgZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgZGVidWcoJ29uZmluaXNoJyk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcblxuICBmdW5jdGlvbiB1bnBpcGUoKSB7XG4gICAgZGVidWcoJ3VucGlwZScpO1xuICAgIHNyYy51bnBpcGUoZGVzdCk7XG4gIH1cblxuICAvLyB0ZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0b1xuICBkZXN0LmVtaXQoJ3BpcGUnLCBzcmMpO1xuXG4gIC8vIHN0YXJ0IHRoZSBmbG93IGlmIGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3BpcGUgcmVzdW1lJyk7XG4gICAgc3JjLnJlc3VtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG5mdW5jdGlvbiBwaXBlT25EcmFpbihzcmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTtcbiAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbilcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW4tLTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbiA9PT0gMCAmJiBFRWxpc3RlbmVyQ291bnQoc3JjLCAnZGF0YScpKSB7XG4gICAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICAgIGZsb3coc3JjKTtcbiAgICB9XG4gIH07XG59XG5cblxuUmVhZGFibGUucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uKGRlc3QpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICAvLyBpZiB3ZSdyZSBub3QgcGlwaW5nIGFueXdoZXJlLCB0aGVuIGRvIG5vdGhpbmcuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAwKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIGp1c3Qgb25lIGRlc3RpbmF0aW9uLiAgbW9zdCBjb21tb24gY2FzZS5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHtcbiAgICAvLyBwYXNzZWQgaW4gb25lLCBidXQgaXQncyBub3QgdGhlIHJpZ2h0IG9uZS5cbiAgICBpZiAoZGVzdCAmJiBkZXN0ICE9PSBzdGF0ZS5waXBlcylcbiAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKCFkZXN0KVxuICAgICAgZGVzdCA9IHN0YXRlLnBpcGVzO1xuXG4gICAgLy8gZ290IGEgbWF0Y2guXG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICBpZiAoZGVzdClcbiAgICAgIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzbG93IGNhc2UuIG11bHRpcGxlIHBpcGUgZGVzdGluYXRpb25zLlxuXG4gIGlmICghZGVzdCkge1xuICAgIC8vIHJlbW92ZSBhbGwuXG4gICAgdmFyIGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnBpcGVzQ291bnQ7XG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG4gIHZhciBpID0gaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCk7XG4gIGlmIChpID09PSAtMSlcbiAgICByZXR1cm4gdGhpcztcblxuICBzdGF0ZS5waXBlcy5zcGxpY2UoaSwgMSk7XG4gIHN0YXRlLnBpcGVzQ291bnQgLT0gMTtcbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpXG4gICAgc3RhdGUucGlwZXMgPSBzdGF0ZS5waXBlc1swXTtcblxuICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gc2V0IHVwIGRhdGEgZXZlbnRzIGlmIHRoZXkgYXJlIGFza2VkIGZvclxuLy8gRW5zdXJlIHJlYWRhYmxlIGxpc3RlbmVycyBldmVudHVhbGx5IGdldCBzb21ldGhpbmdcblJlYWRhYmxlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKGV2LCBmbikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2LCBmbik7XG5cbiAgLy8gSWYgbGlzdGVuaW5nIHRvIGRhdGEsIGFuZCBpdCBoYXMgbm90IGV4cGxpY2l0bHkgYmVlbiBwYXVzZWQsXG4gIC8vIHRoZW4gY2FsbCByZXN1bWUgdG8gc3RhcnQgdGhlIGZsb3cgb2YgZGF0YSBvbiB0aGUgbmV4dCB0aWNrLlxuICBpZiAoZXYgPT09ICdkYXRhJyAmJiBmYWxzZSAhPT0gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSB7XG4gICAgdGhpcy5yZXN1bWUoKTtcbiAgfVxuXG4gIGlmIChldiA9PT0gJ3JlYWRhYmxlJyAmJiB0aGlzLnJlYWRhYmxlKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAoIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHRydWU7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICAgICAgcHJvY2Vzc05leHRUaWNrKG5SZWFkaW5nTmV4dFRpY2ssIHRoaXMpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgZW1pdFJlYWRhYmxlKHRoaXMsIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcblJlYWRhYmxlLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IFJlYWRhYmxlLnByb3RvdHlwZS5vbjtcblxuZnVuY3Rpb24gblJlYWRpbmdOZXh0VGljayhzZWxmKSB7XG4gIGRlYnVnKCdyZWFkYWJsZSBuZXh0dGljayByZWFkIDAnKTtcbiAgc2VsZi5yZWFkKDApO1xufVxuXG4vLyBwYXVzZSgpIGFuZCByZXN1bWUoKSBhcmUgcmVtbmFudHMgb2YgdGhlIGxlZ2FjeSByZWFkYWJsZSBzdHJlYW0gQVBJXG4vLyBJZiB0aGUgdXNlciB1c2VzIHRoZW0sIHRoZW4gc3dpdGNoIGludG8gb2xkIG1vZGUuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdyZXN1bWUnKTtcbiAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICByZXN1bWUodGhpcywgc3RhdGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZXN1bWVTY2hlZHVsZWQpIHtcbiAgICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHByb2Nlc3NOZXh0VGljayhyZXN1bWVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICBzdHJlYW0uZW1pdCgncmVzdW1lJyk7XG4gIGZsb3coc3RyZWFtKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpXG4gICAgc3RyZWFtLnJlYWQoMCk7XG59XG5cblJlYWRhYmxlLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcbiAgaWYgKGZhbHNlICE9PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGF1c2UnKTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG4gIGlmIChzdGF0ZS5mbG93aW5nKSB7XG4gICAgZG8ge1xuICAgICAgdmFyIGNodW5rID0gc3RyZWFtLnJlYWQoKTtcbiAgICB9IHdoaWxlIChudWxsICE9PSBjaHVuayAmJiBzdGF0ZS5mbG93aW5nKTtcbiAgfVxufVxuXG4vLyB3cmFwIGFuIG9sZC1zdHlsZSBzdHJlYW0gYXMgdGhlIGFzeW5jIGRhdGEgc291cmNlLlxuLy8gVGhpcyBpcyAqbm90KiBwYXJ0IG9mIHRoZSByZWFkYWJsZSBzdHJlYW0gaW50ZXJmYWNlLlxuLy8gSXQgaXMgYW4gdWdseSB1bmZvcnR1bmF0ZSBtZXNzIG9mIGhpc3RvcnkuXG5SZWFkYWJsZS5wcm90b3R5cGUud3JhcCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgcGF1c2VkID0gZmFsc2U7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnKCd3cmFwcGVkIGVuZCcpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpXG4gICAgICAgIHNlbGYucHVzaChjaHVuayk7XG4gICAgfVxuXG4gICAgc2VsZi5wdXNoKG51bGwpO1xuICB9KTtcblxuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbihjaHVuaykge1xuICAgIGRlYnVnKCd3cmFwcGVkIGRhdGEnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlcilcbiAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAvLyBkb24ndCBza2lwIG92ZXIgZmFsc3kgdmFsdWVzIGluIG9iamVjdE1vZGVcbiAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSAmJiAoY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IHVuZGVmaW5lZCkpXG4gICAgICByZXR1cm47XG4gICAgZWxzZSBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgKCFjaHVuayB8fCAhY2h1bmsubGVuZ3RoKSlcbiAgICAgIHJldHVybjtcblxuICAgIHZhciByZXQgPSBzZWxmLnB1c2goY2h1bmspO1xuICAgIGlmICghcmV0KSB7XG4gICAgICBwYXVzZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBwcm94eSBhbGwgdGhlIG90aGVyIG1ldGhvZHMuXG4gIC8vIGltcG9ydGFudCB3aGVuIHdyYXBwaW5nIGZpbHRlcnMgYW5kIGR1cGxleGVzLlxuICBmb3IgKHZhciBpIGluIHN0cmVhbSkge1xuICAgIGlmICh0aGlzW2ldID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHN0cmVhbVtpXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1tpXSA9IGZ1bmN0aW9uKG1ldGhvZCkgeyByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW1bbWV0aG9kXS5hcHBseShzdHJlYW0sIGFyZ3VtZW50cyk7XG4gICAgICB9OyB9KGkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByb3h5IGNlcnRhaW4gaW1wb3J0YW50IGV2ZW50cy5cbiAgdmFyIGV2ZW50cyA9IFsnZXJyb3InLCAnY2xvc2UnLCAnZGVzdHJveScsICdwYXVzZScsICdyZXN1bWUnXTtcbiAgZm9yRWFjaChldmVudHMsIGZ1bmN0aW9uKGV2KSB7XG4gICAgc3RyZWFtLm9uKGV2LCBzZWxmLmVtaXQuYmluZChzZWxmLCBldikpO1xuICB9KTtcblxuICAvLyB3aGVuIHdlIHRyeSB0byBjb25zdW1lIHNvbWUgbW9yZSBieXRlcywgc2ltcGx5IHVucGF1c2UgdGhlXG4gIC8vIHVuZGVybHlpbmcgc3RyZWFtLlxuICBzZWxmLl9yZWFkID0gZnVuY3Rpb24obikge1xuICAgIGRlYnVnKCd3cmFwcGVkIF9yZWFkJywgbik7XG4gICAgaWYgKHBhdXNlZCkge1xuICAgICAgcGF1c2VkID0gZmFsc2U7XG4gICAgICBzdHJlYW0ucmVzdW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBzZWxmO1xufTtcblxuXG4vLyBleHBvc2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG5SZWFkYWJsZS5fZnJvbUxpc3QgPSBmcm9tTGlzdDtcblxuLy8gUGx1Y2sgb2ZmIG4gYnl0ZXMgZnJvbSBhbiBhcnJheSBvZiBidWZmZXJzLlxuLy8gTGVuZ3RoIGlzIHRoZSBjb21iaW5lZCBsZW5ndGhzIG9mIGFsbCB0aGUgYnVmZmVycyBpbiB0aGUgbGlzdC5cbmZ1bmN0aW9uIGZyb21MaXN0KG4sIHN0YXRlKSB7XG4gIHZhciBsaXN0ID0gc3RhdGUuYnVmZmVyO1xuICB2YXIgbGVuZ3RoID0gc3RhdGUubGVuZ3RoO1xuICB2YXIgc3RyaW5nTW9kZSA9ICEhc3RhdGUuZGVjb2RlcjtcbiAgdmFyIG9iamVjdE1vZGUgPSAhIXN0YXRlLm9iamVjdE1vZGU7XG4gIHZhciByZXQ7XG5cbiAgLy8gbm90aGluZyBpbiB0aGUgbGlzdCwgZGVmaW5pdGVseSBlbXB0eS5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiBudWxsO1xuXG4gIGlmIChsZW5ndGggPT09IDApXG4gICAgcmV0ID0gbnVsbDtcbiAgZWxzZSBpZiAob2JqZWN0TW9kZSlcbiAgICByZXQgPSBsaXN0LnNoaWZ0KCk7XG4gIGVsc2UgaWYgKCFuIHx8IG4gPj0gbGVuZ3RoKSB7XG4gICAgLy8gcmVhZCBpdCBhbGwsIHRydW5jYXRlIHRoZSBhcnJheS5cbiAgICBpZiAoc3RyaW5nTW9kZSlcbiAgICAgIHJldCA9IGxpc3Quam9pbignJyk7XG4gICAgZWxzZSBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICByZXQgPSBsaXN0WzBdO1xuICAgIGVsc2VcbiAgICAgIHJldCA9IEJ1ZmZlci5jb25jYXQobGlzdCwgbGVuZ3RoKTtcbiAgICBsaXN0Lmxlbmd0aCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVhZCBqdXN0IHNvbWUgb2YgaXQuXG4gICAgaWYgKG4gPCBsaXN0WzBdLmxlbmd0aCkge1xuICAgICAgLy8ganVzdCB0YWtlIGEgcGFydCBvZiB0aGUgZmlyc3QgbGlzdCBpdGVtLlxuICAgICAgLy8gc2xpY2UgaXMgdGhlIHNhbWUgZm9yIGJ1ZmZlcnMgYW5kIHN0cmluZ3MuXG4gICAgICB2YXIgYnVmID0gbGlzdFswXTtcbiAgICAgIHJldCA9IGJ1Zi5zbGljZSgwLCBuKTtcbiAgICAgIGxpc3RbMF0gPSBidWYuc2xpY2Uobik7XG4gICAgfSBlbHNlIGlmIChuID09PSBsaXN0WzBdLmxlbmd0aCkge1xuICAgICAgLy8gZmlyc3QgbGlzdCBpcyBhIHBlcmZlY3QgbWF0Y2hcbiAgICAgIHJldCA9IGxpc3Quc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29tcGxleCBjYXNlLlxuICAgICAgLy8gd2UgaGF2ZSBlbm91Z2ggdG8gY292ZXIgaXQsIGJ1dCBpdCBzcGFucyBwYXN0IHRoZSBmaXJzdCBidWZmZXIuXG4gICAgICBpZiAoc3RyaW5nTW9kZSlcbiAgICAgICAgcmV0ID0gJyc7XG4gICAgICBlbHNlXG4gICAgICAgIHJldCA9IG5ldyBCdWZmZXIobik7XG5cbiAgICAgIHZhciBjID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsICYmIGMgPCBuOyBpKyspIHtcbiAgICAgICAgdmFyIGJ1ZiA9IGxpc3RbMF07XG4gICAgICAgIHZhciBjcHkgPSBNYXRoLm1pbihuIC0gYywgYnVmLmxlbmd0aCk7XG5cbiAgICAgICAgaWYgKHN0cmluZ01vZGUpXG4gICAgICAgICAgcmV0ICs9IGJ1Zi5zbGljZSgwLCBjcHkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgYnVmLmNvcHkocmV0LCBjLCAwLCBjcHkpO1xuXG4gICAgICAgIGlmIChjcHkgPCBidWYubGVuZ3RoKVxuICAgICAgICAgIGxpc3RbMF0gPSBidWYuc2xpY2UoY3B5KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcblxuICAgICAgICBjICs9IGNweTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuXG4gIC8vIElmIHdlIGdldCBoZXJlIGJlZm9yZSBjb25zdW1pbmcgYWxsIHRoZSBieXRlcywgdGhlbiB0aGF0IGlzIGFcbiAgLy8gYnVnIGluIG5vZGUuICBTaG91bGQgbmV2ZXIgaGFwcGVuLlxuICBpZiAoc3RhdGUubGVuZ3RoID4gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VuZFJlYWRhYmxlIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7XG5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHByb2Nlc3NOZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZU5UKHN0YXRlLCBzdHJlYW0pIHtcbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0ucmVhZGFibGUgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yRWFjaCAoeHMsIGYpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmKHhzW2ldLCBpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmRleE9mICh4cywgeCkge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmICh4c1tpXSA9PT0geCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuIiwidmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbS90cmFuc2Zvcm0nKVxuICAsIGluaGVyaXRzICA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0c1xuICAsIHh0ZW5kICAgICA9IHJlcXVpcmUoJ3h0ZW5kJylcblxuZnVuY3Rpb24gRGVzdHJveWFibGVUcmFuc2Zvcm0ob3B0cykge1xuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRzKVxuICB0aGlzLl9kZXN0cm95ZWQgPSBmYWxzZVxufVxuXG5pbmhlcml0cyhEZXN0cm95YWJsZVRyYW5zZm9ybSwgVHJhbnNmb3JtKVxuXG5EZXN0cm95YWJsZVRyYW5zZm9ybS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKGVycikge1xuICBpZiAodGhpcy5fZGVzdHJveWVkKSByZXR1cm5cbiAgdGhpcy5fZGVzdHJveWVkID0gdHJ1ZVxuICBcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgaWYgKGVycilcbiAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgc2VsZi5lbWl0KCdjbG9zZScpXG4gIH0pXG59XG5cbi8vIGEgbm9vcCBfdHJhbnNmb3JtIGZ1bmN0aW9uXG5mdW5jdGlvbiBub29wIChjaHVuaywgZW5jLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayhudWxsLCBjaHVuaylcbn1cblxuXG4vLyBjcmVhdGUgYSBuZXcgZXhwb3J0IGZ1bmN0aW9uLCB1c2VkIGJ5IGJvdGggdGhlIG1haW4gZXhwb3J0IGFuZFxuLy8gdGhlIC5jdG9yIGV4cG9ydCwgY29udGFpbnMgY29tbW9uIGxvZ2ljIGZvciBkZWFsaW5nIHdpdGggYXJndW1lbnRzXG5mdW5jdGlvbiB0aHJvdWdoMiAoY29uc3RydWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAob3B0aW9ucywgdHJhbnNmb3JtLCBmbHVzaCkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmbHVzaCAgICAgPSB0cmFuc2Zvcm1cbiAgICAgIHRyYW5zZm9ybSA9IG9wdGlvbnNcbiAgICAgIG9wdGlvbnMgICA9IHt9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0gIT0gJ2Z1bmN0aW9uJylcbiAgICAgIHRyYW5zZm9ybSA9IG5vb3BcblxuICAgIGlmICh0eXBlb2YgZmx1c2ggIT0gJ2Z1bmN0aW9uJylcbiAgICAgIGZsdXNoID0gbnVsbFxuXG4gICAgcmV0dXJuIGNvbnN0cnVjdChvcHRpb25zLCB0cmFuc2Zvcm0sIGZsdXNoKVxuICB9XG59XG5cblxuLy8gbWFpbiBleHBvcnQsIGp1c3QgbWFrZSBtZSBhIHRyYW5zZm9ybSBzdHJlYW0hXG5tb2R1bGUuZXhwb3J0cyA9IHRocm91Z2gyKGZ1bmN0aW9uIChvcHRpb25zLCB0cmFuc2Zvcm0sIGZsdXNoKSB7XG4gIHZhciB0MiA9IG5ldyBEZXN0cm95YWJsZVRyYW5zZm9ybShvcHRpb25zKVxuXG4gIHQyLl90cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cblxuICBpZiAoZmx1c2gpXG4gICAgdDIuX2ZsdXNoID0gZmx1c2hcblxuICByZXR1cm4gdDJcbn0pXG5cblxuLy8gbWFrZSBtZSBhIHJldXNhYmxlIHByb3RvdHlwZSB0aGF0IEkgY2FuIGBuZXdgLCBvciBpbXBsaWNpdGx5IGBuZXdgXG4vLyB3aXRoIGEgY29uc3RydWN0b3IgY2FsbFxubW9kdWxlLmV4cG9ydHMuY3RvciA9IHRocm91Z2gyKGZ1bmN0aW9uIChvcHRpb25zLCB0cmFuc2Zvcm0sIGZsdXNoKSB7XG4gIGZ1bmN0aW9uIFRocm91Z2gyIChvdmVycmlkZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUaHJvdWdoMikpXG4gICAgICByZXR1cm4gbmV3IFRocm91Z2gyKG92ZXJyaWRlKVxuXG4gICAgdGhpcy5vcHRpb25zID0geHRlbmQob3B0aW9ucywgb3ZlcnJpZGUpXG5cbiAgICBEZXN0cm95YWJsZVRyYW5zZm9ybS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucylcbiAgfVxuXG4gIGluaGVyaXRzKFRocm91Z2gyLCBEZXN0cm95YWJsZVRyYW5zZm9ybSlcblxuICBUaHJvdWdoMi5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IHRyYW5zZm9ybVxuXG4gIGlmIChmbHVzaClcbiAgICBUaHJvdWdoMi5wcm90b3R5cGUuX2ZsdXNoID0gZmx1c2hcblxuICByZXR1cm4gVGhyb3VnaDJcbn0pXG5cblxubW9kdWxlLmV4cG9ydHMub2JqID0gdGhyb3VnaDIoZnVuY3Rpb24gKG9wdGlvbnMsIHRyYW5zZm9ybSwgZmx1c2gpIHtcbiAgdmFyIHQyID0gbmV3IERlc3Ryb3lhYmxlVHJhbnNmb3JtKHh0ZW5kKHsgb2JqZWN0TW9kZTogdHJ1ZSwgaGlnaFdhdGVyTWFyazogMTYgfSwgb3B0aW9ucykpXG5cbiAgdDIuX3RyYW5zZm9ybSA9IHRyYW5zZm9ybVxuXG4gIGlmIChmbHVzaClcbiAgICB0Mi5fZmx1c2ggPSBmbHVzaFxuXG4gIHJldHVybiB0MlxufSlcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIGR1cGxleCBzdHJlYW0gaXMganVzdCBhIHN0cmVhbSB0aGF0IGlzIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLlxuLy8gU2luY2UgSlMgZG9lc24ndCBoYXZlIG11bHRpcGxlIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UsIHRoaXMgY2xhc3Ncbi8vIHByb3RvdHlwYWxseSBpbmhlcml0cyBmcm9tIFJlYWRhYmxlLCBhbmQgdGhlbiBwYXJhc2l0aWNhbGx5IGZyb21cbi8vIFdyaXRhYmxlLlxuXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleDtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgcmV0dXJuIGtleXM7XG59XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV9yZWFkYWJsZScpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3dyaXRhYmxlJyk7XG5cbnV0aWwuaW5oZXJpdHMoRHVwbGV4LCBSZWFkYWJsZSk7XG5cbmZvckVhY2gob2JqZWN0S2V5cyhXcml0YWJsZS5wcm90b3R5cGUpLCBmdW5jdGlvbihtZXRob2QpIHtcbiAgaWYgKCFEdXBsZXgucHJvdG90eXBlW21ldGhvZF0pXG4gICAgRHVwbGV4LnByb3RvdHlwZVttZXRob2RdID0gV3JpdGFibGUucHJvdG90eXBlW21ldGhvZF07XG59KTtcblxuZnVuY3Rpb24gRHVwbGV4KG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpXG4gICAgcmV0dXJuIG5ldyBEdXBsZXgob3B0aW9ucyk7XG5cbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlYWRhYmxlID09PSBmYWxzZSlcbiAgICB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy53cml0YWJsZSA9PT0gZmFsc2UpXG4gICAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuXG4gIHRoaXMuYWxsb3dIYWxmT3BlbiA9IHRydWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuYWxsb3dIYWxmT3BlbiA9PT0gZmFsc2UpXG4gICAgdGhpcy5hbGxvd0hhbGZPcGVuID0gZmFsc2U7XG5cbiAgdGhpcy5vbmNlKCdlbmQnLCBvbmVuZCk7XG59XG5cbi8vIHRoZSBuby1oYWxmLW9wZW4gZW5mb3JjZXJcbmZ1bmN0aW9uIG9uZW5kKCkge1xuICAvLyBpZiB3ZSBhbGxvdyBoYWxmLW9wZW4gc3RhdGUsIG9yIGlmIHRoZSB3cml0YWJsZSBzaWRlIGVuZGVkLFxuICAvLyB0aGVuIHdlJ3JlIG9rLlxuICBpZiAodGhpcy5hbGxvd0hhbGZPcGVuIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQpXG4gICAgcmV0dXJuO1xuXG4gIC8vIG5vIG1vcmUgZGF0YSBjYW4gYmUgd3JpdHRlbi5cbiAgLy8gQnV0IGFsbG93IG1vcmUgd3JpdGVzIHRvIGhhcHBlbiBpbiB0aGlzIHRpY2suXG4gIHByb2Nlc3MubmV4dFRpY2sodGhpcy5lbmQuYmluZCh0aGlzKSk7XG59XG5cbmZ1bmN0aW9uIGZvckVhY2ggKHhzLCBmKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZih4c1tpXSwgaSk7XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRhYmxlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5Jyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5SZWFkYWJsZS5SZWFkYWJsZVN0YXRlID0gUmVhZGFibGVTdGF0ZTtcblxudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuaWYgKCFFRS5saXN0ZW5lckNvdW50KSBFRS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RoO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIFN0cmluZ0RlY29kZXI7XG5cbnV0aWwuaW5oZXJpdHMoUmVhZGFibGUsIFN0cmVhbSk7XG5cbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gKGh3bSB8fCBod20gPT09IDApID8gaHdtIDogMTYgKiAxMDI0O1xuXG4gIC8vIGNhc3QgdG8gaW50cy5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gfn50aGlzLmhpZ2hXYXRlck1hcms7XG5cbiAgdGhpcy5idWZmZXIgPSBbXTtcbiAgdGhpcy5sZW5ndGggPSAwO1xuICB0aGlzLnBpcGVzID0gbnVsbDtcbiAgdGhpcy5waXBlc0NvdW50ID0gMDtcbiAgdGhpcy5mbG93aW5nID0gZmFsc2U7XG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIHRoaXMucmVhZGluZyA9IGZhbHNlO1xuXG4gIC8vIEluIHN0cmVhbXMgdGhhdCBuZXZlciBoYXZlIGFueSBkYXRhLCBhbmQgZG8gcHVzaChudWxsKSByaWdodCBhd2F5LFxuICAvLyB0aGUgY29uc3VtZXIgY2FuIG1pc3MgdGhlICdlbmQnIGV2ZW50IGlmIHRoZXkgZG8gc29tZSBJL08gYmVmb3JlXG4gIC8vIGNvbnN1bWluZyB0aGUgc3RyZWFtLiAgU28sIHdlIGRvbid0IGVtaXQoJ2VuZCcpIHVudGlsIHNvbWUgcmVhZGluZ1xuICAvLyBoYXBwZW5zLlxuICB0aGlzLmNhbGxlZFJlYWQgPSBmYWxzZTtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjdWFzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyB3aGVuZXZlciB3ZSByZXR1cm4gbnVsbCwgdGhlbiB3ZSBzZXQgYSBmbGFnIHRvIHNheVxuICAvLyB0aGF0IHdlJ3JlIGF3YWl0aW5nIGEgJ3JlYWRhYmxlJyBldmVudCBlbWlzc2lvbi5cbiAgdGhpcy5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZUxpc3RlbmluZyA9IGZhbHNlO1xuXG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBvcHRpb25zLmRlZmF1bHRFbmNvZGluZyB8fCAndXRmOCc7XG5cbiAgLy8gd2hlbiBwaXBpbmcsIHdlIG9ubHkgY2FyZSBhYm91dCAncmVhZGFibGUnIGV2ZW50cyB0aGF0IGhhcHBlblxuICAvLyBhZnRlciByZWFkKClpbmcgYWxsIHRoZSBieXRlcyBhbmQgbm90IGdldHRpbmcgYW55IHB1c2hiYWNrLlxuICB0aGlzLnJhbk91dCA9IGZhbHNlO1xuXG4gIC8vIHRoZSBudW1iZXIgb2Ygd3JpdGVycyB0aGF0IGFyZSBhd2FpdGluZyBhIGRyYWluIGV2ZW50IGluIC5waXBlKClzXG4gIHRoaXMuYXdhaXREcmFpbiA9IDA7XG5cbiAgLy8gaWYgdHJ1ZSwgYSBtYXliZVJlYWRNb3JlIGhhcyBiZWVuIHNjaGVkdWxlZFxuICB0aGlzLnJlYWRpbmdNb3JlID0gZmFsc2U7XG5cbiAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gIGlmIChvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgaWYgKCFTdHJpbmdEZWNvZGVyKVxuICAgICAgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyk7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gUmVhZGFibGUob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZGFibGUpKVxuICAgIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucyk7XG5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeVxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuLy8gTWFudWFsbHkgc2hvdmUgc29tZXRoaW5nIGludG8gdGhlIHJlYWQoKSBidWZmZXIuXG4vLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiB0aGUgaGlnaFdhdGVyTWFyayBoYXMgbm90IGJlZW4gaGl0IHlldCxcbi8vIHNpbWlsYXIgdG8gaG93IFdyaXRhYmxlLndyaXRlKCkgcmV0dXJucyB0cnVlIGlmIHlvdSBzaG91bGRcbi8vIHdyaXRlKCkgc29tZSBtb3JlLlxuUmVhZGFibGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyAmJiAhc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGVuY29kaW5nID0gZW5jb2RpbmcgfHwgc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuICAgIGlmIChlbmNvZGluZyAhPT0gc3RhdGUuZW5jb2RpbmcpIHtcbiAgICAgIGNodW5rID0gbmV3IEJ1ZmZlcihjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgZW5jb2RpbmcgPSAnJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBmYWxzZSk7XG59O1xuXG4vLyBVbnNoaWZ0IHNob3VsZCAqYWx3YXlzKiBiZSBzb21ldGhpbmcgZGlyZWN0bHkgb3V0IG9mIHJlYWQoKVxuUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbihjaHVuaykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssICcnLCB0cnVlKTtcbn07XG5cbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBhZGRUb0Zyb250KSB7XG4gIHZhciBlciA9IGNodW5rSW52YWxpZChzdGF0ZSwgY2h1bmspO1xuICBpZiAoZXIpIHtcbiAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIH0gZWxzZSBpZiAoY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICBpZiAoIXN0YXRlLmVuZGVkKVxuICAgICAgb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKTtcbiAgfSBlbHNlIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoc3RhdGUuZW5kZWQgJiYgIWFkZFRvRnJvbnQpIHtcbiAgICAgIHZhciBlID0gbmV3IEVycm9yKCdzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRicpO1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZSk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5lbmRFbWl0dGVkICYmIGFkZFRvRnJvbnQpIHtcbiAgICAgIHZhciBlID0gbmV3IEVycm9yKCdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcpO1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFhZGRUb0Zyb250ICYmICFlbmNvZGluZylcbiAgICAgICAgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcblxuICAgICAgLy8gdXBkYXRlIHRoZSBidWZmZXIgaW5mby5cbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICAgIGlmIChhZGRUb0Zyb250KSB7XG4gICAgICAgIHN0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUubmVlZFJlYWRhYmxlKVxuICAgICAgICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcblxuICAgICAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIWFkZFRvRnJvbnQpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gbmVlZE1vcmVEYXRhKHN0YXRlKTtcbn1cblxuXG5cbi8vIGlmIGl0J3MgcGFzdCB0aGUgaGlnaCB3YXRlciBtYXJrLCB3ZSBjYW4gcHVzaCBpbiBzb21lIG1vcmUuXG4vLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZVxuLy8gbW9yZSBieXRlcy4gIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsXG4vLyBzdWNoIGFzIHRoZSByZXBsLiAgQWxzbywgaWYgdGhlIHB1c2goKSB0cmlnZ2VyZWQgYVxuLy8gcmVhZGFibGUgZXZlbnQsIGFuZCB0aGUgdXNlciBjYWxsZWQgcmVhZChsYXJnZU51bWJlcikgc3VjaCB0aGF0XG4vLyBuZWVkUmVhZGFibGUgd2FzIHNldCwgdGhlbiB3ZSBvdWdodCB0byBwdXNoIG1vcmUsIHNvIHRoYXQgYW5vdGhlclxuLy8gJ3JlYWRhYmxlJyBldmVudCB3aWxsIGJlIHRyaWdnZXJlZC5cbmZ1bmN0aW9uIG5lZWRNb3JlRGF0YShzdGF0ZSkge1xuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmXG4gICAgICAgICAoc3RhdGUubmVlZFJlYWRhYmxlIHx8XG4gICAgICAgICAgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fFxuICAgICAgICAgIHN0YXRlLmxlbmd0aCA9PT0gMCk7XG59XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oZW5jKSB7XG4gIGlmICghU3RyaW5nRGVjb2RlcilcbiAgICBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoZW5jKTtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IGVuYztcbn07XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiAxMjhNQlxudmFyIE1BWF9IV00gPSAweDgwMDAwMDtcbmZ1bmN0aW9uIHJvdW5kVXBUb05leHRQb3dlck9mMihuKSB7XG4gIGlmIChuID49IE1BWF9IV00pIHtcbiAgICBuID0gTUFYX0hXTTtcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyXG4gICAgbi0tO1xuICAgIGZvciAodmFyIHAgPSAxOyBwIDwgMzI7IHAgPDw9IDEpIG4gfD0gbiA+PiBwO1xuICAgIG4rKztcbiAgfVxuICByZXR1cm4gbjtcbn1cblxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKVxuICAgIHJldHVybiAwO1xuXG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKVxuICAgIHJldHVybiBuID09PSAwID8gMCA6IDE7XG5cbiAgaWYgKG4gPT09IG51bGwgfHwgaXNOYU4obikpIHtcbiAgICAvLyBvbmx5IGZsb3cgb25lIGJ1ZmZlciBhdCBhIHRpbWVcbiAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5idWZmZXIubGVuZ3RoKVxuICAgICAgcmV0dXJuIHN0YXRlLmJ1ZmZlclswXS5sZW5ndGg7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbiAgfVxuXG4gIGlmIChuIDw9IDApXG4gICAgcmV0dXJuIDA7XG5cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIHRhcmdldCBidWZmZXIgbGV2ZWwsXG4gIC8vIHRoZW4gcmFpc2UgdGhlIHdhdGVyIG1hcmsuICBCdW1wIHVwIHRvIHRoZSBuZXh0IGhpZ2hlc3RcbiAgLy8gcG93ZXIgb2YgMiwgdG8gcHJldmVudCBpbmNyZWFzaW5nIGl0IGV4Y2Vzc2l2ZWx5IGluIHRpbnlcbiAgLy8gYW1vdW50cy5cbiAgaWYgKG4gPiBzdGF0ZS5oaWdoV2F0ZXJNYXJrKVxuICAgIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSByb3VuZFVwVG9OZXh0UG93ZXJPZjIobik7XG5cbiAgLy8gZG9uJ3QgaGF2ZSB0aGF0IG11Y2guICByZXR1cm4gbnVsbCwgdW5sZXNzIHdlJ3ZlIGVuZGVkLlxuICBpZiAobiA+IHN0YXRlLmxlbmd0aCkge1xuICAgIGlmICghc3RhdGUuZW5kZWQpIHtcbiAgICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2VcbiAgICAgIHJldHVybiBzdGF0ZS5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gbjtcbn1cblxuLy8geW91IGNhbiBvdmVycmlkZSBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBhc3luYyBfcmVhZChuKSBiZWxvdy5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24obikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5jYWxsZWRSZWFkID0gdHJ1ZTtcbiAgdmFyIG5PcmlnID0gbjtcbiAgdmFyIHJldDtcblxuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPiAwKVxuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuXG4gIC8vIGlmIHdlJ3JlIGRvaW5nIHJlYWQoMCkgdG8gdHJpZ2dlciBhIHJlYWRhYmxlIGV2ZW50LCBidXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGEgYnVuY2ggb2YgZGF0YSBpbiB0aGUgYnVmZmVyLCB0aGVuIGp1c3QgdHJpZ2dlclxuICAvLyB0aGUgJ3JlYWRhYmxlJyBldmVudCBhbmQgbW92ZSBvbi5cbiAgaWYgKG4gPT09IDAgJiZcbiAgICAgIHN0YXRlLm5lZWRSZWFkYWJsZSAmJlxuICAgICAgKHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmVuZGVkKSkge1xuICAgIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKTtcblxuICAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgcmV0ID0gbnVsbDtcblxuICAgIC8vIEluIGNhc2VzIHdoZXJlIHRoZSBkZWNvZGVyIGRpZCBub3QgcmVjZWl2ZSBlbm91Z2ggZGF0YVxuICAgIC8vIHRvIHByb2R1Y2UgYSBmdWxsIGNodW5rLCB0aGVuIGltbWVkaWF0ZWx5IHJlY2VpdmVkIGFuXG4gICAgLy8gRU9GLCBzdGF0ZS5idWZmZXIgd2lsbCBjb250YWluIFs8QnVmZmVyID4sIDxCdWZmZXIgMDAgLi4uPl0uXG4gICAgLy8gaG93TXVjaFRvUmVhZCB3aWxsIHNlZSB0aGlzIGFuZCBjb2VyY2UgdGhlIGFtb3VudCB0b1xuICAgIC8vIHJlYWQgdG8gemVybyAoYmVjYXVzZSBpdCdzIGxvb2tpbmcgYXQgdGhlIGxlbmd0aCBvZiB0aGVcbiAgICAvLyBmaXJzdCA8QnVmZmVyID4gaW4gc3RhdGUuYnVmZmVyKSwgYW5kIHdlJ2xsIGVuZCB1cCBoZXJlLlxuICAgIC8vXG4gICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gdmlhIHN0YXRlLmRlY29kZXIgLS0gbm8gb3RoZXIgdmVudWVcbiAgICAvLyBleGlzdHMgZm9yIHB1c2hpbmcgYSB6ZXJvLWxlbmd0aCBjaHVuayBpbnRvIHN0YXRlLmJ1ZmZlclxuICAgIC8vIGFuZCB0cmlnZ2VyaW5nIHRoaXMgYmVoYXZpb3IuIEluIHRoaXMgY2FzZSwgd2UgcmV0dXJuIG91clxuICAgIC8vIHJlbWFpbmluZyBkYXRhIGFuZCBlbmQgdGhlIHN0cmVhbSwgaWYgYXBwcm9wcmlhdGUuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA+IDAgJiYgc3RhdGUuZGVjb2Rlcikge1xuICAgICAgcmV0ID0gZnJvbUxpc3Qobiwgc3RhdGUpO1xuICAgICAgc3RhdGUubGVuZ3RoIC09IHJldC5sZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMClcbiAgICAgIGVuZFJlYWRhYmxlKHRoaXMpO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8vIEFsbCB0aGUgYWN0dWFsIGNodW5rIGdlbmVyYXRpb24gbG9naWMgbmVlZHMgdG8gYmVcbiAgLy8gKmJlbG93KiB0aGUgY2FsbCB0byBfcmVhZC4gIFRoZSByZWFzb24gaXMgdGhhdCBpbiBjZXJ0YWluXG4gIC8vIHN5bnRoZXRpYyBzdHJlYW0gY2FzZXMsIHN1Y2ggYXMgcGFzc3Rocm91Z2ggc3RyZWFtcywgX3JlYWRcbiAgLy8gbWF5IGJlIGEgY29tcGxldGVseSBzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hpY2ggbWF5IGNoYW5nZVxuICAvLyB0aGUgc3RhdGUgb2YgdGhlIHJlYWQgYnVmZmVyLCBwcm92aWRpbmcgZW5vdWdoIGRhdGEgd2hlblxuICAvLyBiZWZvcmUgdGhlcmUgd2FzICpub3QqIGVub3VnaC5cbiAgLy9cbiAgLy8gU28sIHRoZSBzdGVwcyBhcmU6XG4gIC8vIDEuIEZpZ3VyZSBvdXQgd2hhdCB0aGUgc3RhdGUgb2YgdGhpbmdzIHdpbGwgYmUgYWZ0ZXIgd2UgZG9cbiAgLy8gYSByZWFkIGZyb20gdGhlIGJ1ZmZlci5cbiAgLy9cbiAgLy8gMi4gSWYgdGhhdCByZXN1bHRpbmcgc3RhdGUgd2lsbCB0cmlnZ2VyIGEgX3JlYWQsIHRoZW4gY2FsbCBfcmVhZC5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IGJlIGFzeW5jaHJvbm91cywgb3Igc3luY2hyb25vdXMuICBZZXMsIGl0IGlzXG4gIC8vIGRlZXBseSB1Z2x5IHRvIHdyaXRlIEFQSXMgdGhpcyB3YXksIGJ1dCB0aGF0IHN0aWxsIGRvZXNuJ3QgbWVhblxuICAvLyB0aGF0IHRoZSBSZWFkYWJsZSBjbGFzcyBzaG91bGQgYmVoYXZlIGltcHJvcGVybHksIGFzIHN0cmVhbXMgYXJlXG4gIC8vIGRlc2lnbmVkIHRvIGJlIHN5bmMvYXN5bmMgYWdub3N0aWMuXG4gIC8vIFRha2Ugbm90ZSBpZiB0aGUgX3JlYWQgY2FsbCBpcyBzeW5jIG9yIGFzeW5jIChpZSwgaWYgdGhlIHJlYWQgY2FsbFxuICAvLyBoYXMgcmV0dXJuZWQgeWV0KSwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IGl0J3Mgc2FmZSB0byBlbWl0XG4gIC8vICdyZWFkYWJsZScgZXRjLlxuICAvL1xuICAvLyAzLiBBY3R1YWxseSBwdWxsIHRoZSByZXF1ZXN0ZWQgY2h1bmtzIG91dCBvZiB0aGUgYnVmZmVyIGFuZCByZXR1cm4uXG5cbiAgLy8gaWYgd2UgbmVlZCBhIHJlYWRhYmxlIGV2ZW50LCB0aGVuIHdlIG5lZWQgdG8gZG8gc29tZSByZWFkaW5nLlxuICB2YXIgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlO1xuXG4gIC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuICBpZiAoc3RhdGUubGVuZ3RoIC0gbiA8PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrKVxuICAgIGRvUmVhZCA9IHRydWU7XG5cbiAgLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZylcbiAgICBkb1JlYWQgPSBmYWxzZTtcblxuICBpZiAoZG9SZWFkKSB7XG4gICAgc3RhdGUucmVhZGluZyA9IHRydWU7XG4gICAgc3RhdGUuc3luYyA9IHRydWU7XG4gICAgLy8gaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgemVybywgdGhlbiB3ZSAqbmVlZCogYSByZWFkYWJsZSBldmVudC5cbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKVxuICAgICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvLyBjYWxsIGludGVybmFsIHJlYWQgbWV0aG9kXG4gICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKTtcbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7XG4gIH1cblxuICAvLyBJZiBfcmVhZCBjYWxsZWQgaXRzIGNhbGxiYWNrIHN5bmNocm9ub3VzbHksIHRoZW4gYHJlYWRpbmdgXG4gIC8vIHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBtdWNoIGRhdGEgd2VcbiAgLy8gY2FuIHJldHVybiB0byB0aGUgdXNlci5cbiAgaWYgKGRvUmVhZCAmJiAhc3RhdGUucmVhZGluZylcbiAgICBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuXG4gIGlmIChuID4gMClcbiAgICByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7XG4gIGVsc2VcbiAgICByZXQgPSBudWxsO1xuXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIG4gPSAwO1xuICB9XG5cbiAgc3RhdGUubGVuZ3RoIC09IG47XG5cbiAgLy8gSWYgd2UgaGF2ZSBub3RoaW5nIGluIHRoZSBidWZmZXIsIHRoZW4gd2Ugd2FudCB0byBrbm93XG4gIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuZW5kZWQpXG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyBJZiB3ZSBoYXBwZW5lZCB0byByZWFkKCkgZXhhY3RseSB0aGUgcmVtYWluaW5nIGFtb3VudCBpbiB0aGVcbiAgLy8gYnVmZmVyLCBhbmQgdGhlIEVPRiBoYXMgYmVlbiBzZWVuIGF0IHRoaXMgcG9pbnQsIHRoZW4gbWFrZSBzdXJlXG4gIC8vIHRoYXQgd2UgZW1pdCAnZW5kJyBvbiB0aGUgdmVyeSBuZXh0IHRpY2suXG4gIGlmIChzdGF0ZS5lbmRlZCAmJiAhc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApXG4gICAgZW5kUmVhZGFibGUodGhpcyk7XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIGNodW5rSW52YWxpZChzdGF0ZSwgY2h1bmspIHtcbiAgdmFyIGVyID0gbnVsbDtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY2h1bmspICYmXG4gICAgICAnc3RyaW5nJyAhPT0gdHlwZW9mIGNodW5rICYmXG4gICAgICBjaHVuayAhPT0gbnVsbCAmJlxuICAgICAgY2h1bmsgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICByZXR1cm4gZXI7XG59XG5cblxuZnVuY3Rpb24gb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkge1xuICAgICAgc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWU7XG5cbiAgLy8gaWYgd2UndmUgZW5kZWQgYW5kIHdlIGhhdmUgc29tZSBkYXRhIGxlZnQsIHRoZW4gZW1pdFxuICAvLyAncmVhZGFibGUnIG5vdyB0byBtYWtlIHN1cmUgaXQgZ2V0cyBwaWNrZWQgdXAuXG4gIGlmIChzdGF0ZS5sZW5ndGggPiAwKVxuICAgIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xuICBlbHNlXG4gICAgZW5kUmVhZGFibGUoc3RyZWFtKTtcbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgaWYgKHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSlcbiAgICByZXR1cm47XG5cbiAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgaWYgKHN0YXRlLnN5bmMpXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIGVtaXRSZWFkYWJsZV8oc3RyZWFtKTtcbiAgICB9KTtcbiAgZWxzZVxuICAgIGVtaXRSZWFkYWJsZV8oc3RyZWFtKTtcbn1cblxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJyk7XG59XG5cblxuLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nTW9yZSkge1xuICAgIHN0YXRlLnJlYWRpbmdNb3JlID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgbWF5YmVSZWFkTW9yZV8oc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZV8oc3RyZWFtLCBzdGF0ZSkge1xuICB2YXIgbGVuID0gc3RhdGUubGVuZ3RoO1xuICB3aGlsZSAoIXN0YXRlLnJlYWRpbmcgJiYgIXN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLmVuZGVkICYmXG4gICAgICAgICBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgaWYgKGxlbiA9PT0gc3RhdGUubGVuZ3RoKVxuICAgICAgLy8gZGlkbid0IGdldCBhbnkgZGF0YSwgc3RvcCBzcGlubmluZy5cbiAgICAgIGJyZWFrO1xuICAgIGVsc2VcbiAgICAgIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgfVxuICBzdGF0ZS5yZWFkaW5nTW9yZSA9IGZhbHNlO1xufVxuXG4vLyBhYnN0cmFjdCBtZXRob2QuICB0byBiZSBvdmVycmlkZGVuIGluIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyBjYWxsIGNiKGVyLCBkYXRhKSB3aGVyZSBkYXRhIGlzIDw9IG4gaW4gbGVuZ3RoLlxuLy8gZm9yIHZpcnR1YWwgKG5vbi1zdHJpbmcsIG5vbi1idWZmZXIpIHN0cmVhbXMsIFwibGVuZ3RoXCIgaXMgc29tZXdoYXRcbi8vIGFyYml0cmFyeSwgYW5kIHBlcmhhcHMgbm90IHZlcnkgbWVhbmluZ2Z1bC5cblJlYWRhYmxlLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uKG4pIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBwaXBlT3B0cykge1xuICB2YXIgc3JjID0gdGhpcztcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBzd2l0Y2ggKHN0YXRlLnBpcGVzQ291bnQpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGF0ZS5waXBlcyA9IGRlc3Q7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICBzdGF0ZS5waXBlcyA9IFtzdGF0ZS5waXBlcywgZGVzdF07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3RhdGUucGlwZXMucHVzaChkZXN0KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHN0YXRlLnBpcGVzQ291bnQgKz0gMTtcblxuICB2YXIgZG9FbmQgPSAoIXBpcGVPcHRzIHx8IHBpcGVPcHRzLmVuZCAhPT0gZmFsc2UpICYmXG4gICAgICAgICAgICAgIGRlc3QgIT09IHByb2Nlc3Muc3Rkb3V0ICYmXG4gICAgICAgICAgICAgIGRlc3QgIT09IHByb2Nlc3Muc3RkZXJyO1xuXG4gIHZhciBlbmRGbiA9IGRvRW5kID8gb25lbmQgOiBjbGVhbnVwO1xuICBpZiAoc3RhdGUuZW5kRW1pdHRlZClcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVuZEZuKTtcbiAgZWxzZVxuICAgIHNyYy5vbmNlKCdlbmQnLCBlbmRGbik7XG5cbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSkge1xuICAgIGlmIChyZWFkYWJsZSAhPT0gc3JjKSByZXR1cm47XG4gICAgY2xlYW51cCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG4gIC8vIHdoZW4gdGhlIGRlc3QgZHJhaW5zLCBpdCByZWR1Y2VzIHRoZSBhd2FpdERyYWluIGNvdW50ZXJcbiAgLy8gb24gdGhlIHNvdXJjZS4gIFRoaXMgd291bGQgYmUgbW9yZSBlbGVnYW50IHdpdGggYSAub25jZSgpXG4gIC8vIGhhbmRsZXIgaW4gZmxvdygpLCBidXQgYWRkaW5nIGFuZCByZW1vdmluZyByZXBlYXRlZGx5IGlzXG4gIC8vIHRvbyBzbG93LlxuICB2YXIgb25kcmFpbiA9IHBpcGVPbkRyYWluKHNyYyk7XG4gIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbik7XG5cbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAvLyBjbGVhbnVwIGV2ZW50IGhhbmRsZXJzIG9uY2UgdGhlIHBpcGUgaXMgYnJva2VuXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ3VucGlwZScsIG9udW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIGNsZWFudXApO1xuXG4gICAgLy8gaWYgdGhlIHJlYWRlciBpcyB3YWl0aW5nIGZvciBhIGRyYWluIGV2ZW50IGZyb20gdGhpc1xuICAgIC8vIHNwZWNpZmljIHdyaXRlciwgdGhlbiBpdCB3b3VsZCBjYXVzZSBpdCB0byBuZXZlciBzdGFydFxuICAgIC8vIGZsb3dpbmcgYWdhaW4uXG4gICAgLy8gU28sIGlmIHRoaXMgaXMgYXdhaXRpbmcgYSBkcmFpbiwgdGhlbiB3ZSBqdXN0IGNhbGwgaXQgbm93LlxuICAgIC8vIElmIHdlIGRvbid0IGtub3csIHRoZW4gYXNzdW1lIHRoYXQgd2UgYXJlIHdhaXRpbmcgZm9yIG9uZS5cbiAgICBpZiAoIWRlc3QuX3dyaXRhYmxlU3RhdGUgfHwgZGVzdC5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pXG4gICAgICBvbmRyYWluKCk7XG4gIH1cblxuICAvLyBpZiB0aGUgZGVzdCBoYXMgYW4gZXJyb3IsIHRoZW4gc3RvcCBwaXBpbmcgaW50byBpdC5cbiAgLy8gaG93ZXZlciwgZG9uJ3Qgc3VwcHJlc3MgdGhlIHRocm93aW5nIGJlaGF2aW9yIGZvciB0aGlzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgdW5waXBlKCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBpZiAoRUUubGlzdGVuZXJDb3VudChkZXN0LCAnZXJyb3InKSA9PT0gMClcbiAgICAgIGRlc3QuZW1pdCgnZXJyb3InLCBlcik7XG4gIH1cbiAgLy8gVGhpcyBpcyBhIGJydXRhbGx5IHVnbHkgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlclxuICAvLyBpcyBhdHRhY2hlZCBiZWZvcmUgYW55IHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLlxuICBpZiAoIWRlc3QuX2V2ZW50cyB8fCAhZGVzdC5fZXZlbnRzLmVycm9yKVxuICAgIGRlc3Qub24oJ2Vycm9yJywgb25lcnJvcik7XG4gIGVsc2UgaWYgKGlzQXJyYXkoZGVzdC5fZXZlbnRzLmVycm9yKSlcbiAgICBkZXN0Ll9ldmVudHMuZXJyb3IudW5zaGlmdChvbmVycm9yKTtcbiAgZWxzZVxuICAgIGRlc3QuX2V2ZW50cy5lcnJvciA9IFtvbmVycm9yLCBkZXN0Ll9ldmVudHMuZXJyb3JdO1xuXG5cblxuICAvLyBCb3RoIGNsb3NlIGFuZCBmaW5pc2ggc2hvdWxkIHRyaWdnZXIgdW5waXBlLCBidXQgb25seSBvbmNlLlxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2Nsb3NlJywgb25jbG9zZSk7XG4gIGZ1bmN0aW9uIG9uZmluaXNoKCkge1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG5cbiAgZnVuY3Rpb24gdW5waXBlKCkge1xuICAgIHNyYy51bnBpcGUoZGVzdCk7XG4gIH1cblxuICAvLyB0ZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0b1xuICBkZXN0LmVtaXQoJ3BpcGUnLCBzcmMpO1xuXG4gIC8vIHN0YXJ0IHRoZSBmbG93IGlmIGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgLy8gdGhlIGhhbmRsZXIgdGhhdCB3YWl0cyBmb3IgcmVhZGFibGUgZXZlbnRzIGFmdGVyIGFsbFxuICAgIC8vIHRoZSBkYXRhIGdldHMgc3Vja2VkIG91dCBpbiBmbG93LlxuICAgIC8vIFRoaXMgd291bGQgYmUgZWFzaWVyIHRvIGZvbGxvdyB3aXRoIGEgLm9uY2UoKSBoYW5kbGVyXG4gICAgLy8gaW4gZmxvdygpLCBidXQgdGhhdCBpcyB0b28gc2xvdy5cbiAgICB0aGlzLm9uKCdyZWFkYWJsZScsIHBpcGVPblJlYWRhYmxlKTtcblxuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICBmbG93KHNyYyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZGVzdDtcbn07XG5cbmZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRlc3QgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTtcbiAgICBzdGF0ZS5hd2FpdERyYWluLS07XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gPT09IDApXG4gICAgICBmbG93KHNyYyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZsb3coc3JjKSB7XG4gIHZhciBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIGNodW5rO1xuICBzdGF0ZS5hd2FpdERyYWluID0gMDtcblxuICBmdW5jdGlvbiB3cml0ZShkZXN0LCBpLCBsaXN0KSB7XG4gICAgdmFyIHdyaXR0ZW4gPSBkZXN0LndyaXRlKGNodW5rKTtcbiAgICBpZiAoZmFsc2UgPT09IHdyaXR0ZW4pIHtcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW4rKztcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoc3RhdGUucGlwZXNDb3VudCAmJiBudWxsICE9PSAoY2h1bmsgPSBzcmMucmVhZCgpKSkge1xuXG4gICAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpXG4gICAgICB3cml0ZShzdGF0ZS5waXBlcywgMCwgbnVsbCk7XG4gICAgZWxzZVxuICAgICAgZm9yRWFjaChzdGF0ZS5waXBlcywgd3JpdGUpO1xuXG4gICAgc3JjLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG5cbiAgICAvLyBpZiBhbnlvbmUgbmVlZHMgYSBkcmFpbiwgdGhlbiB3ZSBoYXZlIHRvIHdhaXQgZm9yIHRoYXQuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gPiAwKVxuICAgICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gaWYgZXZlcnkgZGVzdGluYXRpb24gd2FzIHVucGlwZWQsIGVpdGhlciBiZWZvcmUgZW50ZXJpbmcgdGhpc1xuICAvLyBmdW5jdGlvbiwgb3IgaW4gdGhlIHdoaWxlIGxvb3AsIHRoZW4gc3RvcCBmbG93aW5nLlxuICAvL1xuICAvLyBOQjogVGhpcyBpcyBhIHByZXR0eSByYXJlIGVkZ2UgY2FzZS5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDApIHtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG5cbiAgICAvLyBpZiB0aGVyZSB3ZXJlIGRhdGEgZXZlbnQgbGlzdGVuZXJzIGFkZGVkLCB0aGVuIHN3aXRjaCB0byBvbGQgbW9kZS5cbiAgICBpZiAoRUUubGlzdGVuZXJDb3VudChzcmMsICdkYXRhJykgPiAwKVxuICAgICAgZW1pdERhdGFFdmVudHMoc3JjKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBhdCB0aGlzIHBvaW50LCBubyBvbmUgbmVlZGVkIGEgZHJhaW4sIHNvIHdlIGp1c3QgcmFuIG91dCBvZiBkYXRhXG4gIC8vIG9uIHRoZSBuZXh0IHJlYWRhYmxlIGV2ZW50LCBzdGFydCBpdCBvdmVyIGFnYWluLlxuICBzdGF0ZS5yYW5PdXQgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBwaXBlT25SZWFkYWJsZSgpIHtcbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUucmFuT3V0KSB7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5yYW5PdXQgPSBmYWxzZTtcbiAgICBmbG93KHRoaXMpO1xuICB9XG59XG5cblxuUmVhZGFibGUucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uKGRlc3QpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICAvLyBpZiB3ZSdyZSBub3QgcGlwaW5nIGFueXdoZXJlLCB0aGVuIGRvIG5vdGhpbmcuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAwKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIGp1c3Qgb25lIGRlc3RpbmF0aW9uLiAgbW9zdCBjb21tb24gY2FzZS5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHtcbiAgICAvLyBwYXNzZWQgaW4gb25lLCBidXQgaXQncyBub3QgdGhlIHJpZ2h0IG9uZS5cbiAgICBpZiAoZGVzdCAmJiBkZXN0ICE9PSBzdGF0ZS5waXBlcylcbiAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKCFkZXN0KVxuICAgICAgZGVzdCA9IHN0YXRlLnBpcGVzO1xuXG4gICAgLy8gZ290IGEgbWF0Y2guXG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgcGlwZU9uUmVhZGFibGUpO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICBpZiAoZGVzdClcbiAgICAgIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzbG93IGNhc2UuIG11bHRpcGxlIHBpcGUgZGVzdGluYXRpb25zLlxuXG4gIGlmICghZGVzdCkge1xuICAgIC8vIHJlbW92ZSBhbGwuXG4gICAgdmFyIGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnBpcGVzQ291bnQ7XG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgcGlwZU9uUmVhZGFibGUpO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG4gIHZhciBpID0gaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCk7XG4gIGlmIChpID09PSAtMSlcbiAgICByZXR1cm4gdGhpcztcblxuICBzdGF0ZS5waXBlcy5zcGxpY2UoaSwgMSk7XG4gIHN0YXRlLnBpcGVzQ291bnQgLT0gMTtcbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpXG4gICAgc3RhdGUucGlwZXMgPSBzdGF0ZS5waXBlc1swXTtcblxuICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gc2V0IHVwIGRhdGEgZXZlbnRzIGlmIHRoZXkgYXJlIGFza2VkIGZvclxuLy8gRW5zdXJlIHJlYWRhYmxlIGxpc3RlbmVycyBldmVudHVhbGx5IGdldCBzb21ldGhpbmdcblJlYWRhYmxlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKGV2LCBmbikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2LCBmbik7XG5cbiAgaWYgKGV2ID09PSAnZGF0YScgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZylcbiAgICBlbWl0RGF0YUV2ZW50cyh0aGlzKTtcblxuICBpZiAoZXYgPT09ICdyZWFkYWJsZScgJiYgdGhpcy5yZWFkYWJsZSkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKCFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSB0cnVlO1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgICAgIHRoaXMucmVhZCgwKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBSZWFkYWJsZS5wcm90b3R5cGUub247XG5cbi8vIHBhdXNlKCkgYW5kIHJlc3VtZSgpIGFyZSByZW1uYW50cyBvZiB0aGUgbGVnYWN5IHJlYWRhYmxlIHN0cmVhbSBBUElcbi8vIElmIHRoZSB1c2VyIHVzZXMgdGhlbSwgdGhlbiBzd2l0Y2ggaW50byBvbGQgbW9kZS5cblJlYWRhYmxlLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgZW1pdERhdGFFdmVudHModGhpcyk7XG4gIHRoaXMucmVhZCgwKTtcbiAgdGhpcy5lbWl0KCdyZXN1bWUnKTtcbn07XG5cblJlYWRhYmxlLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICBlbWl0RGF0YUV2ZW50cyh0aGlzLCB0cnVlKTtcbiAgdGhpcy5lbWl0KCdwYXVzZScpO1xufTtcblxuZnVuY3Rpb24gZW1pdERhdGFFdmVudHMoc3RyZWFtLCBzdGFydFBhdXNlZCkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG5cbiAgaWYgKHN0YXRlLmZsb3dpbmcpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL3JlYWRhYmxlLXN0cmVhbS9pc3N1ZXMvMTZcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzd2l0Y2ggdG8gb2xkIG1vZGUgbm93LicpO1xuICB9XG5cbiAgdmFyIHBhdXNlZCA9IHN0YXJ0UGF1c2VkIHx8IGZhbHNlO1xuICB2YXIgcmVhZGFibGUgPSBmYWxzZTtcblxuICAvLyBjb252ZXJ0IHRvIGFuIG9sZC1zdHlsZSBzdHJlYW0uXG4gIHN0cmVhbS5yZWFkYWJsZSA9IHRydWU7XG4gIHN0cmVhbS5waXBlID0gU3RyZWFtLnByb3RvdHlwZS5waXBlO1xuICBzdHJlYW0ub24gPSBzdHJlYW0uYWRkTGlzdGVuZXIgPSBTdHJlYW0ucHJvdG90eXBlLm9uO1xuXG4gIHN0cmVhbS5vbigncmVhZGFibGUnLCBmdW5jdGlvbigpIHtcbiAgICByZWFkYWJsZSA9IHRydWU7XG5cbiAgICB2YXIgYztcbiAgICB3aGlsZSAoIXBhdXNlZCAmJiAobnVsbCAhPT0gKGMgPSBzdHJlYW0ucmVhZCgpKSkpXG4gICAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGMpO1xuXG4gICAgaWYgKGMgPT09IG51bGwpIHtcbiAgICAgIHJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBzdHJlYW0uX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHN0cmVhbS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICAgIHBhdXNlZCA9IHRydWU7XG4gICAgdGhpcy5lbWl0KCdwYXVzZScpO1xuICB9O1xuXG4gIHN0cmVhbS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICBpZiAocmVhZGFibGUpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICBzdHJlYW0uZW1pdCgncmVhZGFibGUnKTtcbiAgICAgIH0pO1xuICAgIGVsc2VcbiAgICAgIHRoaXMucmVhZCgwKTtcbiAgICB0aGlzLmVtaXQoJ3Jlc3VtZScpO1xuICB9O1xuXG4gIC8vIG5vdyBtYWtlIGl0IHN0YXJ0LCBqdXN0IGluIGNhc2UgaXQgaGFkbid0IGFscmVhZHkuXG4gIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpO1xufVxuXG4vLyB3cmFwIGFuIG9sZC1zdHlsZSBzdHJlYW0gYXMgdGhlIGFzeW5jIGRhdGEgc291cmNlLlxuLy8gVGhpcyBpcyAqbm90KiBwYXJ0IG9mIHRoZSByZWFkYWJsZSBzdHJlYW0gaW50ZXJmYWNlLlxuLy8gSXQgaXMgYW4gdWdseSB1bmZvcnR1bmF0ZSBtZXNzIG9mIGhpc3RvcnkuXG5SZWFkYWJsZS5wcm90b3R5cGUud3JhcCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgcGF1c2VkID0gZmFsc2U7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpXG4gICAgICAgIHNlbGYucHVzaChjaHVuayk7XG4gICAgfVxuXG4gICAgc2VsZi5wdXNoKG51bGwpO1xuICB9KTtcblxuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbihjaHVuaykge1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyKVxuICAgICAgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcblxuICAgIC8vIGRvbid0IHNraXAgb3ZlciBmYWxzeSB2YWx1ZXMgaW4gb2JqZWN0TW9kZVxuICAgIC8vaWYgKHN0YXRlLm9iamVjdE1vZGUgJiYgdXRpbC5pc051bGxPclVuZGVmaW5lZChjaHVuaykpXG4gICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgJiYgKGNodW5rID09PSBudWxsIHx8IGNodW5rID09PSB1bmRlZmluZWQpKVxuICAgICAgcmV0dXJuO1xuICAgIGVsc2UgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmICghY2h1bmsgfHwgIWNodW5rLmxlbmd0aCkpXG4gICAgICByZXR1cm47XG5cbiAgICB2YXIgcmV0ID0gc2VsZi5wdXNoKGNodW5rKTtcbiAgICBpZiAoIXJldCkge1xuICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcHJveHkgYWxsIHRoZSBvdGhlciBtZXRob2RzLlxuICAvLyBpbXBvcnRhbnQgd2hlbiB3cmFwcGluZyBmaWx0ZXJzIGFuZCBkdXBsZXhlcy5cbiAgZm9yICh2YXIgaSBpbiBzdHJlYW0pIHtcbiAgICBpZiAodHlwZW9mIHN0cmVhbVtpXSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICB0eXBlb2YgdGhpc1tpXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNbaV0gPSBmdW5jdGlvbihtZXRob2QpIHsgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3RyZWFtW21ldGhvZF0uYXBwbHkoc3RyZWFtLCBhcmd1bWVudHMpO1xuICAgICAgfX0oaSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJveHkgY2VydGFpbiBpbXBvcnRhbnQgZXZlbnRzLlxuICB2YXIgZXZlbnRzID0gWydlcnJvcicsICdjbG9zZScsICdkZXN0cm95JywgJ3BhdXNlJywgJ3Jlc3VtZSddO1xuICBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24oZXYpIHtcbiAgICBzdHJlYW0ub24oZXYsIHNlbGYuZW1pdC5iaW5kKHNlbGYsIGV2KSk7XG4gIH0pO1xuXG4gIC8vIHdoZW4gd2UgdHJ5IHRvIGNvbnN1bWUgc29tZSBtb3JlIGJ5dGVzLCBzaW1wbHkgdW5wYXVzZSB0aGVcbiAgLy8gdW5kZXJseWluZyBzdHJlYW0uXG4gIHNlbGYuX3JlYWQgPSBmdW5jdGlvbihuKSB7XG4gICAgaWYgKHBhdXNlZCkge1xuICAgICAgcGF1c2VkID0gZmFsc2U7XG4gICAgICBzdHJlYW0ucmVzdW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBzZWxmO1xufTtcblxuXG5cbi8vIGV4cG9zZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS5cblJlYWRhYmxlLl9mcm9tTGlzdCA9IGZyb21MaXN0O1xuXG4vLyBQbHVjayBvZmYgbiBieXRlcyBmcm9tIGFuIGFycmF5IG9mIGJ1ZmZlcnMuXG4vLyBMZW5ndGggaXMgdGhlIGNvbWJpbmVkIGxlbmd0aHMgb2YgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBsaXN0LlxuZnVuY3Rpb24gZnJvbUxpc3Qobiwgc3RhdGUpIHtcbiAgdmFyIGxpc3QgPSBzdGF0ZS5idWZmZXI7XG4gIHZhciBsZW5ndGggPSBzdGF0ZS5sZW5ndGg7XG4gIHZhciBzdHJpbmdNb2RlID0gISFzdGF0ZS5kZWNvZGVyO1xuICB2YXIgb2JqZWN0TW9kZSA9ICEhc3RhdGUub2JqZWN0TW9kZTtcbiAgdmFyIHJldDtcblxuICAvLyBub3RoaW5nIGluIHRoZSBsaXN0LCBkZWZpbml0ZWx5IGVtcHR5LlxuICBpZiAobGlzdC5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgaWYgKGxlbmd0aCA9PT0gMClcbiAgICByZXQgPSBudWxsO1xuICBlbHNlIGlmIChvYmplY3RNb2RlKVxuICAgIHJldCA9IGxpc3Quc2hpZnQoKTtcbiAgZWxzZSBpZiAoIW4gfHwgbiA+PSBsZW5ndGgpIHtcbiAgICAvLyByZWFkIGl0IGFsbCwgdHJ1bmNhdGUgdGhlIGFycmF5LlxuICAgIGlmIChzdHJpbmdNb2RlKVxuICAgICAgcmV0ID0gbGlzdC5qb2luKCcnKTtcbiAgICBlbHNlXG4gICAgICByZXQgPSBCdWZmZXIuY29uY2F0KGxpc3QsIGxlbmd0aCk7XG4gICAgbGlzdC5sZW5ndGggPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQganVzdCBzb21lIG9mIGl0LlxuICAgIGlmIChuIDwgbGlzdFswXS5sZW5ndGgpIHtcbiAgICAgIC8vIGp1c3QgdGFrZSBhIHBhcnQgb2YgdGhlIGZpcnN0IGxpc3QgaXRlbS5cbiAgICAgIC8vIHNsaWNlIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzLlxuICAgICAgdmFyIGJ1ZiA9IGxpc3RbMF07XG4gICAgICByZXQgPSBidWYuc2xpY2UoMCwgbik7XG4gICAgICBsaXN0WzBdID0gYnVmLnNsaWNlKG4pO1xuICAgIH0gZWxzZSBpZiAobiA9PT0gbGlzdFswXS5sZW5ndGgpIHtcbiAgICAgIC8vIGZpcnN0IGxpc3QgaXMgYSBwZXJmZWN0IG1hdGNoXG4gICAgICByZXQgPSBsaXN0LnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbXBsZXggY2FzZS5cbiAgICAgIC8vIHdlIGhhdmUgZW5vdWdoIHRvIGNvdmVyIGl0LCBidXQgaXQgc3BhbnMgcGFzdCB0aGUgZmlyc3QgYnVmZmVyLlxuICAgICAgaWYgKHN0cmluZ01vZGUpXG4gICAgICAgIHJldCA9ICcnO1xuICAgICAgZWxzZVxuICAgICAgICByZXQgPSBuZXcgQnVmZmVyKG4pO1xuXG4gICAgICB2YXIgYyA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbCAmJiBjIDwgbjsgaSsrKSB7XG4gICAgICAgIHZhciBidWYgPSBsaXN0WzBdO1xuICAgICAgICB2YXIgY3B5ID0gTWF0aC5taW4obiAtIGMsIGJ1Zi5sZW5ndGgpO1xuXG4gICAgICAgIGlmIChzdHJpbmdNb2RlKVxuICAgICAgICAgIHJldCArPSBidWYuc2xpY2UoMCwgY3B5KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGJ1Zi5jb3B5KHJldCwgYywgMCwgY3B5KTtcblxuICAgICAgICBpZiAoY3B5IDwgYnVmLmxlbmd0aClcbiAgICAgICAgICBsaXN0WzBdID0gYnVmLnNsaWNlKGNweSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG5cbiAgICAgICAgYyArPSBjcHk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcblxuICAvLyBJZiB3ZSBnZXQgaGVyZSBiZWZvcmUgY29uc3VtaW5nIGFsbCB0aGUgYnl0ZXMsIHRoZW4gdGhhdCBpcyBhXG4gIC8vIGJ1ZyBpbiBub2RlLiAgU2hvdWxkIG5ldmVyIGhhcHBlbi5cbiAgaWYgKHN0YXRlLmxlbmd0aCA+IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdlbmRSZWFkYWJsZSBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO1xuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5jYWxsZWRSZWFkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICAvLyBDaGVjayB0aGF0IHdlIGRpZG4ndCBnZXQgb25lIGxhc3QgdW5zaGlmdC5cbiAgICAgIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgc3RhdGUuZW5kRW1pdHRlZCA9IHRydWU7XG4gICAgICAgIHN0cmVhbS5yZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yRWFjaCAoeHMsIGYpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmKHhzW2ldLCBpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmRleE9mICh4cywgeCkge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmICh4c1tpXSA9PT0geCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cblxuLy8gYSB0cmFuc2Zvcm0gc3RyZWFtIGlzIGEgcmVhZGFibGUvd3JpdGFibGUgc3RyZWFtIHdoZXJlIHlvdSBkb1xuLy8gc29tZXRoaW5nIHdpdGggdGhlIGRhdGEuICBTb21ldGltZXMgaXQncyBjYWxsZWQgYSBcImZpbHRlclwiLFxuLy8gYnV0IHRoYXQncyBub3QgYSBncmVhdCBuYW1lIGZvciBpdCwgc2luY2UgdGhhdCBpbXBsaWVzIGEgdGhpbmcgd2hlcmVcbi8vIHNvbWUgYml0cyBwYXNzIHRocm91Z2gsIGFuZCBvdGhlcnMgYXJlIHNpbXBseSBpZ25vcmVkLiAgKFRoYXQgd291bGRcbi8vIGJlIGEgdmFsaWQgZXhhbXBsZSBvZiBhIHRyYW5zZm9ybSwgb2YgY291cnNlLilcbi8vXG4vLyBXaGlsZSB0aGUgb3V0cHV0IGlzIGNhdXNhbGx5IHJlbGF0ZWQgdG8gdGhlIGlucHV0LCBpdCdzIG5vdCBhXG4vLyBuZWNlc3NhcmlseSBzeW1tZXRyaWMgb3Igc3luY2hyb25vdXMgdHJhbnNmb3JtYXRpb24uICBGb3IgZXhhbXBsZSxcbi8vIGEgemxpYiBzdHJlYW0gbWlnaHQgdGFrZSBtdWx0aXBsZSBwbGFpbi10ZXh0IHdyaXRlcygpLCBhbmQgdGhlblxuLy8gZW1pdCBhIHNpbmdsZSBjb21wcmVzc2VkIGNodW5rIHNvbWUgdGltZSBpbiB0aGUgZnV0dXJlLlxuLy9cbi8vIEhlcmUncyBob3cgdGhpcyB3b3Jrczpcbi8vXG4vLyBUaGUgVHJhbnNmb3JtIHN0cmVhbSBoYXMgYWxsIHRoZSBhc3BlY3RzIG9mIHRoZSByZWFkYWJsZSBhbmQgd3JpdGFibGVcbi8vIHN0cmVhbSBjbGFzc2VzLiAgV2hlbiB5b3Ugd3JpdGUoY2h1bmspLCB0aGF0IGNhbGxzIF93cml0ZShjaHVuayxjYilcbi8vIGludGVybmFsbHksIGFuZCByZXR1cm5zIGZhbHNlIGlmIHRoZXJlJ3MgYSBsb3Qgb2YgcGVuZGluZyB3cml0ZXNcbi8vIGJ1ZmZlcmVkIHVwLiAgV2hlbiB5b3UgY2FsbCByZWFkKCksIHRoYXQgY2FsbHMgX3JlYWQobikgdW50aWxcbi8vIHRoZXJlJ3MgZW5vdWdoIHBlbmRpbmcgcmVhZGFibGUgZGF0YSBidWZmZXJlZCB1cC5cbi8vXG4vLyBJbiBhIHRyYW5zZm9ybSBzdHJlYW0sIHRoZSB3cml0dGVuIGRhdGEgaXMgcGxhY2VkIGluIGEgYnVmZmVyLiAgV2hlblxuLy8gX3JlYWQobikgaXMgY2FsbGVkLCBpdCB0cmFuc2Zvcm1zIHRoZSBxdWV1ZWQgdXAgZGF0YSwgY2FsbGluZyB0aGVcbi8vIGJ1ZmZlcmVkIF93cml0ZSBjYidzIGFzIGl0IGNvbnN1bWVzIGNodW5rcy4gIElmIGNvbnN1bWluZyBhIHNpbmdsZVxuLy8gd3JpdHRlbiBjaHVuayB3b3VsZCByZXN1bHQgaW4gbXVsdGlwbGUgb3V0cHV0IGNodW5rcywgdGhlbiB0aGUgZmlyc3Rcbi8vIG91dHB1dHRlZCBiaXQgY2FsbHMgdGhlIHJlYWRjYiwgYW5kIHN1YnNlcXVlbnQgY2h1bmtzIGp1c3QgZ28gaW50b1xuLy8gdGhlIHJlYWQgYnVmZmVyLCBhbmQgd2lsbCBjYXVzZSBpdCB0byBlbWl0ICdyZWFkYWJsZScgaWYgbmVjZXNzYXJ5LlxuLy9cbi8vIFRoaXMgd2F5LCBiYWNrLXByZXNzdXJlIGlzIGFjdHVhbGx5IGRldGVybWluZWQgYnkgdGhlIHJlYWRpbmcgc2lkZSxcbi8vIHNpbmNlIF9yZWFkIGhhcyB0byBiZSBjYWxsZWQgdG8gc3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBjaHVuay4gIEhvd2V2ZXIsXG4vLyBhIHBhdGhvbG9naWNhbCBpbmZsYXRlIHR5cGUgb2YgdHJhbnNmb3JtIGNhbiBjYXVzZSBleGNlc3NpdmUgYnVmZmVyaW5nXG4vLyBoZXJlLiAgRm9yIGV4YW1wbGUsIGltYWdpbmUgYSBzdHJlYW0gd2hlcmUgZXZlcnkgYnl0ZSBvZiBpbnB1dCBpc1xuLy8gaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlciBmcm9tIDAtMjU1LCBhbmQgdGhlbiByZXN1bHRzIGluIHRoYXQgbWFueVxuLy8gYnl0ZXMgb2Ygb3V0cHV0LiAgV3JpdGluZyB0aGUgNCBieXRlcyB7ZmYsZmYsZmYsZmZ9IHdvdWxkIHJlc3VsdCBpblxuLy8gMWtiIG9mIGRhdGEgYmVpbmcgb3V0cHV0LiAgSW4gdGhpcyBjYXNlLCB5b3UgY291bGQgd3JpdGUgYSB2ZXJ5IHNtYWxsXG4vLyBhbW91bnQgb2YgaW5wdXQsIGFuZCBlbmQgdXAgd2l0aCBhIHZlcnkgbGFyZ2UgYW1vdW50IG9mIG91dHB1dC4gIEluXG4vLyBzdWNoIGEgcGF0aG9sb2dpY2FsIGluZmxhdGluZyBtZWNoYW5pc20sIHRoZXJlJ2QgYmUgbm8gd2F5IHRvIHRlbGxcbi8vIHRoZSBzeXN0ZW0gdG8gc3RvcCBkb2luZyB0aGUgdHJhbnNmb3JtLiAgQSBzaW5nbGUgNE1CIHdyaXRlIGNvdWxkXG4vLyBjYXVzZSB0aGUgc3lzdGVtIHRvIHJ1biBvdXQgb2YgbWVtb3J5LlxuLy9cbi8vIEhvd2V2ZXIsIGV2ZW4gaW4gc3VjaCBhIHBhdGhvbG9naWNhbCBjYXNlLCBvbmx5IGEgc2luZ2xlIHdyaXR0ZW4gY2h1bmtcbi8vIHdvdWxkIGJlIGNvbnN1bWVkLCBhbmQgdGhlbiB0aGUgcmVzdCB3b3VsZCB3YWl0ICh1bi10cmFuc2Zvcm1lZCkgdW50aWxcbi8vIHRoZSByZXN1bHRzIG9mIHRoZSBwcmV2aW91cyB0cmFuc2Zvcm1lZCBjaHVuayB3ZXJlIGNvbnN1bWVkLlxuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcblxudmFyIER1cGxleCA9IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFRyYW5zZm9ybSwgRHVwbGV4KTtcblxuXG5mdW5jdGlvbiBUcmFuc2Zvcm1TdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgdGhpcy5hZnRlclRyYW5zZm9ybSA9IGZ1bmN0aW9uKGVyLCBkYXRhKSB7XG4gICAgcmV0dXJuIGFmdGVyVHJhbnNmb3JtKHN0cmVhbSwgZXIsIGRhdGEpO1xuICB9O1xuXG4gIHRoaXMubmVlZFRyYW5zZm9ybSA9IGZhbHNlO1xuICB0aGlzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuICB0aGlzLndyaXRlY2h1bmsgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybShzdHJlYW0sIGVyLCBkYXRhKSB7XG4gIHZhciB0cyA9IHN0cmVhbS5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuXG4gIHZhciBjYiA9IHRzLndyaXRlY2I7XG5cbiAgaWYgKCFjYilcbiAgICByZXR1cm4gc3RyZWFtLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdubyB3cml0ZWNiIGluIFRyYW5zZm9ybSBjbGFzcycpKTtcblxuICB0cy53cml0ZWNodW5rID0gbnVsbDtcbiAgdHMud3JpdGVjYiA9IG51bGw7XG5cbiAgaWYgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkKVxuICAgIHN0cmVhbS5wdXNoKGRhdGEpO1xuXG4gIGlmIChjYilcbiAgICBjYihlcik7XG5cbiAgdmFyIHJzID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBycy5yZWFkaW5nID0gZmFsc2U7XG4gIGlmIChycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykge1xuICAgIHN0cmVhbS5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIFRyYW5zZm9ybShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUcmFuc2Zvcm0pKVxuICAgIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuXG4gIER1cGxleC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlID0gbmV3IFRyYW5zZm9ybVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIHdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgdmFyIHN0cmVhbSA9IHRoaXM7XG5cbiAgLy8gc3RhcnQgb3V0IGFza2luZyBmb3IgYSByZWFkYWJsZSBldmVudCBvbmNlIGRhdGEgaXMgdHJhbnNmb3JtZWQuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyB3ZSBoYXZlIGltcGxlbWVudGVkIHRoZSBfcmVhZCBtZXRob2QsIGFuZCBkb25lIHRoZSBvdGhlciB0aGluZ3NcbiAgLy8gdGhhdCBSZWFkYWJsZSB3YW50cyBiZWZvcmUgdGhlIGZpcnN0IF9yZWFkIGNhbGwsIHNvIHVuc2V0IHRoZVxuICAvLyBzeW5jIGd1YXJkIGZsYWcuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlO1xuXG4gIHRoaXMub25jZSgnZmluaXNoJywgZnVuY3Rpb24oKSB7XG4gICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiB0aGlzLl9mbHVzaClcbiAgICAgIHRoaXMuX2ZsdXNoKGZ1bmN0aW9uKGVyKSB7XG4gICAgICAgIGRvbmUoc3RyZWFtLCBlcik7XG4gICAgICB9KTtcbiAgICBlbHNlXG4gICAgICBkb25lKHN0cmVhbSk7XG4gIH0pO1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcpIHtcbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybSA9IGZhbHNlO1xuICByZXR1cm4gRHVwbGV4LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgY2h1bmssIGVuY29kaW5nKTtcbn07XG5cbi8vIFRoaXMgaXMgdGhlIHBhcnQgd2hlcmUgeW91IGRvIHN0dWZmIVxuLy8gb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpbiBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gJ2NodW5rJyBpcyBhbiBpbnB1dCBjaHVuay5cbi8vXG4vLyBDYWxsIGBwdXNoKG5ld0NodW5rKWAgdG8gcGFzcyBhbG9uZyB0cmFuc2Zvcm1lZCBvdXRwdXRcbi8vIHRvIHRoZSByZWFkYWJsZSBzaWRlLiAgWW91IG1heSBjYWxsICdwdXNoJyB6ZXJvIG9yIG1vcmUgdGltZXMuXG4vL1xuLy8gQ2FsbCBgY2IoZXJyKWAgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCB0aGlzIGNodW5rLiAgSWYgeW91IHBhc3Ncbi8vIGFuIGVycm9yLCB0aGVuIHRoYXQnbGwgcHV0IHRoZSBodXJ0IG9uIHRoZSB3aG9sZSBvcGVyYXRpb24uICBJZiB5b3Vcbi8vIG5ldmVyIGNhbGwgY2IoKSwgdGhlbiB5b3UnbGwgbmV2ZXIgZ2V0IGFub3RoZXIgY2h1bmsuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLndyaXRlY2IgPSBjYjtcbiAgdHMud3JpdGVjaHVuayA9IGNodW5rO1xuICB0cy53cml0ZWVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIGlmICghdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdmFyIHJzID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAodHMubmVlZFRyYW5zZm9ybSB8fFxuICAgICAgICBycy5uZWVkUmVhZGFibGUgfHxcbiAgICAgICAgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaylcbiAgICAgIHRoaXMuX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn07XG5cbi8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIGFyZ3MgYXJlIGhlcmUuXG4vLyBfdHJhbnNmb3JtIGRvZXMgYWxsIHRoZSB3b3JrLlxuLy8gVGhhdCB3ZSBnb3QgaGVyZSBtZWFucyB0aGF0IHRoZSByZWFkYWJsZSBzaWRlIHdhbnRzIG1vcmUgZGF0YS5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbihuKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuXG4gIGlmICh0cy53cml0ZWNodW5rICE9PSBudWxsICYmIHRzLndyaXRlY2IgJiYgIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHRzLnRyYW5zZm9ybWluZyA9IHRydWU7XG4gICAgdGhpcy5fdHJhbnNmb3JtKHRzLndyaXRlY2h1bmssIHRzLndyaXRlZW5jb2RpbmcsIHRzLmFmdGVyVHJhbnNmb3JtKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtYXJrIHRoYXQgd2UgbmVlZCBhIHRyYW5zZm9ybSwgc28gdGhhdCBhbnkgZGF0YSB0aGF0IGNvbWVzIGluXG4gICAgLy8gd2lsbCBnZXQgcHJvY2Vzc2VkLCBub3cgdGhhdCB3ZSd2ZSBhc2tlZCBmb3IgaXQuXG4gICAgdHMubmVlZFRyYW5zZm9ybSA9IHRydWU7XG4gIH1cbn07XG5cblxuZnVuY3Rpb24gZG9uZShzdHJlYW0sIGVyKSB7XG4gIGlmIChlcilcbiAgICByZXR1cm4gc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuXG4gIC8vIGlmIHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgd3JpdGUgYnVmZmVyLCB0aGVuIHRoYXQgbWVhbnNcbiAgLy8gdGhhdCBub3RoaW5nIG1vcmUgd2lsbCBldmVyIGJlIHByb3ZpZGVkXG4gIHZhciB3cyA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHJzID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgdHMgPSBzdHJlYW0uX3RyYW5zZm9ybVN0YXRlO1xuXG4gIGlmICh3cy5sZW5ndGgpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdjYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAnKTtcblxuICBpZiAodHMudHJhbnNmb3JtaW5nKVxuICAgIHRocm93IG5ldyBFcnJvcignY2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZycpO1xuXG4gIHJldHVybiBzdHJlYW0ucHVzaChudWxsKTtcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBjYiksIGFuZCBpdCdsbCBoYW5kbGUgYWxsXG4vLyB0aGUgZHJhaW4gZXZlbnQgZW1pc3Npb24gYW5kIGJ1ZmZlcmluZy5cblxubW9kdWxlLmV4cG9ydHMgPSBXcml0YWJsZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuV3JpdGFibGUuV3JpdGFibGVTdGF0ZSA9IFdyaXRhYmxlU3RhdGU7XG5cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5cbnV0aWwuaW5oZXJpdHMoV3JpdGFibGUsIFN0cmVhbSk7XG5cbmZ1bmN0aW9uIFdyaXRlUmVxKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhpcy5jaHVuayA9IGNodW5rO1xuICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHRoaXMuY2FsbGJhY2sgPSBjYjtcbn1cblxuZnVuY3Rpb24gV3JpdGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gdGhlIHBvaW50IGF0IHdoaWNoIHdyaXRlKCkgc3RhcnRzIHJldHVybmluZyBmYWxzZVxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIHRoYXQgd2UgYWx3YXlzIHJldHVybiBmYWxzZSBpZlxuICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBpcyBub3QgZmx1c2hlZCBpbW1lZGlhdGVseSBvbiB3cml0ZSgpXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IChod20gfHwgaHdtID09PSAwKSA/IGh3bSA6IDE2ICogMTAyNDtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhpcyBzdHJlYW1cbiAgLy8gY29udGFpbnMgYnVmZmVycyBvciBvYmplY3RzLlxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICAvLyBjYXN0IHRvIGludHMuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IH5+dGhpcy5oaWdoV2F0ZXJNYXJrO1xuXG4gIHRoaXMubmVlZERyYWluID0gZmFsc2U7XG4gIC8vIGF0IHRoZSBzdGFydCBvZiBjYWxsaW5nIGVuZCgpXG4gIHRoaXMuZW5kaW5nID0gZmFsc2U7XG4gIC8vIHdoZW4gZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgcmV0dXJuZWRcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICAvLyB3aGVuICdmaW5pc2gnIGlzIGVtaXR0ZWRcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIHNob3VsZCB3ZSBkZWNvZGUgc3RyaW5ncyBpbnRvIGJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdG8gX3dyaXRlP1xuICAvLyB0aGlzIGlzIGhlcmUgc28gdGhhdCBzb21lIG5vZGUtY29yZSBzdHJlYW1zIGNhbiBvcHRpbWl6ZSBzdHJpbmdcbiAgLy8gaGFuZGxpbmcgYXQgYSBsb3dlciBsZXZlbC5cbiAgdmFyIG5vRGVjb2RlID0gb3B0aW9ucy5kZWNvZGVTdHJpbmdzID09PSBmYWxzZTtcbiAgdGhpcy5kZWNvZGVTdHJpbmdzID0gIW5vRGVjb2RlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIG5vdCBhbiBhY3R1YWwgYnVmZmVyIHdlIGtlZXAgdHJhY2sgb2YsIGJ1dCBhIG1lYXN1cmVtZW50XG4gIC8vIG9mIGhvdyBtdWNoIHdlJ3JlIHdhaXRpbmcgdG8gZ2V0IHB1c2hlZCB0byBzb21lIHVuZGVybHlpbmdcbiAgLy8gc29ja2V0IG9yIGZpbGUuXG4gIHRoaXMubGVuZ3RoID0gMDtcblxuICAvLyBhIGZsYWcgdG8gc2VlIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdyaXRlLlxuICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjdWFzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyBhIGZsYWcgdG8ga25vdyBpZiB3ZSdyZSBwcm9jZXNzaW5nIHByZXZpb3VzbHkgYnVmZmVyZWQgaXRlbXMsIHdoaWNoXG4gIC8vIG1heSBjYWxsIHRoZSBfd3JpdGUoKSBjYWxsYmFjayBpbiB0aGUgc2FtZSB0aWNrLCBzbyB0aGF0IHdlIGRvbid0XG4gIC8vIGVuZCB1cCBpbiBhbiBvdmVybGFwcGVkIG9ud3JpdGUgc2l0dWF0aW9uLlxuICB0aGlzLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCdzIHBhc3NlZCB0byBfd3JpdGUoY2h1bmssY2IpXG4gIHRoaXMub253cml0ZSA9IGZ1bmN0aW9uKGVyKSB7XG4gICAgb253cml0ZShzdHJlYW0sIGVyKTtcbiAgfTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCB0aGUgdXNlciBzdXBwbGllcyB0byB3cml0ZShjaHVuayxlbmNvZGluZyxjYilcbiAgdGhpcy53cml0ZWNiID0gbnVsbDtcblxuICAvLyB0aGUgYW1vdW50IHRoYXQgaXMgYmVpbmcgd3JpdHRlbiB3aGVuIF93cml0ZSBpcyBjYWxsZWQuXG4gIHRoaXMud3JpdGVsZW4gPSAwO1xuXG4gIHRoaXMuYnVmZmVyID0gW107XG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gV3JpdGFibGUob3B0aW9ucykge1xuICB2YXIgRHVwbGV4ID0gcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIC8vIFdyaXRhYmxlIGN0b3IgaXMgYXBwbGllZCB0byBEdXBsZXhlcywgdGhvdWdoIHRoZXkncmUgbm90XG4gIC8vIGluc3RhbmNlb2YgV3JpdGFibGUsIHRoZXkncmUgaW5zdGFuY2VvZiBSZWFkYWJsZS5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFdyaXRhYmxlKSAmJiAhKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKVxuICAgIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucyk7XG5cbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeS5cbiAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgU3RyZWFtLmNhbGwodGhpcyk7XG59XG5cbi8vIE90aGVyd2lzZSBwZW9wbGUgY2FuIHBpcGUgV3JpdGFibGUgc3RyZWFtcywgd2hpY2ggaXMganVzdCB3cm9uZy5cbldyaXRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ0Nhbm5vdCBwaXBlLiBOb3QgcmVhZGFibGUuJykpO1xufTtcblxuXG5mdW5jdGlvbiB3cml0ZUFmdGVyRW5kKHN0cmVhbSwgc3RhdGUsIGNiKSB7XG4gIHZhciBlciA9IG5ldyBFcnJvcignd3JpdGUgYWZ0ZXIgZW5kJyk7XG4gIC8vIFRPRE86IGRlZmVyIGVycm9yIGV2ZW50cyBjb25zaXN0ZW50bHkgZXZlcnl3aGVyZSwgbm90IGp1c3QgdGhlIGNiXG4gIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICBjYihlcik7XG4gIH0pO1xufVxuXG4vLyBJZiB3ZSBnZXQgc29tZXRoaW5nIHRoYXQgaXMgbm90IGEgYnVmZmVyLCBzdHJpbmcsIG51bGwsIG9yIHVuZGVmaW5lZCxcbi8vIGFuZCB3ZSdyZSBub3QgaW4gb2JqZWN0TW9kZSwgdGhlbiB0aGF0J3MgYW4gZXJyb3IuXG4vLyBPdGhlcndpc2Ugc3RyZWFtIGNodW5rcyBhcmUgYWxsIGNvbnNpZGVyZWQgdG8gYmUgb2YgbGVuZ3RoPTEsIGFuZCB0aGVcbi8vIHdhdGVybWFya3MgZGV0ZXJtaW5lIGhvdyBtYW55IG9iamVjdHMgdG8ga2VlcCBpbiB0aGUgYnVmZmVyLCByYXRoZXIgdGhhblxuLy8gaG93IG1hbnkgYnl0ZXMgb3IgY2hhcmFjdGVycy5cbmZ1bmN0aW9uIHZhbGlkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGNiKSB7XG4gIHZhciB2YWxpZCA9IHRydWU7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGNodW5rKSAmJlxuICAgICAgJ3N0cmluZycgIT09IHR5cGVvZiBjaHVuayAmJlxuICAgICAgY2h1bmsgIT09IG51bGwgJiZcbiAgICAgIGNodW5rICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgdmFyIGVyID0gbmV3IFR5cGVFcnJvcignSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuaycpO1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgY2IoZXIpO1xuICAgIH0pO1xuICAgIHZhbGlkID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbGlkO1xufVxuXG5Xcml0YWJsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIHZhciByZXQgPSBmYWxzZTtcblxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNodW5rKSlcbiAgICBlbmNvZGluZyA9ICdidWZmZXInO1xuICBlbHNlIGlmICghZW5jb2RpbmcpXG4gICAgZW5jb2RpbmcgPSBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG5cbiAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJylcbiAgICBjYiA9IGZ1bmN0aW9uKCkge307XG5cbiAgaWYgKHN0YXRlLmVuZGVkKVxuICAgIHdyaXRlQWZ0ZXJFbmQodGhpcywgc3RhdGUsIGNiKTtcbiAgZWxzZSBpZiAodmFsaWRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGNiKSlcbiAgICByZXQgPSB3cml0ZU9yQnVmZmVyKHRoaXMsIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcblxuICByZXR1cm4gcmV0O1xufTtcblxuZnVuY3Rpb24gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZykge1xuICBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiZcbiAgICAgIHN0YXRlLmRlY29kZVN0cmluZ3MgIT09IGZhbHNlICYmXG4gICAgICB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgY2h1bmsgPSBuZXcgQnVmZmVyKGNodW5rLCBlbmNvZGluZyk7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuXG4vLyBpZiB3ZSdyZSBhbHJlYWR5IHdyaXRpbmcgc29tZXRoaW5nLCB0aGVuIGp1c3QgcHV0IHRoaXNcbi8vIGluIHRoZSBxdWV1ZSwgYW5kIHdhaXQgb3VyIHR1cm4uICBPdGhlcndpc2UsIGNhbGwgX3dyaXRlXG4vLyBJZiB3ZSByZXR1cm4gZmFsc2UsIHRoZW4gd2UgbmVlZCBhIGRyYWluIGV2ZW50LCBzbyBzZXQgdGhhdCBmbGFnLlxuZnVuY3Rpb24gd3JpdGVPckJ1ZmZlcihzdHJlYW0sIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNodW5rID0gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZyk7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmspKVxuICAgIGVuY29kaW5nID0gJ2J1ZmZlcic7XG4gIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcblxuICBzdGF0ZS5sZW5ndGggKz0gbGVuO1xuXG4gIHZhciByZXQgPSBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICAvLyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHByZXZpb3VzIG5lZWREcmFpbiB3aWxsIG5vdCBiZSByZXNldCB0byBmYWxzZS5cbiAgaWYgKCFyZXQpXG4gICAgc3RhdGUubmVlZERyYWluID0gdHJ1ZTtcblxuICBpZiAoc3RhdGUud3JpdGluZylcbiAgICBzdGF0ZS5idWZmZXIucHVzaChuZXcgV3JpdGVSZXEoY2h1bmssIGVuY29kaW5nLCBjYikpO1xuICBlbHNlXG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHN0YXRlLndyaXRlbGVuID0gbGVuO1xuICBzdGF0ZS53cml0ZWNiID0gY2I7XG4gIHN0YXRlLndyaXRpbmcgPSB0cnVlO1xuICBzdGF0ZS5zeW5jID0gdHJ1ZTtcbiAgc3RyZWFtLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIHN0YXRlLm9ud3JpdGUpO1xuICBzdGF0ZS5zeW5jID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBzeW5jLCBlciwgY2IpIHtcbiAgaWYgKHN5bmMpXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIGNiKGVyKTtcbiAgICB9KTtcbiAgZWxzZVxuICAgIGNiKGVyKTtcblxuICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpIHtcbiAgc3RhdGUud3JpdGluZyA9IGZhbHNlO1xuICBzdGF0ZS53cml0ZWNiID0gbnVsbDtcbiAgc3RhdGUubGVuZ3RoIC09IHN0YXRlLndyaXRlbGVuO1xuICBzdGF0ZS53cml0ZWxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGUoc3RyZWFtLCBlcikge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIHZhciBzeW5jID0gc3RhdGUuc3luYztcbiAgdmFyIGNiID0gc3RhdGUud3JpdGVjYjtcblxuICBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpO1xuXG4gIGlmIChlcilcbiAgICBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKTtcbiAgZWxzZSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgYWN0dWFsbHkgcmVhZHkgdG8gZmluaXNoLCBidXQgZG9uJ3QgZW1pdCB5ZXRcbiAgICB2YXIgZmluaXNoZWQgPSBuZWVkRmluaXNoKHN0cmVhbSwgc3RhdGUpO1xuXG4gICAgaWYgKCFmaW5pc2hlZCAmJiAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJiBzdGF0ZS5idWZmZXIubGVuZ3RoKVxuICAgICAgY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSk7XG5cbiAgICBpZiAoc3luYykge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgICAgYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpIHtcbiAgaWYgKCFmaW5pc2hlZClcbiAgICBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSk7XG4gIGNiKCk7XG4gIGlmIChmaW5pc2hlZClcbiAgICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuLy8gTXVzdCBmb3JjZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gbmV4dFRpY2ssIHNvIHRoYXQgd2UgZG9uJ3Rcbi8vIGVtaXQgJ2RyYWluJyBiZWZvcmUgdGhlIHdyaXRlKCkgY29uc3VtZXIgZ2V0cyB0aGUgJ2ZhbHNlJyByZXR1cm5cbi8vIHZhbHVlLCBhbmQgaGFzIGEgY2hhbmNlIHRvIGF0dGFjaCBhICdkcmFpbicgbGlzdGVuZXIuXG5mdW5jdGlvbiBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLm5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpO1xuICB9XG59XG5cblxuLy8gaWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nLCB0aGVuIHByb2Nlc3MgaXRcbmZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IHRydWU7XG5cbiAgZm9yICh2YXIgYyA9IDA7IGMgPCBzdGF0ZS5idWZmZXIubGVuZ3RoOyBjKyspIHtcbiAgICB2YXIgZW50cnkgPSBzdGF0ZS5idWZmZXJbY107XG4gICAgdmFyIGNodW5rID0gZW50cnkuY2h1bms7XG4gICAgdmFyIGVuY29kaW5nID0gZW50cnkuZW5jb2Rpbmc7XG4gICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuXG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuXG4gICAgLy8gaWYgd2UgZGlkbid0IGNhbGwgdGhlIG9ud3JpdGUgaW1tZWRpYXRlbHksIHRoZW5cbiAgICAvLyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdCBkb2VzLlxuICAgIC8vIGFsc28sIHRoYXQgbWVhbnMgdGhhdCB0aGUgY2h1bmsgYW5kIGNiIGFyZSBjdXJyZW50bHlcbiAgICAvLyBiZWluZyBwcm9jZXNzZWQsIHNvIG1vdmUgdGhlIGJ1ZmZlciBjb3VudGVyIHBhc3QgdGhlbS5cbiAgICBpZiAoc3RhdGUud3JpdGluZykge1xuICAgICAgYysrO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IGZhbHNlO1xuICBpZiAoYyA8IHN0YXRlLmJ1ZmZlci5sZW5ndGgpXG4gICAgc3RhdGUuYnVmZmVyID0gc3RhdGUuYnVmZmVyLnNsaWNlKGMpO1xuICBlbHNlXG4gICAgc3RhdGUuYnVmZmVyLmxlbmd0aCA9IDA7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVuaztcbiAgICBjaHVuayA9IG51bGw7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3VuZGVmaW5lZCcgJiYgY2h1bmsgIT09IG51bGwpXG4gICAgdGhpcy53cml0ZShjaHVuaywgZW5jb2RpbmcpO1xuXG4gIC8vIGlnbm9yZSB1bm5lY2Vzc2FyeSBlbmQoKSBjYWxscy5cbiAgaWYgKCFzdGF0ZS5lbmRpbmcgJiYgIXN0YXRlLmZpbmlzaGVkKVxuICAgIGVuZFdyaXRhYmxlKHRoaXMsIHN0YXRlLCBjYik7XG59O1xuXG5cbmZ1bmN0aW9uIG5lZWRGaW5pc2goc3RyZWFtLCBzdGF0ZSkge1xuICByZXR1cm4gKHN0YXRlLmVuZGluZyAmJlxuICAgICAgICAgIHN0YXRlLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICFzdGF0ZS5maW5pc2hlZCAmJlxuICAgICAgICAgICFzdGF0ZS53cml0aW5nKTtcbn1cblxuZnVuY3Rpb24gZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSkge1xuICB2YXIgbmVlZCA9IG5lZWRGaW5pc2goc3RyZWFtLCBzdGF0ZSk7XG4gIGlmIChuZWVkKSB7XG4gICAgc3RhdGUuZmluaXNoZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KCdmaW5pc2gnKTtcbiAgfVxuICByZXR1cm4gbmVlZDtcbn1cblxuZnVuY3Rpb24gZW5kV3JpdGFibGUoc3RyZWFtLCBzdGF0ZSwgY2IpIHtcbiAgc3RhdGUuZW5kaW5nID0gdHJ1ZTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIGlmIChjYikge1xuICAgIGlmIChzdGF0ZS5maW5pc2hlZClcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2IpO1xuICAgIGVsc2VcbiAgICAgIHN0cmVhbS5vbmNlKCdmaW5pc2gnLCBjYik7XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xufVxuIiwidmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbS90cmFuc2Zvcm0nKVxuICAsIGluaGVyaXRzICA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0c1xuICAsIHh0ZW5kICAgICA9IHJlcXVpcmUoJ3h0ZW5kJylcblxuZnVuY3Rpb24gRGVzdHJveWFibGVUcmFuc2Zvcm0ob3B0cykge1xuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRzKVxuICB0aGlzLl9kZXN0cm95ZWQgPSBmYWxzZVxufVxuXG5pbmhlcml0cyhEZXN0cm95YWJsZVRyYW5zZm9ybSwgVHJhbnNmb3JtKVxuXG5EZXN0cm95YWJsZVRyYW5zZm9ybS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKGVycikge1xuICBpZiAodGhpcy5fZGVzdHJveWVkKSByZXR1cm5cbiAgdGhpcy5fZGVzdHJveWVkID0gdHJ1ZVxuICBcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgaWYgKGVycilcbiAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgc2VsZi5lbWl0KCdjbG9zZScpXG4gIH0pXG59XG5cbi8vIGEgbm9vcCBfdHJhbnNmb3JtIGZ1bmN0aW9uXG5mdW5jdGlvbiBub29wIChjaHVuaywgZW5jLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayhudWxsLCBjaHVuaylcbn1cblxuXG4vLyBjcmVhdGUgYSBuZXcgZXhwb3J0IGZ1bmN0aW9uLCB1c2VkIGJ5IGJvdGggdGhlIG1haW4gZXhwb3J0IGFuZFxuLy8gdGhlIC5jdG9yIGV4cG9ydCwgY29udGFpbnMgY29tbW9uIGxvZ2ljIGZvciBkZWFsaW5nIHdpdGggYXJndW1lbnRzXG5mdW5jdGlvbiB0aHJvdWdoMiAoY29uc3RydWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAob3B0aW9ucywgdHJhbnNmb3JtLCBmbHVzaCkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmbHVzaCAgICAgPSB0cmFuc2Zvcm1cbiAgICAgIHRyYW5zZm9ybSA9IG9wdGlvbnNcbiAgICAgIG9wdGlvbnMgICA9IHt9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0gIT0gJ2Z1bmN0aW9uJylcbiAgICAgIHRyYW5zZm9ybSA9IG5vb3BcblxuICAgIGlmICh0eXBlb2YgZmx1c2ggIT0gJ2Z1bmN0aW9uJylcbiAgICAgIGZsdXNoID0gbnVsbFxuXG4gICAgcmV0dXJuIGNvbnN0cnVjdChvcHRpb25zLCB0cmFuc2Zvcm0sIGZsdXNoKVxuICB9XG59XG5cblxuLy8gbWFpbiBleHBvcnQsIGp1c3QgbWFrZSBtZSBhIHRyYW5zZm9ybSBzdHJlYW0hXG5tb2R1bGUuZXhwb3J0cyA9IHRocm91Z2gyKGZ1bmN0aW9uIChvcHRpb25zLCB0cmFuc2Zvcm0sIGZsdXNoKSB7XG4gIHZhciB0MiA9IG5ldyBEZXN0cm95YWJsZVRyYW5zZm9ybShvcHRpb25zKVxuXG4gIHQyLl90cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cblxuICBpZiAoZmx1c2gpXG4gICAgdDIuX2ZsdXNoID0gZmx1c2hcblxuICByZXR1cm4gdDJcbn0pXG5cblxuLy8gbWFrZSBtZSBhIHJldXNhYmxlIHByb3RvdHlwZSB0aGF0IEkgY2FuIGBuZXdgLCBvciBpbXBsaWNpdGx5IGBuZXdgXG4vLyB3aXRoIGEgY29uc3RydWN0b3IgY2FsbFxubW9kdWxlLmV4cG9ydHMuY3RvciA9IHRocm91Z2gyKGZ1bmN0aW9uIChvcHRpb25zLCB0cmFuc2Zvcm0sIGZsdXNoKSB7XG4gIGZ1bmN0aW9uIFRocm91Z2gyIChvdmVycmlkZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUaHJvdWdoMikpXG4gICAgICByZXR1cm4gbmV3IFRocm91Z2gyKG92ZXJyaWRlKVxuXG4gICAgdGhpcy5vcHRpb25zID0geHRlbmQob3B0aW9ucywgb3ZlcnJpZGUpXG5cbiAgICBEZXN0cm95YWJsZVRyYW5zZm9ybS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucylcbiAgfVxuXG4gIGluaGVyaXRzKFRocm91Z2gyLCBEZXN0cm95YWJsZVRyYW5zZm9ybSlcblxuICBUaHJvdWdoMi5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IHRyYW5zZm9ybVxuXG4gIGlmIChmbHVzaClcbiAgICBUaHJvdWdoMi5wcm90b3R5cGUuX2ZsdXNoID0gZmx1c2hcblxuICByZXR1cm4gVGhyb3VnaDJcbn0pXG5cblxubW9kdWxlLmV4cG9ydHMub2JqID0gdGhyb3VnaDIoZnVuY3Rpb24gKG9wdGlvbnMsIHRyYW5zZm9ybSwgZmx1c2gpIHtcbiAgdmFyIHQyID0gbmV3IERlc3Ryb3lhYmxlVHJhbnNmb3JtKHh0ZW5kKHsgb2JqZWN0TW9kZTogdHJ1ZSwgaGlnaFdhdGVyTWFyazogMTYgfSwgb3B0aW9ucykpXG5cbiAgdDIuX3RyYW5zZm9ybSA9IHRyYW5zZm9ybVxuXG4gIGlmIChmbHVzaClcbiAgICB0Mi5fZmx1c2ggPSBmbHVzaFxuXG4gIHJldHVybiB0MlxufSlcbiIsIlxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gdHJpbTtcblxuZnVuY3Rpb24gdHJpbShzdHIpe1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMqfFxccyokL2csICcnKTtcbn1cblxuZXhwb3J0cy5sZWZ0ID0gZnVuY3Rpb24oc3RyKXtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzKi8sICcnKTtcbn07XG5cbmV4cG9ydHMucmlnaHQgPSBmdW5jdGlvbihzdHIpe1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xccyokLywgJycpO1xufTtcbiIsIlxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlcHJlY2F0ZTtcblxuLyoqXG4gKiBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuICogUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbiAqXG4gKiBJZiBgbG9jYWxTdG9yYWdlLm5vRGVwcmVjYXRpb24gPSB0cnVlYCBpcyBzZXQsIHRoZW4gaXQgaXMgYSBuby1vcC5cbiAqXG4gKiBJZiBgbG9jYWxTdG9yYWdlLnRocm93RGVwcmVjYXRpb24gPSB0cnVlYCBpcyBzZXQsIHRoZW4gZGVwcmVjYXRlZCBmdW5jdGlvbnNcbiAqIHdpbGwgdGhyb3cgYW4gRXJyb3Igd2hlbiBpbnZva2VkLlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2UudHJhY2VEZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBkZXByZWNhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCBpbnZva2UgYGNvbnNvbGUudHJhY2UoKWAgaW5zdGVhZCBvZiBgY29uc29sZS5lcnJvcigpYC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIHRoZSBmdW5jdGlvbiB0byBkZXByZWNhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgLSB0aGUgc3RyaW5nIHRvIHByaW50IHRvIHRoZSBjb25zb2xlIHdoZW4gYGZuYCBpcyBpbnZva2VkXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IGEgbmV3IFwiZGVwcmVjYXRlZFwiIHZlcnNpb24gb2YgYGZuYFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBkZXByZWNhdGUgKGZuLCBtc2cpIHtcbiAgaWYgKGNvbmZpZygnbm9EZXByZWNhdGlvbicpKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgIGlmICghd2FybmVkKSB7XG4gICAgICBpZiAoY29uZmlnKCd0aHJvd0RlcHJlY2F0aW9uJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZygndHJhY2VEZXByZWNhdGlvbicpKSB7XG4gICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2Fybihtc2cpO1xuICAgICAgfVxuICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgYGxvY2FsU3RvcmFnZWAgZm9yIGJvb2xlYW4gdmFsdWVzIGZvciB0aGUgZ2l2ZW4gYG5hbWVgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvbmZpZyAobmFtZSkge1xuICAvLyBhY2Nlc3NpbmcgZ2xvYmFsLmxvY2FsU3RvcmFnZSBjYW4gdHJpZ2dlciBhIERPTUV4Y2VwdGlvbiBpbiBzYW5kYm94ZWQgaWZyYW1lc1xuICB0cnkge1xuICAgIGlmICghZ2xvYmFsLmxvY2FsU3RvcmFnZSkgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB2YWwgPSBnbG9iYWwubG9jYWxTdG9yYWdlW25hbWVdO1xuICBpZiAobnVsbCA9PSB2YWwpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIFN0cmluZyh2YWwpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcbn1cbiIsIlxudmFyIE4xID0gTWF0aC5wb3coMiwgIDcpXG52YXIgTjIgPSBNYXRoLnBvdygyLCAxNClcbnZhciBOMyA9IE1hdGgucG93KDIsIDIxKVxudmFyIE40ID0gTWF0aC5wb3coMiwgMjgpXG52YXIgTjUgPSBNYXRoLnBvdygyLCAzNSlcbnZhciBONiA9IE1hdGgucG93KDIsIDQyKVxudmFyIE43ID0gTWF0aC5wb3coMiwgNDkpXG52YXIgTjggPSBNYXRoLnBvdygyLCA1NilcbnZhciBOOSA9IE1hdGgucG93KDIsIDYzKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHZhbHVlIDwgTjEgPyAxXG4gIDogdmFsdWUgPCBOMiA/IDJcbiAgOiB2YWx1ZSA8IE4zID8gM1xuICA6IHZhbHVlIDwgTjQgPyA0XG4gIDogdmFsdWUgPCBONSA/IDVcbiAgOiB2YWx1ZSA8IE42ID8gNlxuICA6IHZhbHVlIDwgTjcgPyA3XG4gIDogdmFsdWUgPCBOOCA/IDhcbiAgOiB2YWx1ZSA8IE45ID8gOVxuICA6ICAgICAgICAgICAgICAxMFxuICApXG59XG4iLCJ2YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoXCIuL3Zkb20vY3JlYXRlLWVsZW1lbnQuanNcIilcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVFbGVtZW50XG4iLCJ2YXIgZGlmZiA9IHJlcXVpcmUoXCIuL3Z0cmVlL2RpZmYuanNcIilcblxubW9kdWxlLmV4cG9ydHMgPSBkaWZmXG4iLCJ2YXIgaCA9IHJlcXVpcmUoXCIuL3ZpcnR1YWwtaHlwZXJzY3JpcHQvaW5kZXguanNcIilcblxubW9kdWxlLmV4cG9ydHMgPSBoXG4iLCJ2YXIgZGlmZiA9IHJlcXVpcmUoXCIuL2RpZmYuanNcIilcclxudmFyIHBhdGNoID0gcmVxdWlyZShcIi4vcGF0Y2guanNcIilcclxudmFyIGggPSByZXF1aXJlKFwiLi9oLmpzXCIpXHJcbnZhciBjcmVhdGUgPSByZXF1aXJlKFwiLi9jcmVhdGUtZWxlbWVudC5qc1wiKVxyXG52YXIgVk5vZGUgPSByZXF1aXJlKCcuL3Zub2RlL3Zub2RlLmpzJylcclxudmFyIFZUZXh0ID0gcmVxdWlyZSgnLi92bm9kZS92dGV4dC5qcycpXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIGRpZmY6IGRpZmYsXHJcbiAgICBwYXRjaDogcGF0Y2gsXHJcbiAgICBoOiBoLFxyXG4gICAgY3JlYXRlOiBjcmVhdGUsXHJcbiAgICBWTm9kZTogVk5vZGUsXHJcbiAgICBWVGV4dDogVlRleHRcclxufVxyXG4iLCJ2YXIgcGF0Y2ggPSByZXF1aXJlKFwiLi92ZG9tL3BhdGNoLmpzXCIpXG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoXCJpcy1vYmplY3RcIilcbnZhciBpc0hvb2sgPSByZXF1aXJlKFwiLi4vdm5vZGUvaXMtdmhvb2suanNcIilcblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseVByb3BlcnRpZXNcblxuZnVuY3Rpb24gYXBwbHlQcm9wZXJ0aWVzKG5vZGUsIHByb3BzLCBwcmV2aW91cykge1xuICAgIGZvciAodmFyIHByb3BOYW1lIGluIHByb3BzKSB7XG4gICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV1cblxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlbW92ZVByb3BlcnR5KG5vZGUsIHByb3BOYW1lLCBwcm9wVmFsdWUsIHByZXZpb3VzKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0hvb2socHJvcFZhbHVlKSkge1xuICAgICAgICAgICAgcmVtb3ZlUHJvcGVydHkobm9kZSwgcHJvcE5hbWUsIHByb3BWYWx1ZSwgcHJldmlvdXMpXG4gICAgICAgICAgICBpZiAocHJvcFZhbHVlLmhvb2spIHtcbiAgICAgICAgICAgICAgICBwcm9wVmFsdWUuaG9vayhub2RlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgPyBwcmV2aW91c1twcm9wTmFtZV0gOiB1bmRlZmluZWQpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QocHJvcFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHBhdGNoT2JqZWN0KG5vZGUsIHByb3BzLCBwcmV2aW91cywgcHJvcE5hbWUsIHByb3BWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vZGVbcHJvcE5hbWVdID0gcHJvcFZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVByb3BlcnR5KG5vZGUsIHByb3BOYW1lLCBwcm9wVmFsdWUsIHByZXZpb3VzKSB7XG4gICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgIHZhciBwcmV2aW91c1ZhbHVlID0gcHJldmlvdXNbcHJvcE5hbWVdXG5cbiAgICAgICAgaWYgKCFpc0hvb2socHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChwcm9wTmFtZSA9PT0gXCJhdHRyaWJ1dGVzXCIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhdHRyTmFtZSBpbiBwcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcE5hbWUgPT09IFwic3R5bGVcIikge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gcHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnN0eWxlW2ldID0gXCJcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHByZXZpb3VzVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBub2RlW3Byb3BOYW1lXSA9IFwiXCJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZVtwcm9wTmFtZV0gPSBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNWYWx1ZS51bmhvb2spIHtcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUudW5ob29rKG5vZGUsIHByb3BOYW1lLCBwcm9wVmFsdWUpXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhdGNoT2JqZWN0KG5vZGUsIHByb3BzLCBwcmV2aW91cywgcHJvcE5hbWUsIHByb3BWYWx1ZSkge1xuICAgIHZhciBwcmV2aW91c1ZhbHVlID0gcHJldmlvdXMgPyBwcmV2aW91c1twcm9wTmFtZV0gOiB1bmRlZmluZWRcblxuICAgIC8vIFNldCBhdHRyaWJ1dGVzXG4gICAgaWYgKHByb3BOYW1lID09PSBcImF0dHJpYnV0ZXNcIikge1xuICAgICAgICBmb3IgKHZhciBhdHRyTmFtZSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBhdHRyVmFsdWUgPSBwcm9wVmFsdWVbYXR0ck5hbWVdXG5cbiAgICAgICAgICAgIGlmIChhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0clZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYocHJldmlvdXNWYWx1ZSAmJiBpc09iamVjdChwcmV2aW91c1ZhbHVlKSAmJlxuICAgICAgICBnZXRQcm90b3R5cGUocHJldmlvdXNWYWx1ZSkgIT09IGdldFByb3RvdHlwZShwcm9wVmFsdWUpKSB7XG4gICAgICAgIG5vZGVbcHJvcE5hbWVdID0gcHJvcFZhbHVlXG4gICAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghaXNPYmplY3Qobm9kZVtwcm9wTmFtZV0pKSB7XG4gICAgICAgIG5vZGVbcHJvcE5hbWVdID0ge31cbiAgICB9XG5cbiAgICB2YXIgcmVwbGFjZXIgPSBwcm9wTmFtZSA9PT0gXCJzdHlsZVwiID8gXCJcIiA6IHVuZGVmaW5lZFxuXG4gICAgZm9yICh2YXIgayBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcHJvcFZhbHVlW2tdXG4gICAgICAgIG5vZGVbcHJvcE5hbWVdW2tdID0gKHZhbHVlID09PSB1bmRlZmluZWQpID8gcmVwbGFjZXIgOiB2YWx1ZVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0UHJvdG90eXBlKHZhbHVlKSB7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKVxuICAgIH0gZWxzZSBpZiAodmFsdWUuX19wcm90b19fKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5fX3Byb3RvX19cbiAgICB9IGVsc2UgaWYgKHZhbHVlLmNvbnN0cnVjdG9yKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgICB9XG59XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKFwiZ2xvYmFsL2RvY3VtZW50XCIpXG5cbnZhciBhcHBseVByb3BlcnRpZXMgPSByZXF1aXJlKFwiLi9hcHBseS1wcm9wZXJ0aWVzXCIpXG5cbnZhciBpc1ZOb2RlID0gcmVxdWlyZShcIi4uL3Zub2RlL2lzLXZub2RlLmpzXCIpXG52YXIgaXNWVGV4dCA9IHJlcXVpcmUoXCIuLi92bm9kZS9pcy12dGV4dC5qc1wiKVxudmFyIGlzV2lkZ2V0ID0gcmVxdWlyZShcIi4uL3Zub2RlL2lzLXdpZGdldC5qc1wiKVxudmFyIGhhbmRsZVRodW5rID0gcmVxdWlyZShcIi4uL3Zub2RlL2hhbmRsZS10aHVuay5qc1wiKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUVsZW1lbnRcblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh2bm9kZSwgb3B0cykge1xuICAgIHZhciBkb2MgPSBvcHRzID8gb3B0cy5kb2N1bWVudCB8fCBkb2N1bWVudCA6IGRvY3VtZW50XG4gICAgdmFyIHdhcm4gPSBvcHRzID8gb3B0cy53YXJuIDogbnVsbFxuXG4gICAgdm5vZGUgPSBoYW5kbGVUaHVuayh2bm9kZSkuYVxuXG4gICAgaWYgKGlzV2lkZ2V0KHZub2RlKSkge1xuICAgICAgICByZXR1cm4gdm5vZGUuaW5pdCgpXG4gICAgfSBlbHNlIGlmIChpc1ZUZXh0KHZub2RlKSkge1xuICAgICAgICByZXR1cm4gZG9jLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpXG4gICAgfSBlbHNlIGlmICghaXNWTm9kZSh2bm9kZSkpIHtcbiAgICAgICAgaWYgKHdhcm4pIHtcbiAgICAgICAgICAgIHdhcm4oXCJJdGVtIGlzIG5vdCBhIHZhbGlkIHZpcnR1YWwgZG9tIG5vZGVcIiwgdm5vZGUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICB2YXIgbm9kZSA9ICh2bm9kZS5uYW1lc3BhY2UgPT09IG51bGwpID9cbiAgICAgICAgZG9jLmNyZWF0ZUVsZW1lbnQodm5vZGUudGFnTmFtZSkgOlxuICAgICAgICBkb2MuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5hbWVzcGFjZSwgdm5vZGUudGFnTmFtZSlcblxuICAgIHZhciBwcm9wcyA9IHZub2RlLnByb3BlcnRpZXNcbiAgICBhcHBseVByb3BlcnRpZXMobm9kZSwgcHJvcHMpXG5cbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGROb2RlID0gY3JlYXRlRWxlbWVudChjaGlsZHJlbltpXSwgb3B0cylcbiAgICAgICAgaWYgKGNoaWxkTm9kZSkge1xuICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChjaGlsZE5vZGUpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZVxufVxuIiwiLy8gTWFwcyBhIHZpcnR1YWwgRE9NIHRyZWUgb250byBhIHJlYWwgRE9NIHRyZWUgaW4gYW4gZWZmaWNpZW50IG1hbm5lci5cbi8vIFdlIGRvbid0IHdhbnQgdG8gcmVhZCBhbGwgb2YgdGhlIERPTSBub2RlcyBpbiB0aGUgdHJlZSBzbyB3ZSB1c2Vcbi8vIHRoZSBpbi1vcmRlciB0cmVlIGluZGV4aW5nIHRvIGVsaW1pbmF0ZSByZWN1cnNpb24gZG93biBjZXJ0YWluIGJyYW5jaGVzLlxuLy8gV2Ugb25seSByZWN1cnNlIGludG8gYSBET00gbm9kZSBpZiB3ZSBrbm93IHRoYXQgaXQgY29udGFpbnMgYSBjaGlsZCBvZlxuLy8gaW50ZXJlc3QuXG5cbnZhciBub0NoaWxkID0ge31cblxubW9kdWxlLmV4cG9ydHMgPSBkb21JbmRleFxuXG5mdW5jdGlvbiBkb21JbmRleChyb290Tm9kZSwgdHJlZSwgaW5kaWNlcywgbm9kZXMpIHtcbiAgICBpZiAoIWluZGljZXMgfHwgaW5kaWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaW5kaWNlcy5zb3J0KGFzY2VuZGluZylcbiAgICAgICAgcmV0dXJuIHJlY3Vyc2Uocm9vdE5vZGUsIHRyZWUsIGluZGljZXMsIG5vZGVzLCAwKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVjdXJzZShyb290Tm9kZSwgdHJlZSwgaW5kaWNlcywgbm9kZXMsIHJvb3RJbmRleCkge1xuICAgIG5vZGVzID0gbm9kZXMgfHwge31cblxuXG4gICAgaWYgKHJvb3ROb2RlKSB7XG4gICAgICAgIGlmIChpbmRleEluUmFuZ2UoaW5kaWNlcywgcm9vdEluZGV4LCByb290SW5kZXgpKSB7XG4gICAgICAgICAgICBub2Rlc1tyb290SW5kZXhdID0gcm9vdE5vZGVcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB2Q2hpbGRyZW4gPSB0cmVlLmNoaWxkcmVuXG5cbiAgICAgICAgaWYgKHZDaGlsZHJlbikge1xuXG4gICAgICAgICAgICB2YXIgY2hpbGROb2RlcyA9IHJvb3ROb2RlLmNoaWxkTm9kZXNcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmVlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcm9vdEluZGV4ICs9IDFcblxuICAgICAgICAgICAgICAgIHZhciB2Q2hpbGQgPSB2Q2hpbGRyZW5baV0gfHwgbm9DaGlsZFxuICAgICAgICAgICAgICAgIHZhciBuZXh0SW5kZXggPSByb290SW5kZXggKyAodkNoaWxkLmNvdW50IHx8IDApXG5cbiAgICAgICAgICAgICAgICAvLyBza2lwIHJlY3Vyc2lvbiBkb3duIHRoZSB0cmVlIGlmIHRoZXJlIGFyZSBubyBub2RlcyBkb3duIGhlcmVcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhJblJhbmdlKGluZGljZXMsIHJvb3RJbmRleCwgbmV4dEluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICByZWN1cnNlKGNoaWxkTm9kZXNbaV0sIHZDaGlsZCwgaW5kaWNlcywgbm9kZXMsIHJvb3RJbmRleClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByb290SW5kZXggPSBuZXh0SW5kZXhcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2Rlc1xufVxuXG4vLyBCaW5hcnkgc2VhcmNoIGZvciBhbiBpbmRleCBpbiB0aGUgaW50ZXJ2YWwgW2xlZnQsIHJpZ2h0XVxuZnVuY3Rpb24gaW5kZXhJblJhbmdlKGluZGljZXMsIGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKGluZGljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHZhciBtaW5JbmRleCA9IDBcbiAgICB2YXIgbWF4SW5kZXggPSBpbmRpY2VzLmxlbmd0aCAtIDFcbiAgICB2YXIgY3VycmVudEluZGV4XG4gICAgdmFyIGN1cnJlbnRJdGVtXG5cbiAgICB3aGlsZSAobWluSW5kZXggPD0gbWF4SW5kZXgpIHtcbiAgICAgICAgY3VycmVudEluZGV4ID0gKChtYXhJbmRleCArIG1pbkluZGV4KSAvIDIpID4+IDBcbiAgICAgICAgY3VycmVudEl0ZW0gPSBpbmRpY2VzW2N1cnJlbnRJbmRleF1cblxuICAgICAgICBpZiAobWluSW5kZXggPT09IG1heEluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEl0ZW0gPj0gbGVmdCAmJiBjdXJyZW50SXRlbSA8PSByaWdodFxuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRJdGVtIDwgbGVmdCkge1xuICAgICAgICAgICAgbWluSW5kZXggPSBjdXJyZW50SW5kZXggKyAxXG4gICAgICAgIH0gZWxzZSAgaWYgKGN1cnJlbnRJdGVtID4gcmlnaHQpIHtcbiAgICAgICAgICAgIG1heEluZGV4ID0gY3VycmVudEluZGV4IC0gMVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpIHtcbiAgICByZXR1cm4gYSA+IGIgPyAxIDogLTFcbn1cbiIsInZhciBhcHBseVByb3BlcnRpZXMgPSByZXF1aXJlKFwiLi9hcHBseS1wcm9wZXJ0aWVzXCIpXG5cbnZhciBpc1dpZGdldCA9IHJlcXVpcmUoXCIuLi92bm9kZS9pcy13aWRnZXQuanNcIilcbnZhciBWUGF0Y2ggPSByZXF1aXJlKFwiLi4vdm5vZGUvdnBhdGNoLmpzXCIpXG5cbnZhciB1cGRhdGVXaWRnZXQgPSByZXF1aXJlKFwiLi91cGRhdGUtd2lkZ2V0XCIpXG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHlQYXRjaFxuXG5mdW5jdGlvbiBhcHBseVBhdGNoKHZwYXRjaCwgZG9tTm9kZSwgcmVuZGVyT3B0aW9ucykge1xuICAgIHZhciB0eXBlID0gdnBhdGNoLnR5cGVcbiAgICB2YXIgdk5vZGUgPSB2cGF0Y2gudk5vZGVcbiAgICB2YXIgcGF0Y2ggPSB2cGF0Y2gucGF0Y2hcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFZQYXRjaC5SRU1PVkU6XG4gICAgICAgICAgICByZXR1cm4gcmVtb3ZlTm9kZShkb21Ob2RlLCB2Tm9kZSlcbiAgICAgICAgY2FzZSBWUGF0Y2guSU5TRVJUOlxuICAgICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUoZG9tTm9kZSwgcGF0Y2gsIHJlbmRlck9wdGlvbnMpXG4gICAgICAgIGNhc2UgVlBhdGNoLlZURVhUOlxuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1BhdGNoKGRvbU5vZGUsIHZOb2RlLCBwYXRjaCwgcmVuZGVyT3B0aW9ucylcbiAgICAgICAgY2FzZSBWUGF0Y2guV0lER0VUOlxuICAgICAgICAgICAgcmV0dXJuIHdpZGdldFBhdGNoKGRvbU5vZGUsIHZOb2RlLCBwYXRjaCwgcmVuZGVyT3B0aW9ucylcbiAgICAgICAgY2FzZSBWUGF0Y2guVk5PREU6XG4gICAgICAgICAgICByZXR1cm4gdk5vZGVQYXRjaChkb21Ob2RlLCB2Tm9kZSwgcGF0Y2gsIHJlbmRlck9wdGlvbnMpXG4gICAgICAgIGNhc2UgVlBhdGNoLk9SREVSOlxuICAgICAgICAgICAgcmVvcmRlckNoaWxkcmVuKGRvbU5vZGUsIHBhdGNoKVxuICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGVcbiAgICAgICAgY2FzZSBWUGF0Y2guUFJPUFM6XG4gICAgICAgICAgICBhcHBseVByb3BlcnRpZXMoZG9tTm9kZSwgcGF0Y2gsIHZOb2RlLnByb3BlcnRpZXMpXG4gICAgICAgICAgICByZXR1cm4gZG9tTm9kZVxuICAgICAgICBjYXNlIFZQYXRjaC5USFVOSzpcbiAgICAgICAgICAgIHJldHVybiByZXBsYWNlUm9vdChkb21Ob2RlLFxuICAgICAgICAgICAgICAgIHJlbmRlck9wdGlvbnMucGF0Y2goZG9tTm9kZSwgcGF0Y2gsIHJlbmRlck9wdGlvbnMpKVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGVcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUoZG9tTm9kZSwgdk5vZGUpIHtcbiAgICB2YXIgcGFyZW50Tm9kZSA9IGRvbU5vZGUucGFyZW50Tm9kZVxuXG4gICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkb21Ob2RlKVxuICAgIH1cblxuICAgIGRlc3Ryb3lXaWRnZXQoZG9tTm9kZSwgdk5vZGUpO1xuXG4gICAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gaW5zZXJ0Tm9kZShwYXJlbnROb2RlLCB2Tm9kZSwgcmVuZGVyT3B0aW9ucykge1xuICAgIHZhciBuZXdOb2RlID0gcmVuZGVyT3B0aW9ucy5yZW5kZXIodk5vZGUsIHJlbmRlck9wdGlvbnMpXG5cbiAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKG5ld05vZGUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudE5vZGVcbn1cblxuZnVuY3Rpb24gc3RyaW5nUGF0Y2goZG9tTm9kZSwgbGVmdFZOb2RlLCB2VGV4dCwgcmVuZGVyT3B0aW9ucykge1xuICAgIHZhciBuZXdOb2RlXG5cbiAgICBpZiAoZG9tTm9kZS5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgICBkb21Ob2RlLnJlcGxhY2VEYXRhKDAsIGRvbU5vZGUubGVuZ3RoLCB2VGV4dC50ZXh0KVxuICAgICAgICBuZXdOb2RlID0gZG9tTm9kZVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwYXJlbnROb2RlID0gZG9tTm9kZS5wYXJlbnROb2RlXG4gICAgICAgIG5ld05vZGUgPSByZW5kZXJPcHRpb25zLnJlbmRlcih2VGV4dCwgcmVuZGVyT3B0aW9ucylcblxuICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBuZXdOb2RlICE9PSBkb21Ob2RlKSB7XG4gICAgICAgICAgICBwYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdOb2RlLCBkb21Ob2RlKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld05vZGVcbn1cblxuZnVuY3Rpb24gd2lkZ2V0UGF0Y2goZG9tTm9kZSwgbGVmdFZOb2RlLCB3aWRnZXQsIHJlbmRlck9wdGlvbnMpIHtcbiAgICB2YXIgdXBkYXRpbmcgPSB1cGRhdGVXaWRnZXQobGVmdFZOb2RlLCB3aWRnZXQpXG4gICAgdmFyIG5ld05vZGVcblxuICAgIGlmICh1cGRhdGluZykge1xuICAgICAgICBuZXdOb2RlID0gd2lkZ2V0LnVwZGF0ZShsZWZ0Vk5vZGUsIGRvbU5vZGUpIHx8IGRvbU5vZGVcbiAgICB9IGVsc2Uge1xuICAgICAgICBuZXdOb2RlID0gcmVuZGVyT3B0aW9ucy5yZW5kZXIod2lkZ2V0LCByZW5kZXJPcHRpb25zKVxuICAgIH1cblxuICAgIHZhciBwYXJlbnROb2RlID0gZG9tTm9kZS5wYXJlbnROb2RlXG5cbiAgICBpZiAocGFyZW50Tm9kZSAmJiBuZXdOb2RlICE9PSBkb21Ob2RlKSB7XG4gICAgICAgIHBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld05vZGUsIGRvbU5vZGUpXG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGluZykge1xuICAgICAgICBkZXN0cm95V2lkZ2V0KGRvbU5vZGUsIGxlZnRWTm9kZSlcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3Tm9kZVxufVxuXG5mdW5jdGlvbiB2Tm9kZVBhdGNoKGRvbU5vZGUsIGxlZnRWTm9kZSwgdk5vZGUsIHJlbmRlck9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50Tm9kZSA9IGRvbU5vZGUucGFyZW50Tm9kZVxuICAgIHZhciBuZXdOb2RlID0gcmVuZGVyT3B0aW9ucy5yZW5kZXIodk5vZGUsIHJlbmRlck9wdGlvbnMpXG5cbiAgICBpZiAocGFyZW50Tm9kZSAmJiBuZXdOb2RlICE9PSBkb21Ob2RlKSB7XG4gICAgICAgIHBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld05vZGUsIGRvbU5vZGUpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld05vZGVcbn1cblxuZnVuY3Rpb24gZGVzdHJveVdpZGdldChkb21Ob2RlLCB3KSB7XG4gICAgaWYgKHR5cGVvZiB3LmRlc3Ryb3kgPT09IFwiZnVuY3Rpb25cIiAmJiBpc1dpZGdldCh3KSkge1xuICAgICAgICB3LmRlc3Ryb3koZG9tTm9kZSlcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlb3JkZXJDaGlsZHJlbihkb21Ob2RlLCBtb3Zlcykge1xuICAgIHZhciBjaGlsZE5vZGVzID0gZG9tTm9kZS5jaGlsZE5vZGVzXG4gICAgdmFyIGtleU1hcCA9IHt9XG4gICAgdmFyIG5vZGVcbiAgICB2YXIgcmVtb3ZlXG4gICAgdmFyIGluc2VydFxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb3Zlcy5yZW1vdmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlbW92ZSA9IG1vdmVzLnJlbW92ZXNbaV1cbiAgICAgICAgbm9kZSA9IGNoaWxkTm9kZXNbcmVtb3ZlLmZyb21dXG4gICAgICAgIGlmIChyZW1vdmUua2V5KSB7XG4gICAgICAgICAgICBrZXlNYXBbcmVtb3ZlLmtleV0gPSBub2RlXG4gICAgICAgIH1cbiAgICAgICAgZG9tTm9kZS5yZW1vdmVDaGlsZChub2RlKVxuICAgIH1cblxuICAgIHZhciBsZW5ndGggPSBjaGlsZE5vZGVzLmxlbmd0aFxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbW92ZXMuaW5zZXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBpbnNlcnQgPSBtb3Zlcy5pbnNlcnRzW2pdXG4gICAgICAgIG5vZGUgPSBrZXlNYXBbaW5zZXJ0LmtleV1cbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgd2VpcmRlc3QgYnVnIGkndmUgZXZlciBzZWVuIGluIHdlYmtpdFxuICAgICAgICBkb21Ob2RlLmluc2VydEJlZm9yZShub2RlLCBpbnNlcnQudG8gPj0gbGVuZ3RoKysgPyBudWxsIDogY2hpbGROb2Rlc1tpbnNlcnQudG9dKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZVJvb3Qob2xkUm9vdCwgbmV3Um9vdCkge1xuICAgIGlmIChvbGRSb290ICYmIG5ld1Jvb3QgJiYgb2xkUm9vdCAhPT0gbmV3Um9vdCAmJiBvbGRSb290LnBhcmVudE5vZGUpIHtcbiAgICAgICAgb2xkUm9vdC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdSb290LCBvbGRSb290KVxuICAgIH1cblxuICAgIHJldHVybiBuZXdSb290O1xufVxuIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZShcImdsb2JhbC9kb2N1bWVudFwiKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKFwieC1pcy1hcnJheVwiKVxuXG52YXIgcmVuZGVyID0gcmVxdWlyZShcIi4vY3JlYXRlLWVsZW1lbnRcIilcbnZhciBkb21JbmRleCA9IHJlcXVpcmUoXCIuL2RvbS1pbmRleFwiKVxudmFyIHBhdGNoT3AgPSByZXF1aXJlKFwiLi9wYXRjaC1vcFwiKVxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaFxuXG5mdW5jdGlvbiBwYXRjaChyb290Tm9kZSwgcGF0Y2hlcywgcmVuZGVyT3B0aW9ucykge1xuICAgIHJlbmRlck9wdGlvbnMgPSByZW5kZXJPcHRpb25zIHx8IHt9XG4gICAgcmVuZGVyT3B0aW9ucy5wYXRjaCA9IHJlbmRlck9wdGlvbnMucGF0Y2ggJiYgcmVuZGVyT3B0aW9ucy5wYXRjaCAhPT0gcGF0Y2hcbiAgICAgICAgPyByZW5kZXJPcHRpb25zLnBhdGNoXG4gICAgICAgIDogcGF0Y2hSZWN1cnNpdmVcbiAgICByZW5kZXJPcHRpb25zLnJlbmRlciA9IHJlbmRlck9wdGlvbnMucmVuZGVyIHx8IHJlbmRlclxuXG4gICAgcmV0dXJuIHJlbmRlck9wdGlvbnMucGF0Y2gocm9vdE5vZGUsIHBhdGNoZXMsIHJlbmRlck9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIHBhdGNoUmVjdXJzaXZlKHJvb3ROb2RlLCBwYXRjaGVzLCByZW5kZXJPcHRpb25zKSB7XG4gICAgdmFyIGluZGljZXMgPSBwYXRjaEluZGljZXMocGF0Y2hlcylcblxuICAgIGlmIChpbmRpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcm9vdE5vZGVcbiAgICB9XG5cbiAgICB2YXIgaW5kZXggPSBkb21JbmRleChyb290Tm9kZSwgcGF0Y2hlcy5hLCBpbmRpY2VzKVxuICAgIHZhciBvd25lckRvY3VtZW50ID0gcm9vdE5vZGUub3duZXJEb2N1bWVudFxuXG4gICAgaWYgKCFyZW5kZXJPcHRpb25zLmRvY3VtZW50ICYmIG93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50KSB7XG4gICAgICAgIHJlbmRlck9wdGlvbnMuZG9jdW1lbnQgPSBvd25lckRvY3VtZW50XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlSW5kZXggPSBpbmRpY2VzW2ldXG4gICAgICAgIHJvb3ROb2RlID0gYXBwbHlQYXRjaChyb290Tm9kZSxcbiAgICAgICAgICAgIGluZGV4W25vZGVJbmRleF0sXG4gICAgICAgICAgICBwYXRjaGVzW25vZGVJbmRleF0sXG4gICAgICAgICAgICByZW5kZXJPcHRpb25zKVxuICAgIH1cblxuICAgIHJldHVybiByb290Tm9kZVxufVxuXG5mdW5jdGlvbiBhcHBseVBhdGNoKHJvb3ROb2RlLCBkb21Ob2RlLCBwYXRjaExpc3QsIHJlbmRlck9wdGlvbnMpIHtcbiAgICBpZiAoIWRvbU5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHJvb3ROb2RlXG4gICAgfVxuXG4gICAgdmFyIG5ld05vZGVcblxuICAgIGlmIChpc0FycmF5KHBhdGNoTGlzdCkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRjaExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG5ld05vZGUgPSBwYXRjaE9wKHBhdGNoTGlzdFtpXSwgZG9tTm9kZSwgcmVuZGVyT3B0aW9ucylcblxuICAgICAgICAgICAgaWYgKGRvbU5vZGUgPT09IHJvb3ROb2RlKSB7XG4gICAgICAgICAgICAgICAgcm9vdE5vZGUgPSBuZXdOb2RlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBuZXdOb2RlID0gcGF0Y2hPcChwYXRjaExpc3QsIGRvbU5vZGUsIHJlbmRlck9wdGlvbnMpXG5cbiAgICAgICAgaWYgKGRvbU5vZGUgPT09IHJvb3ROb2RlKSB7XG4gICAgICAgICAgICByb290Tm9kZSA9IG5ld05vZGVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByb290Tm9kZVxufVxuXG5mdW5jdGlvbiBwYXRjaEluZGljZXMocGF0Y2hlcykge1xuICAgIHZhciBpbmRpY2VzID0gW11cblxuICAgIGZvciAodmFyIGtleSBpbiBwYXRjaGVzKSB7XG4gICAgICAgIGlmIChrZXkgIT09IFwiYVwiKSB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2goTnVtYmVyKGtleSkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlc1xufVxuIiwidmFyIGlzV2lkZ2V0ID0gcmVxdWlyZShcIi4uL3Zub2RlL2lzLXdpZGdldC5qc1wiKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVwZGF0ZVdpZGdldFxuXG5mdW5jdGlvbiB1cGRhdGVXaWRnZXQoYSwgYikge1xuICAgIGlmIChpc1dpZGdldChhKSAmJiBpc1dpZGdldChiKSkge1xuICAgICAgICBpZiAoXCJuYW1lXCIgaW4gYSAmJiBcIm5hbWVcIiBpbiBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5pZCA9PT0gYi5pZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGEuaW5pdCA9PT0gYi5pbml0XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2Vcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEV2U3RvcmUgPSByZXF1aXJlKCdldi1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2SG9vaztcblxuZnVuY3Rpb24gRXZIb29rKHZhbHVlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEV2SG9vaykpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFdkhvb2sodmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbn1cblxuRXZIb29rLnByb3RvdHlwZS5ob29rID0gZnVuY3Rpb24gKG5vZGUsIHByb3BlcnR5TmFtZSkge1xuICAgIHZhciBlcyA9IEV2U3RvcmUobm9kZSk7XG4gICAgdmFyIHByb3BOYW1lID0gcHJvcGVydHlOYW1lLnN1YnN0cigzKTtcblxuICAgIGVzW3Byb3BOYW1lXSA9IHRoaXMudmFsdWU7XG59O1xuXG5Fdkhvb2sucHJvdG90eXBlLnVuaG9vayA9IGZ1bmN0aW9uKG5vZGUsIHByb3BlcnR5TmFtZSkge1xuICAgIHZhciBlcyA9IEV2U3RvcmUobm9kZSk7XG4gICAgdmFyIHByb3BOYW1lID0gcHJvcGVydHlOYW1lLnN1YnN0cigzKTtcblxuICAgIGVzW3Byb3BOYW1lXSA9IHVuZGVmaW5lZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gU29mdFNldEhvb2s7XG5cbmZ1bmN0aW9uIFNvZnRTZXRIb29rKHZhbHVlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNvZnRTZXRIb29rKSkge1xuICAgICAgICByZXR1cm4gbmV3IFNvZnRTZXRIb29rKHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG59XG5cblNvZnRTZXRIb29rLnByb3RvdHlwZS5ob29rID0gZnVuY3Rpb24gKG5vZGUsIHByb3BlcnR5TmFtZSkge1xuICAgIGlmIChub2RlW3Byb3BlcnR5TmFtZV0gIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdGhpcy52YWx1ZTtcbiAgICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ3gtaXMtYXJyYXknKTtcblxudmFyIFZOb2RlID0gcmVxdWlyZSgnLi4vdm5vZGUvdm5vZGUuanMnKTtcbnZhciBWVGV4dCA9IHJlcXVpcmUoJy4uL3Zub2RlL3Z0ZXh0LmpzJyk7XG52YXIgaXNWTm9kZSA9IHJlcXVpcmUoJy4uL3Zub2RlL2lzLXZub2RlJyk7XG52YXIgaXNWVGV4dCA9IHJlcXVpcmUoJy4uL3Zub2RlL2lzLXZ0ZXh0Jyk7XG52YXIgaXNXaWRnZXQgPSByZXF1aXJlKCcuLi92bm9kZS9pcy13aWRnZXQnKTtcbnZhciBpc0hvb2sgPSByZXF1aXJlKCcuLi92bm9kZS9pcy12aG9vaycpO1xudmFyIGlzVlRodW5rID0gcmVxdWlyZSgnLi4vdm5vZGUvaXMtdGh1bmsnKTtcblxudmFyIHBhcnNlVGFnID0gcmVxdWlyZSgnLi9wYXJzZS10YWcuanMnKTtcbnZhciBzb2Z0U2V0SG9vayA9IHJlcXVpcmUoJy4vaG9va3Mvc29mdC1zZXQtaG9vay5qcycpO1xudmFyIGV2SG9vayA9IHJlcXVpcmUoJy4vaG9va3MvZXYtaG9vay5qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGg7XG5cbmZ1bmN0aW9uIGgodGFnTmFtZSwgcHJvcGVydGllcywgY2hpbGRyZW4pIHtcbiAgICB2YXIgY2hpbGROb2RlcyA9IFtdO1xuICAgIHZhciB0YWcsIHByb3BzLCBrZXksIG5hbWVzcGFjZTtcblxuICAgIGlmICghY2hpbGRyZW4gJiYgaXNDaGlsZHJlbihwcm9wZXJ0aWVzKSkge1xuICAgICAgICBjaGlsZHJlbiA9IHByb3BlcnRpZXM7XG4gICAgICAgIHByb3BzID0ge307XG4gICAgfVxuXG4gICAgcHJvcHMgPSBwcm9wcyB8fCBwcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHRhZyA9IHBhcnNlVGFnKHRhZ05hbWUsIHByb3BzKTtcblxuICAgIC8vIHN1cHBvcnQga2V5c1xuICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgna2V5JykpIHtcbiAgICAgICAga2V5ID0gcHJvcHMua2V5O1xuICAgICAgICBwcm9wcy5rZXkgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBuYW1lc3BhY2VcbiAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ25hbWVzcGFjZScpKSB7XG4gICAgICAgIG5hbWVzcGFjZSA9IHByb3BzLm5hbWVzcGFjZTtcbiAgICAgICAgcHJvcHMubmFtZXNwYWNlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGZpeCBjdXJzb3IgYnVnXG4gICAgaWYgKHRhZyA9PT0gJ0lOUFVUJyAmJlxuICAgICAgICAhbmFtZXNwYWNlICYmXG4gICAgICAgIHByb3BzLmhhc093blByb3BlcnR5KCd2YWx1ZScpICYmXG4gICAgICAgIHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgIWlzSG9vayhwcm9wcy52YWx1ZSlcbiAgICApIHtcbiAgICAgICAgcHJvcHMudmFsdWUgPSBzb2Z0U2V0SG9vayhwcm9wcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtUHJvcGVydGllcyhwcm9wcyk7XG5cbiAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCAmJiBjaGlsZHJlbiAhPT0gbnVsbCkge1xuICAgICAgICBhZGRDaGlsZChjaGlsZHJlbiwgY2hpbGROb2RlcywgdGFnLCBwcm9wcyk7XG4gICAgfVxuXG5cbiAgICByZXR1cm4gbmV3IFZOb2RlKHRhZywgcHJvcHMsIGNoaWxkTm9kZXMsIGtleSwgbmFtZXNwYWNlKTtcbn1cblxuZnVuY3Rpb24gYWRkQ2hpbGQoYywgY2hpbGROb2RlcywgdGFnLCBwcm9wcykge1xuICAgIGlmICh0eXBlb2YgYyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2hpbGROb2Rlcy5wdXNoKG5ldyBWVGV4dChjKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY2hpbGROb2Rlcy5wdXNoKG5ldyBWVGV4dChTdHJpbmcoYykpKTtcbiAgICB9IGVsc2UgaWYgKGlzQ2hpbGQoYykpIHtcbiAgICAgICAgY2hpbGROb2Rlcy5wdXNoKGMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFkZENoaWxkKGNbaV0sIGNoaWxkTm9kZXMsIHRhZywgcHJvcHMpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChjID09PSBudWxsIHx8IGMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgVW5leHBlY3RlZFZpcnR1YWxFbGVtZW50KHtcbiAgICAgICAgICAgIGZvcmVpZ25PYmplY3Q6IGMsXG4gICAgICAgICAgICBwYXJlbnRWbm9kZToge1xuICAgICAgICAgICAgICAgIHRhZ05hbWU6IHRhZyxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wc1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVByb3BlcnRpZXMocHJvcHMpIHtcbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBwcm9wcykge1xuICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICAgICAgICAgIGlmIChpc0hvb2sodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwcm9wTmFtZS5zdWJzdHIoMCwgMykgPT09ICdldi0nKSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIGV2LWZvbyBzdXBwb3J0XG4gICAgICAgICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZXZIb29rKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNDaGlsZCh4KSB7XG4gICAgcmV0dXJuIGlzVk5vZGUoeCkgfHwgaXNWVGV4dCh4KSB8fCBpc1dpZGdldCh4KSB8fCBpc1ZUaHVuayh4KTtcbn1cblxuZnVuY3Rpb24gaXNDaGlsZHJlbih4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJyB8fCBpc0FycmF5KHgpIHx8IGlzQ2hpbGQoeCk7XG59XG5cbmZ1bmN0aW9uIFVuZXhwZWN0ZWRWaXJ0dWFsRWxlbWVudChkYXRhKSB7XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcigpO1xuXG4gICAgZXJyLnR5cGUgPSAndmlydHVhbC1oeXBlcnNjcmlwdC51bmV4cGVjdGVkLnZpcnR1YWwtZWxlbWVudCc7XG4gICAgZXJyLm1lc3NhZ2UgPSAnVW5leHBlY3RlZCB2aXJ0dWFsIGNoaWxkIHBhc3NlZCB0byBoKCkuXFxuJyArXG4gICAgICAgICdFeHBlY3RlZCBhIFZOb2RlIC8gVnRodW5rIC8gVldpZGdldCAvIHN0cmluZyBidXQ6XFxuJyArXG4gICAgICAgICdnb3Q6XFxuJyArXG4gICAgICAgIGVycm9yU3RyaW5nKGRhdGEuZm9yZWlnbk9iamVjdCkgK1xuICAgICAgICAnLlxcbicgK1xuICAgICAgICAnVGhlIHBhcmVudCB2bm9kZSBpczpcXG4nICtcbiAgICAgICAgZXJyb3JTdHJpbmcoZGF0YS5wYXJlbnRWbm9kZSlcbiAgICAgICAgJ1xcbicgK1xuICAgICAgICAnU3VnZ2VzdGVkIGZpeDogY2hhbmdlIHlvdXIgYGgoLi4uLCBbIC4uLiBdKWAgY2FsbHNpdGUuJztcbiAgICBlcnIuZm9yZWlnbk9iamVjdCA9IGRhdGEuZm9yZWlnbk9iamVjdDtcbiAgICBlcnIucGFyZW50Vm5vZGUgPSBkYXRhLnBhcmVudFZub2RlO1xuXG4gICAgcmV0dXJuIGVycjtcbn1cblxuZnVuY3Rpb24gZXJyb3JTdHJpbmcob2JqKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgJyAgICAnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcob2JqKTtcbiAgICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBzcGxpdCA9IHJlcXVpcmUoJ2Jyb3dzZXItc3BsaXQnKTtcblxudmFyIGNsYXNzSWRTcGxpdCA9IC8oW1xcLiNdP1thLXpBLVowLTlcXHUwMDdGLVxcdUZGRkZfOi1dKykvO1xudmFyIG5vdENsYXNzSWQgPSAvXlxcLnwjLztcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZVRhZztcblxuZnVuY3Rpb24gcGFyc2VUYWcodGFnLCBwcm9wcykge1xuICAgIGlmICghdGFnKSB7XG4gICAgICAgIHJldHVybiAnRElWJztcbiAgICB9XG5cbiAgICB2YXIgbm9JZCA9ICEocHJvcHMuaGFzT3duUHJvcGVydHkoJ2lkJykpO1xuXG4gICAgdmFyIHRhZ1BhcnRzID0gc3BsaXQodGFnLCBjbGFzc0lkU3BsaXQpO1xuICAgIHZhciB0YWdOYW1lID0gbnVsbDtcblxuICAgIGlmIChub3RDbGFzc0lkLnRlc3QodGFnUGFydHNbMV0pKSB7XG4gICAgICAgIHRhZ05hbWUgPSAnRElWJztcbiAgICB9XG5cbiAgICB2YXIgY2xhc3NlcywgcGFydCwgdHlwZSwgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0YWdQYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBwYXJ0ID0gdGFnUGFydHNbaV07XG5cbiAgICAgICAgaWYgKCFwYXJ0KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHR5cGUgPSBwYXJ0LmNoYXJBdCgwKTtcblxuICAgICAgICBpZiAoIXRhZ05hbWUpIHtcbiAgICAgICAgICAgIHRhZ05hbWUgPSBwYXJ0O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICcuJykge1xuICAgICAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMgfHwgW107XG4gICAgICAgICAgICBjbGFzc2VzLnB1c2gocGFydC5zdWJzdHJpbmcoMSwgcGFydC5sZW5ndGgpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnIycgJiYgbm9JZCkge1xuICAgICAgICAgICAgcHJvcHMuaWQgPSBwYXJ0LnN1YnN0cmluZygxLCBwYXJ0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xhc3Nlcykge1xuICAgICAgICBpZiAocHJvcHMuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBjbGFzc2VzLnB1c2gocHJvcHMuY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbignICcpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wcy5uYW1lc3BhY2UgPyB0YWdOYW1lIDogdGFnTmFtZS50b1VwcGVyQ2FzZSgpO1xufVxuIiwidmFyIGlzVk5vZGUgPSByZXF1aXJlKFwiLi9pcy12bm9kZVwiKVxudmFyIGlzVlRleHQgPSByZXF1aXJlKFwiLi9pcy12dGV4dFwiKVxudmFyIGlzV2lkZ2V0ID0gcmVxdWlyZShcIi4vaXMtd2lkZ2V0XCIpXG52YXIgaXNUaHVuayA9IHJlcXVpcmUoXCIuL2lzLXRodW5rXCIpXG5cbm1vZHVsZS5leHBvcnRzID0gaGFuZGxlVGh1bmtcblxuZnVuY3Rpb24gaGFuZGxlVGh1bmsoYSwgYikge1xuICAgIHZhciByZW5kZXJlZEEgPSBhXG4gICAgdmFyIHJlbmRlcmVkQiA9IGJcblxuICAgIGlmIChpc1RodW5rKGIpKSB7XG4gICAgICAgIHJlbmRlcmVkQiA9IHJlbmRlclRodW5rKGIsIGEpXG4gICAgfVxuXG4gICAgaWYgKGlzVGh1bmsoYSkpIHtcbiAgICAgICAgcmVuZGVyZWRBID0gcmVuZGVyVGh1bmsoYSwgbnVsbClcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhOiByZW5kZXJlZEEsXG4gICAgICAgIGI6IHJlbmRlcmVkQlxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyVGh1bmsodGh1bmssIHByZXZpb3VzKSB7XG4gICAgdmFyIHJlbmRlcmVkVGh1bmsgPSB0aHVuay52bm9kZVxuXG4gICAgaWYgKCFyZW5kZXJlZFRodW5rKSB7XG4gICAgICAgIHJlbmRlcmVkVGh1bmsgPSB0aHVuay52bm9kZSA9IHRodW5rLnJlbmRlcihwcmV2aW91cylcbiAgICB9XG5cbiAgICBpZiAoIShpc1ZOb2RlKHJlbmRlcmVkVGh1bmspIHx8XG4gICAgICAgICAgICBpc1ZUZXh0KHJlbmRlcmVkVGh1bmspIHx8XG4gICAgICAgICAgICBpc1dpZGdldChyZW5kZXJlZFRodW5rKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGh1bmsgZGlkIG5vdCByZXR1cm4gYSB2YWxpZCBub2RlXCIpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJlZFRodW5rXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzVGh1bmtcclxuXHJcbmZ1bmN0aW9uIGlzVGh1bmsodCkge1xyXG4gICAgcmV0dXJuIHQgJiYgdC50eXBlID09PSBcIlRodW5rXCJcclxufVxyXG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzSG9va1xuXG5mdW5jdGlvbiBpc0hvb2soaG9vaykge1xuICAgIHJldHVybiBob29rICYmXG4gICAgICAodHlwZW9mIGhvb2suaG9vayA9PT0gXCJmdW5jdGlvblwiICYmICFob29rLmhhc093blByb3BlcnR5KFwiaG9va1wiKSB8fFxuICAgICAgIHR5cGVvZiBob29rLnVuaG9vayA9PT0gXCJmdW5jdGlvblwiICYmICFob29rLmhhc093blByb3BlcnR5KFwidW5ob29rXCIpKVxufVxuIiwidmFyIHZlcnNpb24gPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpXG5cbm1vZHVsZS5leHBvcnRzID0gaXNWaXJ0dWFsTm9kZVxuXG5mdW5jdGlvbiBpc1ZpcnR1YWxOb2RlKHgpIHtcbiAgICByZXR1cm4geCAmJiB4LnR5cGUgPT09IFwiVmlydHVhbE5vZGVcIiAmJiB4LnZlcnNpb24gPT09IHZlcnNpb25cbn1cbiIsInZhciB2ZXJzaW9uID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVmlydHVhbFRleHRcblxuZnVuY3Rpb24gaXNWaXJ0dWFsVGV4dCh4KSB7XG4gICAgcmV0dXJuIHggJiYgeC50eXBlID09PSBcIlZpcnR1YWxUZXh0XCIgJiYgeC52ZXJzaW9uID09PSB2ZXJzaW9uXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzV2lkZ2V0XG5cbmZ1bmN0aW9uIGlzV2lkZ2V0KHcpIHtcbiAgICByZXR1cm4gdyAmJiB3LnR5cGUgPT09IFwiV2lkZ2V0XCJcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gXCIyXCJcbiIsInZhciB2ZXJzaW9uID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKVxudmFyIGlzVk5vZGUgPSByZXF1aXJlKFwiLi9pcy12bm9kZVwiKVxudmFyIGlzV2lkZ2V0ID0gcmVxdWlyZShcIi4vaXMtd2lkZ2V0XCIpXG52YXIgaXNUaHVuayA9IHJlcXVpcmUoXCIuL2lzLXRodW5rXCIpXG52YXIgaXNWSG9vayA9IHJlcXVpcmUoXCIuL2lzLXZob29rXCIpXG5cbm1vZHVsZS5leHBvcnRzID0gVmlydHVhbE5vZGVcblxudmFyIG5vUHJvcGVydGllcyA9IHt9XG52YXIgbm9DaGlsZHJlbiA9IFtdXG5cbmZ1bmN0aW9uIFZpcnR1YWxOb2RlKHRhZ05hbWUsIHByb3BlcnRpZXMsIGNoaWxkcmVuLCBrZXksIG5hbWVzcGFjZSkge1xuICAgIHRoaXMudGFnTmFtZSA9IHRhZ05hbWVcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IG5vUHJvcGVydGllc1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBub0NoaWxkcmVuXG4gICAgdGhpcy5rZXkgPSBrZXkgIT0gbnVsbCA/IFN0cmluZyhrZXkpIDogdW5kZWZpbmVkXG4gICAgdGhpcy5uYW1lc3BhY2UgPSAodHlwZW9mIG5hbWVzcGFjZSA9PT0gXCJzdHJpbmdcIikgPyBuYW1lc3BhY2UgOiBudWxsXG5cbiAgICB2YXIgY291bnQgPSAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSB8fCAwXG4gICAgdmFyIGRlc2NlbmRhbnRzID0gMFxuICAgIHZhciBoYXNXaWRnZXRzID0gZmFsc2VcbiAgICB2YXIgaGFzVGh1bmtzID0gZmFsc2VcbiAgICB2YXIgZGVzY2VuZGFudEhvb2tzID0gZmFsc2VcbiAgICB2YXIgaG9va3NcblxuICAgIGZvciAodmFyIHByb3BOYW1lIGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW3Byb3BOYW1lXVxuICAgICAgICAgICAgaWYgKGlzVkhvb2socHJvcGVydHkpICYmIHByb3BlcnR5LnVuaG9vaykge1xuICAgICAgICAgICAgICAgIGlmICghaG9va3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaG9va3MgPSB7fVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGhvb2tzW3Byb3BOYW1lXSA9IHByb3BlcnR5XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV1cbiAgICAgICAgaWYgKGlzVk5vZGUoY2hpbGQpKSB7XG4gICAgICAgICAgICBkZXNjZW5kYW50cyArPSBjaGlsZC5jb3VudCB8fCAwXG5cbiAgICAgICAgICAgIGlmICghaGFzV2lkZ2V0cyAmJiBjaGlsZC5oYXNXaWRnZXRzKSB7XG4gICAgICAgICAgICAgICAgaGFzV2lkZ2V0cyA9IHRydWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFoYXNUaHVua3MgJiYgY2hpbGQuaGFzVGh1bmtzKSB7XG4gICAgICAgICAgICAgICAgaGFzVGh1bmtzID0gdHJ1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWRlc2NlbmRhbnRIb29rcyAmJiAoY2hpbGQuaG9va3MgfHwgY2hpbGQuZGVzY2VuZGFudEhvb2tzKSkge1xuICAgICAgICAgICAgICAgIGRlc2NlbmRhbnRIb29rcyA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghaGFzV2lkZ2V0cyAmJiBpc1dpZGdldChjaGlsZCkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGQuZGVzdHJveSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgaGFzV2lkZ2V0cyA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghaGFzVGh1bmtzICYmIGlzVGh1bmsoY2hpbGQpKSB7XG4gICAgICAgICAgICBoYXNUaHVua3MgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb3VudCA9IGNvdW50ICsgZGVzY2VuZGFudHNcbiAgICB0aGlzLmhhc1dpZGdldHMgPSBoYXNXaWRnZXRzXG4gICAgdGhpcy5oYXNUaHVua3MgPSBoYXNUaHVua3NcbiAgICB0aGlzLmhvb2tzID0gaG9va3NcbiAgICB0aGlzLmRlc2NlbmRhbnRIb29rcyA9IGRlc2NlbmRhbnRIb29rc1xufVxuXG5WaXJ0dWFsTm9kZS5wcm90b3R5cGUudmVyc2lvbiA9IHZlcnNpb25cblZpcnR1YWxOb2RlLnByb3RvdHlwZS50eXBlID0gXCJWaXJ0dWFsTm9kZVwiXG4iLCJ2YXIgdmVyc2lvbiA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIilcblxuVmlydHVhbFBhdGNoLk5PTkUgPSAwXG5WaXJ0dWFsUGF0Y2guVlRFWFQgPSAxXG5WaXJ0dWFsUGF0Y2guVk5PREUgPSAyXG5WaXJ0dWFsUGF0Y2guV0lER0VUID0gM1xuVmlydHVhbFBhdGNoLlBST1BTID0gNFxuVmlydHVhbFBhdGNoLk9SREVSID0gNVxuVmlydHVhbFBhdGNoLklOU0VSVCA9IDZcblZpcnR1YWxQYXRjaC5SRU1PVkUgPSA3XG5WaXJ0dWFsUGF0Y2guVEhVTksgPSA4XG5cbm1vZHVsZS5leHBvcnRzID0gVmlydHVhbFBhdGNoXG5cbmZ1bmN0aW9uIFZpcnR1YWxQYXRjaCh0eXBlLCB2Tm9kZSwgcGF0Y2gpIHtcbiAgICB0aGlzLnR5cGUgPSBOdW1iZXIodHlwZSlcbiAgICB0aGlzLnZOb2RlID0gdk5vZGVcbiAgICB0aGlzLnBhdGNoID0gcGF0Y2hcbn1cblxuVmlydHVhbFBhdGNoLnByb3RvdHlwZS52ZXJzaW9uID0gdmVyc2lvblxuVmlydHVhbFBhdGNoLnByb3RvdHlwZS50eXBlID0gXCJWaXJ0dWFsUGF0Y2hcIlxuIiwidmFyIHZlcnNpb24gPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpXG5cbm1vZHVsZS5leHBvcnRzID0gVmlydHVhbFRleHRcblxuZnVuY3Rpb24gVmlydHVhbFRleHQodGV4dCkge1xuICAgIHRoaXMudGV4dCA9IFN0cmluZyh0ZXh0KVxufVxuXG5WaXJ0dWFsVGV4dC5wcm90b3R5cGUudmVyc2lvbiA9IHZlcnNpb25cblZpcnR1YWxUZXh0LnByb3RvdHlwZS50eXBlID0gXCJWaXJ0dWFsVGV4dFwiXG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKFwiaXMtb2JqZWN0XCIpXG52YXIgaXNIb29rID0gcmVxdWlyZShcIi4uL3Zub2RlL2lzLXZob29rXCIpXG5cbm1vZHVsZS5leHBvcnRzID0gZGlmZlByb3BzXG5cbmZ1bmN0aW9uIGRpZmZQcm9wcyhhLCBiKSB7XG4gICAgdmFyIGRpZmZcblxuICAgIGZvciAodmFyIGFLZXkgaW4gYSkge1xuICAgICAgICBpZiAoIShhS2V5IGluIGIpKSB7XG4gICAgICAgICAgICBkaWZmID0gZGlmZiB8fCB7fVxuICAgICAgICAgICAgZGlmZlthS2V5XSA9IHVuZGVmaW5lZFxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFWYWx1ZSA9IGFbYUtleV1cbiAgICAgICAgdmFyIGJWYWx1ZSA9IGJbYUtleV1cblxuICAgICAgICBpZiAoYVZhbHVlID09PSBiVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoYVZhbHVlKSAmJiBpc09iamVjdChiVmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoZ2V0UHJvdG90eXBlKGJWYWx1ZSkgIT09IGdldFByb3RvdHlwZShhVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiA9IGRpZmYgfHwge31cbiAgICAgICAgICAgICAgICBkaWZmW2FLZXldID0gYlZhbHVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSG9vayhiVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgIGRpZmYgPSBkaWZmIHx8IHt9XG4gICAgICAgICAgICAgICAgIGRpZmZbYUtleV0gPSBiVmFsdWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIG9iamVjdERpZmYgPSBkaWZmUHJvcHMoYVZhbHVlLCBiVmFsdWUpXG4gICAgICAgICAgICAgICAgaWYgKG9iamVjdERpZmYpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlmZiA9IGRpZmYgfHwge31cbiAgICAgICAgICAgICAgICAgICAgZGlmZlthS2V5XSA9IG9iamVjdERpZmZcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaWZmID0gZGlmZiB8fCB7fVxuICAgICAgICAgICAgZGlmZlthS2V5XSA9IGJWYWx1ZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgYktleSBpbiBiKSB7XG4gICAgICAgIGlmICghKGJLZXkgaW4gYSkpIHtcbiAgICAgICAgICAgIGRpZmYgPSBkaWZmIHx8IHt9XG4gICAgICAgICAgICBkaWZmW2JLZXldID0gYltiS2V5XVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZmZcbn1cblxuZnVuY3Rpb24gZ2V0UHJvdG90eXBlKHZhbHVlKSB7XG4gIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKVxuICB9IGVsc2UgaWYgKHZhbHVlLl9fcHJvdG9fXykge1xuICAgIHJldHVybiB2YWx1ZS5fX3Byb3RvX19cbiAgfSBlbHNlIGlmICh2YWx1ZS5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiB2YWx1ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfVxufVxuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKFwieC1pcy1hcnJheVwiKVxuXG52YXIgVlBhdGNoID0gcmVxdWlyZShcIi4uL3Zub2RlL3ZwYXRjaFwiKVxudmFyIGlzVk5vZGUgPSByZXF1aXJlKFwiLi4vdm5vZGUvaXMtdm5vZGVcIilcbnZhciBpc1ZUZXh0ID0gcmVxdWlyZShcIi4uL3Zub2RlL2lzLXZ0ZXh0XCIpXG52YXIgaXNXaWRnZXQgPSByZXF1aXJlKFwiLi4vdm5vZGUvaXMtd2lkZ2V0XCIpXG52YXIgaXNUaHVuayA9IHJlcXVpcmUoXCIuLi92bm9kZS9pcy10aHVua1wiKVxudmFyIGhhbmRsZVRodW5rID0gcmVxdWlyZShcIi4uL3Zub2RlL2hhbmRsZS10aHVua1wiKVxuXG52YXIgZGlmZlByb3BzID0gcmVxdWlyZShcIi4vZGlmZi1wcm9wc1wiKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRpZmZcblxuZnVuY3Rpb24gZGlmZihhLCBiKSB7XG4gICAgdmFyIHBhdGNoID0geyBhOiBhIH1cbiAgICB3YWxrKGEsIGIsIHBhdGNoLCAwKVxuICAgIHJldHVybiBwYXRjaFxufVxuXG5mdW5jdGlvbiB3YWxrKGEsIGIsIHBhdGNoLCBpbmRleCkge1xuICAgIGlmIChhID09PSBiKSB7XG4gICAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBhcHBseSA9IHBhdGNoW2luZGV4XVxuICAgIHZhciBhcHBseUNsZWFyID0gZmFsc2VcblxuICAgIGlmIChpc1RodW5rKGEpIHx8IGlzVGh1bmsoYikpIHtcbiAgICAgICAgdGh1bmtzKGEsIGIsIHBhdGNoLCBpbmRleClcbiAgICB9IGVsc2UgaWYgKGIgPT0gbnVsbCkge1xuXG4gICAgICAgIC8vIElmIGEgaXMgYSB3aWRnZXQgd2Ugd2lsbCBhZGQgYSByZW1vdmUgcGF0Y2ggZm9yIGl0XG4gICAgICAgIC8vIE90aGVyd2lzZSBhbnkgY2hpbGQgd2lkZ2V0cy9ob29rcyBtdXN0IGJlIGRlc3Ryb3llZC5cbiAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBhZGRpbmcgdHdvIHJlbW92ZSBwYXRjaGVzIGZvciBhIHdpZGdldC5cbiAgICAgICAgaWYgKCFpc1dpZGdldChhKSkge1xuICAgICAgICAgICAgY2xlYXJTdGF0ZShhLCBwYXRjaCwgaW5kZXgpXG4gICAgICAgICAgICBhcHBseSA9IHBhdGNoW2luZGV4XVxuICAgICAgICB9XG5cbiAgICAgICAgYXBwbHkgPSBhcHBlbmRQYXRjaChhcHBseSwgbmV3IFZQYXRjaChWUGF0Y2guUkVNT1ZFLCBhLCBiKSlcbiAgICB9IGVsc2UgaWYgKGlzVk5vZGUoYikpIHtcbiAgICAgICAgaWYgKGlzVk5vZGUoYSkpIHtcbiAgICAgICAgICAgIGlmIChhLnRhZ05hbWUgPT09IGIudGFnTmFtZSAmJlxuICAgICAgICAgICAgICAgIGEubmFtZXNwYWNlID09PSBiLm5hbWVzcGFjZSAmJlxuICAgICAgICAgICAgICAgIGEua2V5ID09PSBiLmtleSkge1xuICAgICAgICAgICAgICAgIHZhciBwcm9wc1BhdGNoID0gZGlmZlByb3BzKGEucHJvcGVydGllcywgYi5wcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgIGlmIChwcm9wc1BhdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5ID0gYXBwZW5kUGF0Y2goYXBwbHksXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVlBhdGNoKFZQYXRjaC5QUk9QUywgYSwgcHJvcHNQYXRjaCkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFwcGx5ID0gZGlmZkNoaWxkcmVuKGEsIGIsIHBhdGNoLCBhcHBseSwgaW5kZXgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFwcGx5ID0gYXBwZW5kUGF0Y2goYXBwbHksIG5ldyBWUGF0Y2goVlBhdGNoLlZOT0RFLCBhLCBiKSlcbiAgICAgICAgICAgICAgICBhcHBseUNsZWFyID0gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXBwbHkgPSBhcHBlbmRQYXRjaChhcHBseSwgbmV3IFZQYXRjaChWUGF0Y2guVk5PREUsIGEsIGIpKVxuICAgICAgICAgICAgYXBwbHlDbGVhciA9IHRydWVcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNWVGV4dChiKSkge1xuICAgICAgICBpZiAoIWlzVlRleHQoYSkpIHtcbiAgICAgICAgICAgIGFwcGx5ID0gYXBwZW5kUGF0Y2goYXBwbHksIG5ldyBWUGF0Y2goVlBhdGNoLlZURVhULCBhLCBiKSlcbiAgICAgICAgICAgIGFwcGx5Q2xlYXIgPSB0cnVlXG4gICAgICAgIH0gZWxzZSBpZiAoYS50ZXh0ICE9PSBiLnRleHQpIHtcbiAgICAgICAgICAgIGFwcGx5ID0gYXBwZW5kUGF0Y2goYXBwbHksIG5ldyBWUGF0Y2goVlBhdGNoLlZURVhULCBhLCBiKSlcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNXaWRnZXQoYikpIHtcbiAgICAgICAgaWYgKCFpc1dpZGdldChhKSkge1xuICAgICAgICAgICAgYXBwbHlDbGVhciA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcGx5ID0gYXBwZW5kUGF0Y2goYXBwbHksIG5ldyBWUGF0Y2goVlBhdGNoLldJREdFVCwgYSwgYikpXG4gICAgfVxuXG4gICAgaWYgKGFwcGx5KSB7XG4gICAgICAgIHBhdGNoW2luZGV4XSA9IGFwcGx5XG4gICAgfVxuXG4gICAgaWYgKGFwcGx5Q2xlYXIpIHtcbiAgICAgICAgY2xlYXJTdGF0ZShhLCBwYXRjaCwgaW5kZXgpXG4gICAgfVxufVxuXG5mdW5jdGlvbiBkaWZmQ2hpbGRyZW4oYSwgYiwgcGF0Y2gsIGFwcGx5LCBpbmRleCkge1xuICAgIHZhciBhQ2hpbGRyZW4gPSBhLmNoaWxkcmVuXG4gICAgdmFyIG9yZGVyZWRTZXQgPSByZW9yZGVyKGFDaGlsZHJlbiwgYi5jaGlsZHJlbilcbiAgICB2YXIgYkNoaWxkcmVuID0gb3JkZXJlZFNldC5jaGlsZHJlblxuXG4gICAgdmFyIGFMZW4gPSBhQ2hpbGRyZW4ubGVuZ3RoXG4gICAgdmFyIGJMZW4gPSBiQ2hpbGRyZW4ubGVuZ3RoXG4gICAgdmFyIGxlbiA9IGFMZW4gPiBiTGVuID8gYUxlbiA6IGJMZW5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmFyIGxlZnROb2RlID0gYUNoaWxkcmVuW2ldXG4gICAgICAgIHZhciByaWdodE5vZGUgPSBiQ2hpbGRyZW5baV1cbiAgICAgICAgaW5kZXggKz0gMVxuXG4gICAgICAgIGlmICghbGVmdE5vZGUpIHtcbiAgICAgICAgICAgIGlmIChyaWdodE5vZGUpIHtcbiAgICAgICAgICAgICAgICAvLyBFeGNlc3Mgbm9kZXMgaW4gYiBuZWVkIHRvIGJlIGFkZGVkXG4gICAgICAgICAgICAgICAgYXBwbHkgPSBhcHBlbmRQYXRjaChhcHBseSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IFZQYXRjaChWUGF0Y2guSU5TRVJULCBudWxsLCByaWdodE5vZGUpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2FsayhsZWZ0Tm9kZSwgcmlnaHROb2RlLCBwYXRjaCwgaW5kZXgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNWTm9kZShsZWZ0Tm9kZSkgJiYgbGVmdE5vZGUuY291bnQpIHtcbiAgICAgICAgICAgIGluZGV4ICs9IGxlZnROb2RlLmNvdW50XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3JkZXJlZFNldC5tb3Zlcykge1xuICAgICAgICAvLyBSZW9yZGVyIG5vZGVzIGxhc3RcbiAgICAgICAgYXBwbHkgPSBhcHBlbmRQYXRjaChhcHBseSwgbmV3IFZQYXRjaChcbiAgICAgICAgICAgIFZQYXRjaC5PUkRFUixcbiAgICAgICAgICAgIGEsXG4gICAgICAgICAgICBvcmRlcmVkU2V0Lm1vdmVzXG4gICAgICAgICkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGFwcGx5XG59XG5cbmZ1bmN0aW9uIGNsZWFyU3RhdGUodk5vZGUsIHBhdGNoLCBpbmRleCkge1xuICAgIC8vIFRPRE86IE1ha2UgdGhpcyBhIHNpbmdsZSB3YWxrLCBub3QgdHdvXG4gICAgdW5ob29rKHZOb2RlLCBwYXRjaCwgaW5kZXgpXG4gICAgZGVzdHJveVdpZGdldHModk5vZGUsIHBhdGNoLCBpbmRleClcbn1cblxuLy8gUGF0Y2ggcmVjb3JkcyBmb3IgYWxsIGRlc3Ryb3llZCB3aWRnZXRzIG11c3QgYmUgYWRkZWQgYmVjYXVzZSB3ZSBuZWVkXG4vLyBhIERPTSBub2RlIHJlZmVyZW5jZSBmb3IgdGhlIGRlc3Ryb3kgZnVuY3Rpb25cbmZ1bmN0aW9uIGRlc3Ryb3lXaWRnZXRzKHZOb2RlLCBwYXRjaCwgaW5kZXgpIHtcbiAgICBpZiAoaXNXaWRnZXQodk5vZGUpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygdk5vZGUuZGVzdHJveSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBwYXRjaFtpbmRleF0gPSBhcHBlbmRQYXRjaChcbiAgICAgICAgICAgICAgICBwYXRjaFtpbmRleF0sXG4gICAgICAgICAgICAgICAgbmV3IFZQYXRjaChWUGF0Y2guUkVNT1ZFLCB2Tm9kZSwgbnVsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNWTm9kZSh2Tm9kZSkgJiYgKHZOb2RlLmhhc1dpZGdldHMgfHwgdk5vZGUuaGFzVGh1bmtzKSkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB2Tm9kZS5jaGlsZHJlblxuICAgICAgICB2YXIgbGVuID0gY2hpbGRyZW4ubGVuZ3RoXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldXG4gICAgICAgICAgICBpbmRleCArPSAxXG5cbiAgICAgICAgICAgIGRlc3Ryb3lXaWRnZXRzKGNoaWxkLCBwYXRjaCwgaW5kZXgpXG5cbiAgICAgICAgICAgIGlmIChpc1ZOb2RlKGNoaWxkKSAmJiBjaGlsZC5jb3VudCkge1xuICAgICAgICAgICAgICAgIGluZGV4ICs9IGNoaWxkLmNvdW50XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVGh1bmsodk5vZGUpKSB7XG4gICAgICAgIHRodW5rcyh2Tm9kZSwgbnVsbCwgcGF0Y2gsIGluZGV4KVxuICAgIH1cbn1cblxuLy8gQ3JlYXRlIGEgc3ViLXBhdGNoIGZvciB0aHVua3NcbmZ1bmN0aW9uIHRodW5rcyhhLCBiLCBwYXRjaCwgaW5kZXgpIHtcbiAgICB2YXIgbm9kZXMgPSBoYW5kbGVUaHVuayhhLCBiKVxuICAgIHZhciB0aHVua1BhdGNoID0gZGlmZihub2Rlcy5hLCBub2Rlcy5iKVxuICAgIGlmIChoYXNQYXRjaGVzKHRodW5rUGF0Y2gpKSB7XG4gICAgICAgIHBhdGNoW2luZGV4XSA9IG5ldyBWUGF0Y2goVlBhdGNoLlRIVU5LLCBudWxsLCB0aHVua1BhdGNoKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaGFzUGF0Y2hlcyhwYXRjaCkge1xuICAgIGZvciAodmFyIGluZGV4IGluIHBhdGNoKSB7XG4gICAgICAgIGlmIChpbmRleCAhPT0gXCJhXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gRXhlY3V0ZSBob29rcyB3aGVuIHR3byBub2RlcyBhcmUgaWRlbnRpY2FsXG5mdW5jdGlvbiB1bmhvb2sodk5vZGUsIHBhdGNoLCBpbmRleCkge1xuICAgIGlmIChpc1ZOb2RlKHZOb2RlKSkge1xuICAgICAgICBpZiAodk5vZGUuaG9va3MpIHtcbiAgICAgICAgICAgIHBhdGNoW2luZGV4XSA9IGFwcGVuZFBhdGNoKFxuICAgICAgICAgICAgICAgIHBhdGNoW2luZGV4XSxcbiAgICAgICAgICAgICAgICBuZXcgVlBhdGNoKFxuICAgICAgICAgICAgICAgICAgICBWUGF0Y2guUFJPUFMsXG4gICAgICAgICAgICAgICAgICAgIHZOb2RlLFxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWRLZXlzKHZOb2RlLmhvb2tzKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2Tm9kZS5kZXNjZW5kYW50SG9va3MgfHwgdk5vZGUuaGFzVGh1bmtzKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB2Tm9kZS5jaGlsZHJlblxuICAgICAgICAgICAgdmFyIGxlbiA9IGNoaWxkcmVuLmxlbmd0aFxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMVxuXG4gICAgICAgICAgICAgICAgdW5ob29rKGNoaWxkLCBwYXRjaCwgaW5kZXgpXG5cbiAgICAgICAgICAgICAgICBpZiAoaXNWTm9kZShjaGlsZCkgJiYgY2hpbGQuY291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gY2hpbGQuY291bnRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVGh1bmsodk5vZGUpKSB7XG4gICAgICAgIHRodW5rcyh2Tm9kZSwgbnVsbCwgcGF0Y2gsIGluZGV4KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gdW5kZWZpbmVkS2V5cyhvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge31cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbi8vIExpc3QgZGlmZiwgbmFpdmUgbGVmdCB0byByaWdodCByZW9yZGVyaW5nXG5mdW5jdGlvbiByZW9yZGVyKGFDaGlsZHJlbiwgYkNoaWxkcmVuKSB7XG4gICAgLy8gTyhNKSB0aW1lLCBPKE0pIG1lbW9yeVxuICAgIHZhciBiQ2hpbGRJbmRleCA9IGtleUluZGV4KGJDaGlsZHJlbilcbiAgICB2YXIgYktleXMgPSBiQ2hpbGRJbmRleC5rZXlzXG4gICAgdmFyIGJGcmVlID0gYkNoaWxkSW5kZXguZnJlZVxuXG4gICAgaWYgKGJGcmVlLmxlbmd0aCA9PT0gYkNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2hpbGRyZW46IGJDaGlsZHJlbixcbiAgICAgICAgICAgIG1vdmVzOiBudWxsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPKE4pIHRpbWUsIE8oTikgbWVtb3J5XG4gICAgdmFyIGFDaGlsZEluZGV4ID0ga2V5SW5kZXgoYUNoaWxkcmVuKVxuICAgIHZhciBhS2V5cyA9IGFDaGlsZEluZGV4LmtleXNcbiAgICB2YXIgYUZyZWUgPSBhQ2hpbGRJbmRleC5mcmVlXG5cbiAgICBpZiAoYUZyZWUubGVuZ3RoID09PSBhQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjaGlsZHJlbjogYkNoaWxkcmVuLFxuICAgICAgICAgICAgbW92ZXM6IG51bGxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE8oTUFYKE4sIE0pKSBtZW1vcnlcbiAgICB2YXIgbmV3Q2hpbGRyZW4gPSBbXVxuXG4gICAgdmFyIGZyZWVJbmRleCA9IDBcbiAgICB2YXIgZnJlZUNvdW50ID0gYkZyZWUubGVuZ3RoXG4gICAgdmFyIGRlbGV0ZWRJdGVtcyA9IDBcblxuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBhIGFuZCBtYXRjaCBhIG5vZGUgaW4gYlxuICAgIC8vIE8oTikgdGltZSxcbiAgICBmb3IgKHZhciBpID0gMCA7IGkgPCBhQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGFJdGVtID0gYUNoaWxkcmVuW2ldXG4gICAgICAgIHZhciBpdGVtSW5kZXhcblxuICAgICAgICBpZiAoYUl0ZW0ua2V5KSB7XG4gICAgICAgICAgICBpZiAoYktleXMuaGFzT3duUHJvcGVydHkoYUl0ZW0ua2V5KSkge1xuICAgICAgICAgICAgICAgIC8vIE1hdGNoIHVwIHRoZSBvbGQga2V5c1xuICAgICAgICAgICAgICAgIGl0ZW1JbmRleCA9IGJLZXlzW2FJdGVtLmtleV1cbiAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNoKGJDaGlsZHJlbltpdGVtSW5kZXhdKVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBvbGQga2V5ZWQgaXRlbXNcbiAgICAgICAgICAgICAgICBpdGVtSW5kZXggPSBpIC0gZGVsZXRlZEl0ZW1zKytcbiAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNoKG51bGwpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBNYXRjaCB0aGUgaXRlbSBpbiBhIHdpdGggdGhlIG5leHQgZnJlZSBpdGVtIGluIGJcbiAgICAgICAgICAgIGlmIChmcmVlSW5kZXggPCBmcmVlQ291bnQpIHtcbiAgICAgICAgICAgICAgICBpdGVtSW5kZXggPSBiRnJlZVtmcmVlSW5kZXgrK11cbiAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNoKGJDaGlsZHJlbltpdGVtSW5kZXhdKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUaGVyZSBhcmUgbm8gZnJlZSBpdGVtcyBpbiBiIHRvIG1hdGNoIHdpdGhcbiAgICAgICAgICAgICAgICAvLyB0aGUgZnJlZSBpdGVtcyBpbiBhLCBzbyB0aGUgZXh0cmEgZnJlZSBub2Rlc1xuICAgICAgICAgICAgICAgIC8vIGFyZSBkZWxldGVkLlxuICAgICAgICAgICAgICAgIGl0ZW1JbmRleCA9IGkgLSBkZWxldGVkSXRlbXMrK1xuICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2gobnVsbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYXN0RnJlZUluZGV4ID0gZnJlZUluZGV4ID49IGJGcmVlLmxlbmd0aCA/XG4gICAgICAgIGJDaGlsZHJlbi5sZW5ndGggOlxuICAgICAgICBiRnJlZVtmcmVlSW5kZXhdXG5cbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggYiBhbmQgYXBwZW5kIGFueSBuZXcga2V5c1xuICAgIC8vIE8oTSkgdGltZVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgYkNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBuZXdJdGVtID0gYkNoaWxkcmVuW2pdXG5cbiAgICAgICAgaWYgKG5ld0l0ZW0ua2V5KSB7XG4gICAgICAgICAgICBpZiAoIWFLZXlzLmhhc093blByb3BlcnR5KG5ld0l0ZW0ua2V5KSkge1xuICAgICAgICAgICAgICAgIC8vIEFkZCBhbnkgbmV3IGtleWVkIGl0ZW1zXG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlIGFkZGluZyBuZXcgaXRlbXMgdG8gdGhlIGVuZCBhbmQgdGhlbiBzb3J0aW5nIHRoZW1cbiAgICAgICAgICAgICAgICAvLyBpbiBwbGFjZS4gSW4gZnV0dXJlIHdlIHNob3VsZCBpbnNlcnQgbmV3IGl0ZW1zIGluIHBsYWNlLlxuICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2gobmV3SXRlbSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChqID49IGxhc3RGcmVlSW5kZXgpIHtcbiAgICAgICAgICAgIC8vIEFkZCBhbnkgbGVmdG92ZXIgbm9uLWtleWVkIGl0ZW1zXG4gICAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNoKG5ld0l0ZW0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2ltdWxhdGUgPSBuZXdDaGlsZHJlbi5zbGljZSgpXG4gICAgdmFyIHNpbXVsYXRlSW5kZXggPSAwXG4gICAgdmFyIHJlbW92ZXMgPSBbXVxuICAgIHZhciBpbnNlcnRzID0gW11cbiAgICB2YXIgc2ltdWxhdGVJdGVtXG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IGJDaGlsZHJlbi5sZW5ndGg7KSB7XG4gICAgICAgIHZhciB3YW50ZWRJdGVtID0gYkNoaWxkcmVuW2tdXG4gICAgICAgIHNpbXVsYXRlSXRlbSA9IHNpbXVsYXRlW3NpbXVsYXRlSW5kZXhdXG5cbiAgICAgICAgLy8gcmVtb3ZlIGl0ZW1zXG4gICAgICAgIHdoaWxlIChzaW11bGF0ZUl0ZW0gPT09IG51bGwgJiYgc2ltdWxhdGUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZW1vdmVzLnB1c2gocmVtb3ZlKHNpbXVsYXRlLCBzaW11bGF0ZUluZGV4LCBudWxsKSlcbiAgICAgICAgICAgIHNpbXVsYXRlSXRlbSA9IHNpbXVsYXRlW3NpbXVsYXRlSW5kZXhdXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNpbXVsYXRlSXRlbSB8fCBzaW11bGF0ZUl0ZW0ua2V5ICE9PSB3YW50ZWRJdGVtLmtleSkge1xuICAgICAgICAgICAgLy8gaWYgd2UgbmVlZCBhIGtleSBpbiB0aGlzIHBvc2l0aW9uLi4uXG4gICAgICAgICAgICBpZiAod2FudGVkSXRlbS5rZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2ltdWxhdGVJdGVtICYmIHNpbXVsYXRlSXRlbS5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgYW4gaW5zZXJ0IGRvZXNuJ3QgcHV0IHRoaXMga2V5IGluIHBsYWNlLCBpdCBuZWVkcyB0byBtb3ZlXG4gICAgICAgICAgICAgICAgICAgIGlmIChiS2V5c1tzaW11bGF0ZUl0ZW0ua2V5XSAhPT0gayArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZXMucHVzaChyZW1vdmUoc2ltdWxhdGUsIHNpbXVsYXRlSW5kZXgsIHNpbXVsYXRlSXRlbS5rZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2ltdWxhdGVJdGVtID0gc2ltdWxhdGVbc2ltdWxhdGVJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSByZW1vdmUgZGlkbid0IHB1dCB0aGUgd2FudGVkIGl0ZW0gaW4gcGxhY2UsIHdlIG5lZWQgdG8gaW5zZXJ0IGl0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNpbXVsYXRlSXRlbSB8fCBzaW11bGF0ZUl0ZW0ua2V5ICE9PSB3YW50ZWRJdGVtLmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydHMucHVzaCh7a2V5OiB3YW50ZWRJdGVtLmtleSwgdG86IGt9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlbXMgYXJlIG1hdGNoaW5nLCBzbyBza2lwIGFoZWFkXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW11bGF0ZUluZGV4KytcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydHMucHVzaCh7a2V5OiB3YW50ZWRJdGVtLmtleSwgdG86IGt9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnRzLnB1c2goe2tleTogd2FudGVkSXRlbS5rZXksIHRvOiBrfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaysrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhIGtleSBpbiBzaW11bGF0ZSBoYXMgbm8gbWF0Y2hpbmcgd2FudGVkIGtleSwgcmVtb3ZlIGl0XG4gICAgICAgICAgICBlbHNlIGlmIChzaW11bGF0ZUl0ZW0gJiYgc2ltdWxhdGVJdGVtLmtleSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZXMucHVzaChyZW1vdmUoc2ltdWxhdGUsIHNpbXVsYXRlSW5kZXgsIHNpbXVsYXRlSXRlbS5rZXkpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2ltdWxhdGVJbmRleCsrXG4gICAgICAgICAgICBrKytcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSBhbGwgdGhlIHJlbWFpbmluZyBub2RlcyBmcm9tIHNpbXVsYXRlXG4gICAgd2hpbGUoc2ltdWxhdGVJbmRleCA8IHNpbXVsYXRlLmxlbmd0aCkge1xuICAgICAgICBzaW11bGF0ZUl0ZW0gPSBzaW11bGF0ZVtzaW11bGF0ZUluZGV4XVxuICAgICAgICByZW1vdmVzLnB1c2gocmVtb3ZlKHNpbXVsYXRlLCBzaW11bGF0ZUluZGV4LCBzaW11bGF0ZUl0ZW0gJiYgc2ltdWxhdGVJdGVtLmtleSkpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9ubHkgbW92ZXMgd2UgaGF2ZSBhcmUgZGVsZXRlcyB0aGVuIHdlIGNhbiBqdXN0XG4gICAgLy8gbGV0IHRoZSBkZWxldGUgcGF0Y2ggcmVtb3ZlIHRoZXNlIGl0ZW1zLlxuICAgIGlmIChyZW1vdmVzLmxlbmd0aCA9PT0gZGVsZXRlZEl0ZW1zICYmICFpbnNlcnRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2hpbGRyZW46IG5ld0NoaWxkcmVuLFxuICAgICAgICAgICAgbW92ZXM6IG51bGxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGNoaWxkcmVuOiBuZXdDaGlsZHJlbixcbiAgICAgICAgbW92ZXM6IHtcbiAgICAgICAgICAgIHJlbW92ZXM6IHJlbW92ZXMsXG4gICAgICAgICAgICBpbnNlcnRzOiBpbnNlcnRzXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZShhcnIsIGluZGV4LCBrZXkpIHtcbiAgICBhcnIuc3BsaWNlKGluZGV4LCAxKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbTogaW5kZXgsXG4gICAgICAgIGtleToga2V5XG4gICAgfVxufVxuXG5mdW5jdGlvbiBrZXlJbmRleChjaGlsZHJlbikge1xuICAgIHZhciBrZXlzID0ge31cbiAgICB2YXIgZnJlZSA9IFtdXG4gICAgdmFyIGxlbmd0aCA9IGNoaWxkcmVuLmxlbmd0aFxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXVxuXG4gICAgICAgIGlmIChjaGlsZC5rZXkpIHtcbiAgICAgICAgICAgIGtleXNbY2hpbGQua2V5XSA9IGlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyZWUucHVzaChpKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5czoga2V5cywgICAgIC8vIEEgaGFzaCBvZiBrZXkgbmFtZSB0byBpbmRleFxuICAgICAgICBmcmVlOiBmcmVlICAgICAgLy8gQW4gYXJyYXkgb2YgdW5rZXllZCBpdGVtIGluZGljZXNcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFwcGVuZFBhdGNoKGFwcGx5LCBwYXRjaCkge1xuICAgIGlmIChhcHBseSkge1xuICAgICAgICBpZiAoaXNBcnJheShhcHBseSkpIHtcbiAgICAgICAgICAgIGFwcGx5LnB1c2gocGF0Y2gpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcHBseSA9IFthcHBseSwgcGF0Y2hdXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXBwbHlcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGF0Y2hcbiAgICB9XG59XG4iLCJ2YXIgU2ltcGxlUGVlciA9IHJlcXVpcmUoJ3NpbXBsZS1wZWVyJylcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKVxudmFyIHRocm91Z2ggPSByZXF1aXJlKCd0aHJvdWdoMicpXG52YXIgY3VpZCA9IHJlcXVpcmUoJ2N1aWQnKVxudmFyIG9uY2UgPSByZXF1aXJlKCdvbmNlJylcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3dlYnJ0Yy1zd2FybScpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGh1Yiwgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuICB2YXIgd3JhcCA9IG9wdHMud3JhcCB8fCBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gZGF0YSB9XG4gIHZhciB1bndyYXAgPSBvcHRzLnVud3JhcCB8fCBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gZGF0YSB9XG5cbiAgdmFyIHN3YXJtID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKVxuICB2YXIgcmVtb3RlcyA9IHt9XG4gIHZhciBtZSA9IG9wdHMudXVpZCB8fCBjdWlkKClcbiAgZGVidWcoJ215IHV1aWQ6JywgbWUpXG5cbiAgc3dhcm0ubWF4UGVlcnMgPSBvcHRzLm1heFBlZXJzIHx8IEluZmluaXR5XG4gIHN3YXJtLnBlZXJzID0gW11cblxuICB2YXIgc2V0dXAgPSBmdW5jdGlvbiAocGVlciwgaWQpIHtcbiAgICBwZWVyLm9uKCdjb25uZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgZGVidWcoJ2Nvbm5lY3RlZCB0byBwZWVyJywgaWQpXG4gICAgICBzd2FybS5wZWVycy5wdXNoKHBlZXIpXG4gICAgICBzd2FybS5lbWl0KCdwZWVyJywgcGVlciwgaWQpXG4gICAgICBzd2FybS5lbWl0KCdjb25uZWN0JywgcGVlciwgaWQpXG4gICAgfSlcblxuICAgIHZhciBvbmNsb3NlID0gb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBkZWJ1ZygnZGlzY29ubmVjdGVkIGZyb20gcGVlcicsIGlkLCBlcnIpXG4gICAgICBpZiAocmVtb3Rlc1tpZF0gPT09IHBlZXIpIGRlbGV0ZSByZW1vdGVzW2lkXVxuICAgICAgdmFyIGkgPSBzd2FybS5wZWVycy5pbmRleE9mKHBlZXIpXG4gICAgICBpZiAoaSA+IC0xKSBzd2FybS5wZWVycy5zcGxpY2UoaSwgMSlcbiAgICAgIHN3YXJtLmVtaXQoJ2Rpc2Nvbm5lY3QnLCBwZWVyLCBpZClcbiAgICB9KVxuXG4gICAgdmFyIHNpZ25hbHMgPSBbXVxuICAgIHZhciBzZW5kaW5nID0gZmFsc2VcblxuICAgIHZhciBraWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHNlbmRpbmcgfHwgIXNpZ25hbHMubGVuZ3RoKSByZXR1cm5cbiAgICAgIHNlbmRpbmcgPSB0cnVlXG4gICAgICB2YXIgZGF0YSA9IHtmcm9tOiBtZSwgc2lnbmFsOiBzaWduYWxzLnNoaWZ0KCl9XG4gICAgICBkYXRhID0gd3JhcChkYXRhLCBpZClcbiAgICAgIGh1Yi5icm9hZGNhc3QoaWQsIGRhdGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VuZGluZyA9IGZhbHNlXG4gICAgICAgIGtpY2soKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBwZWVyLm9uKCdzaWduYWwnLCBmdW5jdGlvbiAoc2lnKSB7XG4gICAgICBzaWduYWxzLnB1c2goc2lnKVxuICAgICAga2ljaygpXG4gICAgfSlcblxuICAgIHBlZXIub24oJ2Vycm9yJywgb25jbG9zZSlcbiAgICBwZWVyLm9uY2UoJ2Nsb3NlJywgb25jbG9zZSlcbiAgfVxuXG4gIGh1Yi5zdWJzY3JpYmUoJ2FsbCcpLnBpcGUodGhyb3VnaC5vYmooZnVuY3Rpb24gKGRhdGEsIGVuYywgY2IpIHtcbiAgICBkYXRhID0gdW53cmFwKGRhdGEsICdhbGwnKVxuICAgIGlmICghZGF0YSkgcmV0dXJuIGNiKClcblxuICAgIGRlYnVnKCcvYWxsJywgZGF0YSlcbiAgICBpZiAoZGF0YS5mcm9tID09PSBtZSkge1xuICAgICAgZGVidWcoJ3NraXBwaW5nIHNlbGYnLCBkYXRhLmZyb20pXG4gICAgICByZXR1cm4gY2IoKVxuICAgIH1cblxuICAgIGlmIChkYXRhLnR5cGUgPT09ICdjb25uZWN0Jykge1xuICAgICAgaWYgKHN3YXJtLnBlZXJzLmxlbmd0aCA+PSBzd2FybS5tYXhQZWVycykge1xuICAgICAgICBkZWJ1Zygnc2tpcHBpbmcgYmVjYXVzZSBtYXhQZWVycyBpcyBtZXQnLCBkYXRhLmZyb20pXG4gICAgICAgIHJldHVybiBjYigpXG4gICAgICB9XG4gICAgICBpZiAocmVtb3Rlc1tkYXRhLmZyb21dKSB7XG4gICAgICAgIGRlYnVnKCdza2lwcGluZyBleGlzdGluZyByZW1vdGUnLCBkYXRhLmZyb20pXG4gICAgICAgIHJldHVybiBjYigpXG4gICAgICB9XG5cbiAgICAgIGRlYnVnKCdjb25uZWN0aW5nIHRvIG5ldyBwZWVyIChhcyBpbml0aWF0b3IpJywgZGF0YS5mcm9tKVxuICAgICAgdmFyIHBlZXIgPSBuZXcgU2ltcGxlUGVlcih7XG4gICAgICAgIHdydGM6IG9wdHMud3J0YyxcbiAgICAgICAgaW5pdGlhdG9yOiB0cnVlLFxuICAgICAgICBjb25maWc6IG9wdHMuY29uZmlnXG4gICAgICB9KVxuXG4gICAgICBzZXR1cChwZWVyLCBkYXRhLmZyb20pXG4gICAgICByZW1vdGVzW2RhdGEuZnJvbV0gPSBwZWVyXG4gICAgfVxuXG4gICAgY2IoKVxuICB9KSlcblxuICB2YXIgY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc3dhcm0ucGVlcnMubGVuZ3RoID49IHN3YXJtLm1heFBlZXJzKSByZXR1cm5cbiAgICB2YXIgZGF0YSA9IHt0eXBlOiAnY29ubmVjdCcsIGZyb206IG1lfVxuICAgIGRhdGEgPSB3cmFwKGRhdGEsICdhbGwnKVxuICAgIGh1Yi5icm9hZGNhc3QoJ2FsbCcsIGRhdGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldFRpbWVvdXQoY29ubmVjdCwgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjAwMCkgKyAoc3dhcm0ucGVlcnMubGVuZ3RoID8gMTMwMDAgOiAzMDAwKSlcbiAgICB9KVxuICB9XG5cbiAgaHViLnN1YnNjcmliZShtZSkub25jZSgnb3BlbicsIGNvbm5lY3QpLnBpcGUodGhyb3VnaC5vYmooZnVuY3Rpb24gKGRhdGEsIGVuYywgY2IpIHtcbiAgICBkYXRhID0gdW53cmFwKGRhdGEsIG1lKVxuICAgIGlmICghZGF0YSkgcmV0dXJuIGNiKClcblxuICAgIHZhciBwZWVyID0gcmVtb3Rlc1tkYXRhLmZyb21dXG4gICAgaWYgKCFwZWVyKSB7XG4gICAgICBpZiAoIWRhdGEuc2lnbmFsIHx8IGRhdGEuc2lnbmFsLnR5cGUgIT09ICdvZmZlcicpIHtcbiAgICAgICAgZGVidWcoJ3NraXBwaW5nIG5vbi1vZmZlcicsIGRhdGEpXG4gICAgICAgIHJldHVybiBjYigpXG4gICAgICB9XG5cbiAgICAgIGRlYnVnKCdjb25uZWN0aW5nIHRvIG5ldyBwZWVyIChhcyBub3QgaW5pdGlhdG9yKScsIGRhdGEuZnJvbSlcbiAgICAgIHBlZXIgPSByZW1vdGVzW2RhdGEuZnJvbV0gPSBuZXcgU2ltcGxlUGVlcih7XG4gICAgICAgIHdydGM6IG9wdHMud3J0YyxcbiAgICAgICAgY29uZmlnOiBvcHRzLmNvbmZpZ1xuICAgICAgfSlcblxuICAgICAgc2V0dXAocGVlciwgZGF0YS5mcm9tKVxuICAgIH1cblxuICAgIGRlYnVnKCdzaWduYWxsaW5nJywgZGF0YS5mcm9tLCBkYXRhLnNpZ25hbClcbiAgICBwZWVyLnNpZ25hbChkYXRhLnNpZ25hbClcbiAgICBjYigpXG4gIH0pKVxuXG4gIHJldHVybiBzd2FybVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRhYmxlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHByb2Nlc3NOZXh0VGljayA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5Jyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5SZWFkYWJsZS5SZWFkYWJsZVN0YXRlID0gUmVhZGFibGVTdGF0ZTtcblxudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRUVsaXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RoO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW07XG4oZnVuY3Rpb24gKCl7dHJ5e1xuICBTdHJlYW0gPSByZXF1aXJlKCdzdCcgKyAncmVhbScpO1xufWNhdGNoKF8pe31maW5hbGx5e1xuICBpZiAoIVN0cmVhbSlcbiAgICBTdHJlYW0gPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG59fSgpKVxuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgZGVidWdVdGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGRlYnVnO1xuaWYgKGRlYnVnVXRpbCAmJiBkZWJ1Z1V0aWwuZGVidWdsb2cpIHtcbiAgZGVidWcgPSBkZWJ1Z1V0aWwuZGVidWdsb2coJ3N0cmVhbScpO1xufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbiAoKSB7fTtcbn1cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgU3RyaW5nRGVjb2RlcjtcblxudXRpbC5pbmhlcml0cyhSZWFkYWJsZSwgU3RyZWFtKTtcblxudmFyIER1cGxleDtcbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleClcbiAgICB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciBkZWZhdWx0SHdtID0gdGhpcy5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IChod20gfHwgaHdtID09PSAwKSA/IGh3bSA6IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSB+fnRoaXMuaGlnaFdhdGVyTWFyaztcblxuICB0aGlzLmJ1ZmZlciA9IFtdO1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIHRoaXMucGlwZXMgPSBudWxsO1xuICB0aGlzLnBpcGVzQ291bnQgPSAwO1xuICB0aGlzLmZsb3dpbmcgPSBudWxsO1xuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIHRoaXMuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyB3aGVuZXZlciB3ZSByZXR1cm4gbnVsbCwgdGhlbiB3ZSBzZXQgYSBmbGFnIHRvIHNheVxuICAvLyB0aGF0IHdlJ3JlIGF3YWl0aW5nIGEgJ3JlYWRhYmxlJyBldmVudCBlbWlzc2lvbi5cbiAgdGhpcy5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZUxpc3RlbmluZyA9IGZhbHNlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIHdoZW4gcGlwaW5nLCB3ZSBvbmx5IGNhcmUgYWJvdXQgJ3JlYWRhYmxlJyBldmVudHMgdGhhdCBoYXBwZW5cbiAgLy8gYWZ0ZXIgcmVhZCgpaW5nIGFsbCB0aGUgYnl0ZXMgYW5kIG5vdCBnZXR0aW5nIGFueSBwdXNoYmFjay5cbiAgdGhpcy5yYW5PdXQgPSBmYWxzZTtcblxuICAvLyB0aGUgbnVtYmVyIG9mIHdyaXRlcnMgdGhhdCBhcmUgYXdhaXRpbmcgYSBkcmFpbiBldmVudCBpbiAucGlwZSgpc1xuICB0aGlzLmF3YWl0RHJhaW4gPSAwO1xuXG4gIC8vIGlmIHRydWUsIGEgbWF5YmVSZWFkTW9yZSBoYXMgYmVlbiBzY2hlZHVsZWRcbiAgdGhpcy5yZWFkaW5nTW9yZSA9IGZhbHNlO1xuXG4gIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gIHRoaXMuZW5jb2RpbmcgPSBudWxsO1xuICBpZiAob3B0aW9ucy5lbmNvZGluZykge1xuICAgIGlmICghU3RyaW5nRGVjb2RlcilcbiAgICAgIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICAgIHRoaXMuZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKG9wdGlvbnMuZW5jb2RpbmcpO1xuICAgIHRoaXMuZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nO1xuICB9XG59XG5cbnZhciBEdXBsZXg7XG5mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSlcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlKG9wdGlvbnMpO1xuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBuZXcgUmVhZGFibGVTdGF0ZShvcHRpb25zLCB0aGlzKTtcblxuICAvLyBsZWdhY3lcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMucmVhZCA9PT0gJ2Z1bmN0aW9uJylcbiAgICB0aGlzLl9yZWFkID0gb3B0aW9ucy5yZWFkO1xuXG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG4vLyBNYW51YWxseSBzaG92ZSBzb21ldGhpbmcgaW50byB0aGUgcmVhZCgpIGJ1ZmZlci5cbi8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBoaWdoV2F0ZXJNYXJrIGhhcyBub3QgYmVlbiBoaXQgeWV0LFxuLy8gc2ltaWxhciB0byBob3cgV3JpdGFibGUud3JpdGUoKSByZXR1cm5zIHRydWUgaWYgeW91IHNob3VsZFxuLy8gd3JpdGUoKSBzb21lIG1vcmUuXG5SZWFkYWJsZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuXG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBlbmNvZGluZyB8fCBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgaWYgKGVuY29kaW5nICE9PSBzdGF0ZS5lbmNvZGluZykge1xuICAgICAgY2h1bmsgPSBuZXcgQnVmZmVyKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICBlbmNvZGluZyA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGZhbHNlKTtcbn07XG5cbi8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpXG5SZWFkYWJsZS5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uKGNodW5rKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgJycsIHRydWUpO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLmlzUGF1c2VkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPT09IGZhbHNlO1xufTtcblxuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQpIHtcbiAgdmFyIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG4gIGlmIChlcikge1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfSBlbHNlIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpO1xuICB9IGVsc2UgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkge1xuICAgIGlmIChzdGF0ZS5lbmRlZCAmJiAhYWRkVG9Gcm9udCkge1xuICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoJ3N0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GJyk7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZEVtaXR0ZWQgJiYgYWRkVG9Gcm9udCkge1xuICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoJ3N0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50Jyk7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIWFkZFRvRnJvbnQgJiYgIWVuY29kaW5nKVxuICAgICAgICBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspO1xuXG4gICAgICBpZiAoIWFkZFRvRnJvbnQpXG4gICAgICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcblxuICAgICAgLy8gaWYgd2Ugd2FudCB0aGUgZGF0YSBub3csIGp1c3QgZW1pdCBpdC5cbiAgICAgIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuc3luYykge1xuICAgICAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgICAgIGlmIChhZGRUb0Zyb250KVxuICAgICAgICAgIHN0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcblxuICAgICAgICBpZiAoc3RhdGUubmVlZFJlYWRhYmxlKVxuICAgICAgICAgIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xuICAgICAgfVxuXG4gICAgICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBuZWVkTW9yZURhdGEoc3RhdGUpO1xufVxuXG5cbi8vIGlmIGl0J3MgcGFzdCB0aGUgaGlnaCB3YXRlciBtYXJrLCB3ZSBjYW4gcHVzaCBpbiBzb21lIG1vcmUuXG4vLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZVxuLy8gbW9yZSBieXRlcy4gIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsXG4vLyBzdWNoIGFzIHRoZSByZXBsLiAgQWxzbywgaWYgdGhlIHB1c2goKSB0cmlnZ2VyZWQgYVxuLy8gcmVhZGFibGUgZXZlbnQsIGFuZCB0aGUgdXNlciBjYWxsZWQgcmVhZChsYXJnZU51bWJlcikgc3VjaCB0aGF0XG4vLyBuZWVkUmVhZGFibGUgd2FzIHNldCwgdGhlbiB3ZSBvdWdodCB0byBwdXNoIG1vcmUsIHNvIHRoYXQgYW5vdGhlclxuLy8gJ3JlYWRhYmxlJyBldmVudCB3aWxsIGJlIHRyaWdnZXJlZC5cbmZ1bmN0aW9uIG5lZWRNb3JlRGF0YShzdGF0ZSkge1xuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmXG4gICAgICAgICAoc3RhdGUubmVlZFJlYWRhYmxlIHx8XG4gICAgICAgICAgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fFxuICAgICAgICAgIHN0YXRlLmxlbmd0aCA9PT0gMCk7XG59XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oZW5jKSB7XG4gIGlmICghU3RyaW5nRGVjb2RlcilcbiAgICBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoZW5jKTtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IGVuYztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBEb24ndCByYWlzZSB0aGUgaHdtID4gOE1CXG52YXIgTUFYX0hXTSA9IDB4ODAwMDAwO1xuZnVuY3Rpb24gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobikge1xuICBpZiAobiA+PSBNQVhfSFdNKSB7XG4gICAgbiA9IE1BWF9IV007XG4gIH0gZWxzZSB7XG4gICAgLy8gR2V0IHRoZSBuZXh0IGhpZ2hlc3QgcG93ZXIgb2YgMlxuICAgIG4tLTtcbiAgICBuIHw9IG4gPj4+IDE7XG4gICAgbiB8PSBuID4+PiAyO1xuICAgIG4gfD0gbiA+Pj4gNDtcbiAgICBuIHw9IG4gPj4+IDg7XG4gICAgbiB8PSBuID4+PiAxNjtcbiAgICBuKys7XG4gIH1cbiAgcmV0dXJuIG47XG59XG5cbmZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobiwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZClcbiAgICByZXR1cm4gMDtcblxuICBpZiAoc3RhdGUub2JqZWN0TW9kZSlcbiAgICByZXR1cm4gbiA9PT0gMCA/IDAgOiAxO1xuXG4gIGlmIChuID09PSBudWxsIHx8IGlzTmFOKG4pKSB7XG4gICAgLy8gb25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUuYnVmZmVyLmxlbmd0aClcbiAgICAgIHJldHVybiBzdGF0ZS5idWZmZXJbMF0ubGVuZ3RoO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBzdGF0ZS5sZW5ndGg7XG4gIH1cblxuICBpZiAobiA8PSAwKVxuICAgIHJldHVybiAwO1xuXG4gIC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSB0YXJnZXQgYnVmZmVyIGxldmVsLFxuICAvLyB0aGVuIHJhaXNlIHRoZSB3YXRlciBtYXJrLiAgQnVtcCB1cCB0byB0aGUgbmV4dCBoaWdoZXN0XG4gIC8vIHBvd2VyIG9mIDIsIHRvIHByZXZlbnQgaW5jcmVhc2luZyBpdCBleGNlc3NpdmVseSBpbiB0aW55XG4gIC8vIGFtb3VudHMuXG4gIGlmIChuID4gc3RhdGUuaGlnaFdhdGVyTWFyaylcbiAgICBzdGF0ZS5oaWdoV2F0ZXJNYXJrID0gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobik7XG5cbiAgLy8gZG9uJ3QgaGF2ZSB0aGF0IG11Y2guICByZXR1cm4gbnVsbCwgdW5sZXNzIHdlJ3ZlIGVuZGVkLlxuICBpZiAobiA+IHN0YXRlLmxlbmd0aCkge1xuICAgIGlmICghc3RhdGUuZW5kZWQpIHtcbiAgICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbjtcbn1cblxuLy8geW91IGNhbiBvdmVycmlkZSBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBhc3luYyBfcmVhZChuKSBiZWxvdy5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24obikge1xuICBkZWJ1ZygncmVhZCcsIG4pO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgbk9yaWcgPSBuO1xuXG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA+IDApXG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgLy8gaWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAobiA9PT0gMCAmJlxuICAgICAgc3RhdGUubmVlZFJlYWRhYmxlICYmXG4gICAgICAoc3RhdGUubGVuZ3RoID49IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgZGVidWcoJ3JlYWQ6IGVtaXRSZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpXG4gICAgICBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICBlbHNlXG4gICAgICBlbWl0UmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBuID0gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSk7XG5cbiAgLy8gaWYgd2UndmUgZW5kZWQsIGFuZCB3ZSdyZSBub3cgY2xlYXIsIHRoZW4gZmluaXNoIGl0IHVwLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkge1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApXG4gICAgICBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEFsbCB0aGUgYWN0dWFsIGNodW5rIGdlbmVyYXRpb24gbG9naWMgbmVlZHMgdG8gYmVcbiAgLy8gKmJlbG93KiB0aGUgY2FsbCB0byBfcmVhZC4gIFRoZSByZWFzb24gaXMgdGhhdCBpbiBjZXJ0YWluXG4gIC8vIHN5bnRoZXRpYyBzdHJlYW0gY2FzZXMsIHN1Y2ggYXMgcGFzc3Rocm91Z2ggc3RyZWFtcywgX3JlYWRcbiAgLy8gbWF5IGJlIGEgY29tcGxldGVseSBzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hpY2ggbWF5IGNoYW5nZVxuICAvLyB0aGUgc3RhdGUgb2YgdGhlIHJlYWQgYnVmZmVyLCBwcm92aWRpbmcgZW5vdWdoIGRhdGEgd2hlblxuICAvLyBiZWZvcmUgdGhlcmUgd2FzICpub3QqIGVub3VnaC5cbiAgLy9cbiAgLy8gU28sIHRoZSBzdGVwcyBhcmU6XG4gIC8vIDEuIEZpZ3VyZSBvdXQgd2hhdCB0aGUgc3RhdGUgb2YgdGhpbmdzIHdpbGwgYmUgYWZ0ZXIgd2UgZG9cbiAgLy8gYSByZWFkIGZyb20gdGhlIGJ1ZmZlci5cbiAgLy9cbiAgLy8gMi4gSWYgdGhhdCByZXN1bHRpbmcgc3RhdGUgd2lsbCB0cmlnZ2VyIGEgX3JlYWQsIHRoZW4gY2FsbCBfcmVhZC5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IGJlIGFzeW5jaHJvbm91cywgb3Igc3luY2hyb25vdXMuICBZZXMsIGl0IGlzXG4gIC8vIGRlZXBseSB1Z2x5IHRvIHdyaXRlIEFQSXMgdGhpcyB3YXksIGJ1dCB0aGF0IHN0aWxsIGRvZXNuJ3QgbWVhblxuICAvLyB0aGF0IHRoZSBSZWFkYWJsZSBjbGFzcyBzaG91bGQgYmVoYXZlIGltcHJvcGVybHksIGFzIHN0cmVhbXMgYXJlXG4gIC8vIGRlc2lnbmVkIHRvIGJlIHN5bmMvYXN5bmMgYWdub3N0aWMuXG4gIC8vIFRha2Ugbm90ZSBpZiB0aGUgX3JlYWQgY2FsbCBpcyBzeW5jIG9yIGFzeW5jIChpZSwgaWYgdGhlIHJlYWQgY2FsbFxuICAvLyBoYXMgcmV0dXJuZWQgeWV0KSwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IGl0J3Mgc2FmZSB0byBlbWl0XG4gIC8vICdyZWFkYWJsZScgZXRjLlxuICAvL1xuICAvLyAzLiBBY3R1YWxseSBwdWxsIHRoZSByZXF1ZXN0ZWQgY2h1bmtzIG91dCBvZiB0aGUgYnVmZmVyIGFuZCByZXR1cm4uXG5cbiAgLy8gaWYgd2UgbmVlZCBhIHJlYWRhYmxlIGV2ZW50LCB0aGVuIHdlIG5lZWQgdG8gZG8gc29tZSByZWFkaW5nLlxuICB2YXIgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlO1xuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZCk7XG5cbiAgLy8gaWYgd2UgY3VycmVudGx5IGhhdmUgbGVzcyB0aGFuIHRoZSBoaWdoV2F0ZXJNYXJrLCB0aGVuIGFsc28gcmVhZCBzb21lXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlO1xuICAgIGRlYnVnKCdsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyaycsIGRvUmVhZCk7XG4gIH1cblxuICAvLyBob3dldmVyLCBpZiB3ZSd2ZSBlbmRlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50LCBhbmQgaWYgd2UncmUgYWxyZWFkeVxuICAvLyByZWFkaW5nLCB0aGVuIGl0J3MgdW5uZWNlc3NhcnkuXG4gIGlmIChzdGF0ZS5lbmRlZCB8fCBzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZG9SZWFkID0gZmFsc2U7XG4gICAgZGVidWcoJ3JlYWRpbmcgb3IgZW5kZWQnLCBkb1JlYWQpO1xuICB9XG5cbiAgaWYgKGRvUmVhZCkge1xuICAgIGRlYnVnKCdkbyByZWFkJyk7XG4gICAgc3RhdGUucmVhZGluZyA9IHRydWU7XG4gICAgc3RhdGUuc3luYyA9IHRydWU7XG4gICAgLy8gaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgemVybywgdGhlbiB3ZSAqbmVlZCogYSByZWFkYWJsZSBldmVudC5cbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKVxuICAgICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvLyBjYWxsIGludGVybmFsIHJlYWQgbWV0aG9kXG4gICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKTtcbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7XG4gIH1cblxuICAvLyBJZiBfcmVhZCBwdXNoZWQgZGF0YSBzeW5jaHJvbm91c2x5LCB0aGVuIGByZWFkaW5nYCB3aWxsIGJlIGZhbHNlLFxuICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gIGlmIChkb1JlYWQgJiYgIXN0YXRlLnJlYWRpbmcpXG4gICAgbiA9IGhvd011Y2hUb1JlYWQobk9yaWcsIHN0YXRlKTtcblxuICB2YXIgcmV0O1xuICBpZiAobiA+IDApXG4gICAgcmV0ID0gZnJvbUxpc3Qobiwgc3RhdGUpO1xuICBlbHNlXG4gICAgcmV0ID0gbnVsbDtcblxuICBpZiAocmV0ID09PSBudWxsKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBuID0gMDtcbiAgfVxuXG4gIHN0YXRlLmxlbmd0aCAtPSBuO1xuXG4gIC8vIElmIHdlIGhhdmUgbm90aGluZyBpbiB0aGUgYnVmZmVyLCB0aGVuIHdlIHdhbnQgdG8ga25vd1xuICAvLyBhcyBzb29uIGFzIHdlICpkbyogZ2V0IHNvbWV0aGluZyBpbnRvIHRoZSBidWZmZXIuXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLmVuZGVkKVxuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICBpZiAobk9yaWcgIT09IG4gJiYgc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoID09PSAwKVxuICAgIGVuZFJlYWRhYmxlKHRoaXMpO1xuXG4gIGlmIChyZXQgIT09IG51bGwpXG4gICAgdGhpcy5lbWl0KCdkYXRhJywgcmV0KTtcblxuICByZXR1cm4gcmV0O1xufTtcblxuZnVuY3Rpb24gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuaykge1xuICB2YXIgZXIgPSBudWxsO1xuICBpZiAoIShCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSAmJlxuICAgICAgdHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJlxuICAgICAgY2h1bmsgIT09IG51bGwgJiZcbiAgICAgIGNodW5rICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgcmV0dXJuIGVyO1xufVxuXG5cbmZ1bmN0aW9uIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUuZW5kZWQpIHJldHVybjtcbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuXG4gIC8vIGVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBpZiAoc3RhdGUuc3luYylcbiAgICAgIHByb2Nlc3NOZXh0VGljayhlbWl0UmVhZGFibGVfLCBzdHJlYW0pO1xuICAgIGVsc2VcbiAgICAgIGVtaXRSZWFkYWJsZV8oc3RyZWFtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGVfKHN0cmVhbSkge1xuICBkZWJ1ZygnZW1pdCByZWFkYWJsZScpO1xuICBzdHJlYW0uZW1pdCgncmVhZGFibGUnKTtcbiAgZmxvdyhzdHJlYW0pO1xufVxuXG5cbi8vIGF0IHRoaXMgcG9pbnQsIHRoZSB1c2VyIGhhcyBwcmVzdW1hYmx5IHNlZW4gdGhlICdyZWFkYWJsZScgZXZlbnQsXG4vLyBhbmQgY2FsbGVkIHJlYWQoKSB0byBjb25zdW1lIHNvbWUgZGF0YS4gIHRoYXQgbWF5IGhhdmUgdHJpZ2dlcmVkXG4vLyBpbiB0dXJuIGFub3RoZXIgX3JlYWQobikgY2FsbCwgaW4gd2hpY2ggY2FzZSByZWFkaW5nID0gdHJ1ZSBpZlxuLy8gaXQncyBpbiBwcm9ncmVzcy5cbi8vIEhvd2V2ZXIsIGlmIHdlJ3JlIG5vdCBlbmRlZCwgb3IgcmVhZGluZywgYW5kIHRoZSBsZW5ndGggPCBod20sXG4vLyB0aGVuIGdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIG1vcmUgcHJlZW1wdGl2ZWx5LlxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWU7XG4gICAgcHJvY2Vzc05leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gIHdoaWxlICghc3RhdGUucmVhZGluZyAmJiAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiZcbiAgICAgICAgIHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkZWJ1ZygnbWF5YmVSZWFkTW9yZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgICBpZiAobGVuID09PSBzdGF0ZS5sZW5ndGgpXG4gICAgICAvLyBkaWRuJ3QgZ2V0IGFueSBkYXRhLCBzdG9wIHNwaW5uaW5nLlxuICAgICAgYnJlYWs7XG4gICAgZWxzZVxuICAgICAgbGVuID0gc3RhdGUubGVuZ3RoO1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2U7XG59XG5cbi8vIGFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24obikge1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKGRlc3QsIHBpcGVPcHRzKSB7XG4gIHZhciBzcmMgPSB0aGlzO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuXG4gIHN3aXRjaCAoc3RhdGUucGlwZXNDb3VudCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHN0YXRlLnBpcGVzID0gZGVzdDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTpcbiAgICAgIHN0YXRlLnBpcGVzID0gW3N0YXRlLnBpcGVzLCBkZXN0XTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBzdGF0ZS5waXBlcy5wdXNoKGRlc3QpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgc3RhdGUucGlwZXNDb3VudCArPSAxO1xuICBkZWJ1ZygncGlwZSBjb3VudD0lZCBvcHRzPSVqJywgc3RhdGUucGlwZXNDb3VudCwgcGlwZU9wdHMpO1xuXG4gIHZhciBkb0VuZCA9ICghcGlwZU9wdHMgfHwgcGlwZU9wdHMuZW5kICE9PSBmYWxzZSkgJiZcbiAgICAgICAgICAgICAgZGVzdCAhPT0gcHJvY2Vzcy5zdGRvdXQgJiZcbiAgICAgICAgICAgICAgZGVzdCAhPT0gcHJvY2Vzcy5zdGRlcnI7XG5cbiAgdmFyIGVuZEZuID0gZG9FbmQgPyBvbmVuZCA6IGNsZWFudXA7XG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKVxuICAgIHByb2Nlc3NOZXh0VGljayhlbmRGbik7XG4gIGVsc2VcbiAgICBzcmMub25jZSgnZW5kJywgZW5kRm4pO1xuXG4gIGRlc3Qub24oJ3VucGlwZScsIG9udW5waXBlKTtcbiAgZnVuY3Rpb24gb251bnBpcGUocmVhZGFibGUpIHtcbiAgICBkZWJ1Zygnb251bnBpcGUnKTtcbiAgICBpZiAocmVhZGFibGUgPT09IHNyYykge1xuICAgICAgY2xlYW51cCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGRlYnVnKCdvbmVuZCcpO1xuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuICAvLyB3aGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAvLyBoYW5kbGVyIGluIGZsb3coKSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgcmVwZWF0ZWRseSBpc1xuICAvLyB0b28gc2xvdy5cbiAgdmFyIG9uZHJhaW4gPSBwaXBlT25EcmFpbihzcmMpO1xuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gIHZhciBjbGVhbmVkVXAgPSBmYWxzZTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZygnY2xlYW51cCcpO1xuICAgIC8vIGNsZWFudXAgZXZlbnQgaGFuZGxlcnMgb25jZSB0aGUgcGlwZSBpcyBicm9rZW5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigndW5waXBlJywgb251bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgY2xlYW51cCk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcblxuICAgIGNsZWFuZWRVcCA9IHRydWU7XG5cbiAgICAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluICYmXG4gICAgICAgICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpXG4gICAgICBvbmRyYWluKCk7XG4gIH1cblxuICBzcmMub24oJ2RhdGEnLCBvbmRhdGEpO1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgdmFyIHJldCA9IGRlc3Qud3JpdGUoY2h1bmspO1xuICAgIGlmIChmYWxzZSA9PT0gcmV0KSB7XG4gICAgICAvLyBJZiB0aGUgdXNlciB1bnBpcGVkIGR1cmluZyBgZGVzdC53cml0ZSgpYCwgaXQgaXMgcG9zc2libGVcbiAgICAgIC8vIHRvIGdldCBzdHVjayBpbiBhIHBlcm1hbmVudGx5IHBhdXNlZCBzdGF0ZSBpZiB0aGF0IHdyaXRlXG4gICAgICAvLyBhbHNvIHJldHVybmVkIGZhbHNlLlxuICAgICAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEgJiZcbiAgICAgICAgICBzdGF0ZS5waXBlc1swXSA9PT0gZGVzdCAmJlxuICAgICAgICAgIHNyYy5saXN0ZW5lckNvdW50KCdkYXRhJykgPT09IDEgJiZcbiAgICAgICAgICAhY2xlYW5lZFVwKSB7XG4gICAgICAgIGRlYnVnKCdmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UnLCBzcmMuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbik7XG4gICAgICAgIHNyYy5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKys7XG4gICAgICB9XG4gICAgICBzcmMucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgZGVzdCBoYXMgYW4gZXJyb3IsIHRoZW4gc3RvcCBwaXBpbmcgaW50byBpdC5cbiAgLy8gaG93ZXZlciwgZG9uJ3Qgc3VwcHJlc3MgdGhlIHRocm93aW5nIGJlaGF2aW9yIGZvciB0aGlzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgZGVidWcoJ29uZXJyb3InLCBlcik7XG4gICAgdW5waXBlKCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBpZiAoRUVsaXN0ZW5lckNvdW50KGRlc3QsICdlcnJvcicpID09PSAwKVxuICAgICAgZGVzdC5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfVxuICAvLyBUaGlzIGlzIGEgYnJ1dGFsbHkgdWdseSBoYWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBlcnJvciBoYW5kbGVyXG4gIC8vIGlzIGF0dGFjaGVkIGJlZm9yZSBhbnkgdXNlcmxhbmQgb25lcy4gIE5FVkVSIERPIFRISVMuXG4gIGlmICghZGVzdC5fZXZlbnRzIHx8ICFkZXN0Ll9ldmVudHMuZXJyb3IpXG4gICAgZGVzdC5vbignZXJyb3InLCBvbmVycm9yKTtcbiAgZWxzZSBpZiAoaXNBcnJheShkZXN0Ll9ldmVudHMuZXJyb3IpKVxuICAgIGRlc3QuX2V2ZW50cy5lcnJvci51bnNoaWZ0KG9uZXJyb3IpO1xuICBlbHNlXG4gICAgZGVzdC5fZXZlbnRzLmVycm9yID0gW29uZXJyb3IsIGRlc3QuX2V2ZW50cy5lcnJvcl07XG5cblxuICAvLyBCb3RoIGNsb3NlIGFuZCBmaW5pc2ggc2hvdWxkIHRyaWdnZXIgdW5waXBlLCBidXQgb25seSBvbmNlLlxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2Nsb3NlJywgb25jbG9zZSk7XG4gIGZ1bmN0aW9uIG9uZmluaXNoKCkge1xuICAgIGRlYnVnKCdvbmZpbmlzaCcpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG5cbiAgZnVuY3Rpb24gdW5waXBlKCkge1xuICAgIGRlYnVnKCd1bnBpcGUnKTtcbiAgICBzcmMudW5waXBlKGRlc3QpO1xuICB9XG5cbiAgLy8gdGVsbCB0aGUgZGVzdCB0aGF0IGl0J3MgYmVpbmcgcGlwZWQgdG9cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKTtcblxuICAvLyBzdGFydCB0aGUgZmxvdyBpZiBpdCBoYXNuJ3QgYmVlbiBzdGFydGVkIGFscmVhZHkuXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpO1xuICAgIHNyYy5yZXN1bWUoKTtcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufTtcblxuZnVuY3Rpb24gcGlwZU9uRHJhaW4oc3JjKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGU7XG4gICAgZGVidWcoJ3BpcGVPbkRyYWluJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4pXG4gICAgICBzdGF0ZS5hd2FpdERyYWluLS07XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gPT09IDAgJiYgRUVsaXN0ZW5lckNvdW50KHNyYywgJ2RhdGEnKSkge1xuICAgICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgICBmbG93KHNyYyk7XG4gICAgfVxuICB9O1xufVxuXG5cblJlYWRhYmxlLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbihkZXN0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgLy8gaWYgd2UncmUgbm90IHBpcGluZyBhbnl3aGVyZSwgdGhlbiBkbyBub3RoaW5nLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMClcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBqdXN0IG9uZSBkZXN0aW5hdGlvbi4gIG1vc3QgY29tbW9uIGNhc2UuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSB7XG4gICAgLy8gcGFzc2VkIGluIG9uZSwgYnV0IGl0J3Mgbm90IHRoZSByaWdodCBvbmUuXG4gICAgaWYgKGRlc3QgJiYgZGVzdCAhPT0gc3RhdGUucGlwZXMpXG4gICAgICByZXR1cm4gdGhpcztcblxuICAgIGlmICghZGVzdClcbiAgICAgIGRlc3QgPSBzdGF0ZS5waXBlcztcblxuICAgIC8vIGdvdCBhIG1hdGNoLlxuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgaWYgKGRlc3QpXG4gICAgICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gc2xvdyBjYXNlLiBtdWx0aXBsZSBwaXBlIGRlc3RpbmF0aW9ucy5cblxuICBpZiAoIWRlc3QpIHtcbiAgICAvLyByZW1vdmUgYWxsLlxuICAgIHZhciBkZXN0cyA9IHN0YXRlLnBpcGVzO1xuICAgIHZhciBsZW4gPSBzdGF0ZS5waXBlc0NvdW50O1xuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgZGVzdHNbaV0uZW1pdCgndW5waXBlJywgdGhpcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB0cnkgdG8gZmluZCB0aGUgcmlnaHQgb25lLlxuICB2YXIgaSA9IGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpO1xuICBpZiAoaSA9PT0gLTEpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgc3RhdGUucGlwZXMuc3BsaWNlKGksIDEpO1xuICBzdGF0ZS5waXBlc0NvdW50IC09IDE7XG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKVxuICAgIHN0YXRlLnBpcGVzID0gc3RhdGUucGlwZXNbMF07XG5cbiAgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIHNldCB1cCBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBhc2tlZCBmb3Jcbi8vIEVuc3VyZSByZWFkYWJsZSBsaXN0ZW5lcnMgZXZlbnR1YWxseSBnZXQgc29tZXRoaW5nXG5SZWFkYWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbihldiwgZm4pIHtcbiAgdmFyIHJlcyA9IFN0cmVhbS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCBldiwgZm4pO1xuXG4gIC8vIElmIGxpc3RlbmluZyB0byBkYXRhLCBhbmQgaXQgaGFzIG5vdCBleHBsaWNpdGx5IGJlZW4gcGF1c2VkLFxuICAvLyB0aGVuIGNhbGwgcmVzdW1lIHRvIHN0YXJ0IHRoZSBmbG93IG9mIGRhdGEgb24gdGhlIG5leHQgdGljay5cbiAgaWYgKGV2ID09PSAnZGF0YScgJiYgZmFsc2UgIT09IHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZykge1xuICAgIHRoaXMucmVzdW1lKCk7XG4gIH1cblxuICBpZiAoZXYgPT09ICdyZWFkYWJsZScgJiYgdGhpcy5yZWFkYWJsZSkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKCFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSB0cnVlO1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgICAgIHByb2Nlc3NOZXh0VGljayhuUmVhZGluZ05leHRUaWNrLCB0aGlzKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBSZWFkYWJsZS5wcm90b3R5cGUub247XG5cbmZ1bmN0aW9uIG5SZWFkaW5nTmV4dFRpY2soc2VsZikge1xuICBkZWJ1ZygncmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwJyk7XG4gIHNlbGYucmVhZCgwKTtcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lJyk7XG4gICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgcmVzdW1lKHRoaXMsIHN0YXRlKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIHJlc3VtZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVzdW1lU2NoZWR1bGVkKSB7XG4gICAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBwcm9jZXNzTmV4dFRpY2socmVzdW1lXywgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lXyhzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZykge1xuICAgIGRlYnVnKCdyZXN1bWUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gIH1cblxuICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpO1xuICBmbG93KHN0cmVhbSk7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKVxuICAgIHN0cmVhbS5yZWFkKDApO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbigpIHtcbiAgZGVidWcoJ2NhbGwgcGF1c2UgZmxvd2luZz0laicsIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyk7XG4gIGlmIChmYWxzZSAhPT0gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3BhdXNlJyk7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0KCdwYXVzZScpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gZmxvdyhzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZmxvdycsIHN0YXRlLmZsb3dpbmcpO1xuICBpZiAoc3RhdGUuZmxvd2luZykge1xuICAgIGRvIHtcbiAgICAgIHZhciBjaHVuayA9IHN0cmVhbS5yZWFkKCk7XG4gICAgfSB3aGlsZSAobnVsbCAhPT0gY2h1bmsgJiYgc3RhdGUuZmxvd2luZyk7XG4gIH1cbn1cblxuLy8gd3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHBhdXNlZCA9IGZhbHNlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBlbmQnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKVxuICAgICAgICBzZWxmLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIHNlbGYucHVzaChudWxsKTtcbiAgfSk7XG5cbiAgc3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24oY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpXG4gICAgICBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspO1xuXG4gICAgLy8gZG9uJ3Qgc2tpcCBvdmVyIGZhbHN5IHZhbHVlcyBpbiBvYmplY3RNb2RlXG4gICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgJiYgKGNodW5rID09PSBudWxsIHx8IGNodW5rID09PSB1bmRlZmluZWQpKVxuICAgICAgcmV0dXJuO1xuICAgIGVsc2UgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmICghY2h1bmsgfHwgIWNodW5rLmxlbmd0aCkpXG4gICAgICByZXR1cm47XG5cbiAgICB2YXIgcmV0ID0gc2VsZi5wdXNoKGNodW5rKTtcbiAgICBpZiAoIXJldCkge1xuICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcHJveHkgYWxsIHRoZSBvdGhlciBtZXRob2RzLlxuICAvLyBpbXBvcnRhbnQgd2hlbiB3cmFwcGluZyBmaWx0ZXJzIGFuZCBkdXBsZXhlcy5cbiAgZm9yICh2YXIgaSBpbiBzdHJlYW0pIHtcbiAgICBpZiAodGhpc1tpXSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzdHJlYW1baV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNbaV0gPSBmdW5jdGlvbihtZXRob2QpIHsgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3RyZWFtW21ldGhvZF0uYXBwbHkoc3RyZWFtLCBhcmd1bWVudHMpO1xuICAgICAgfTsgfShpKTtcbiAgICB9XG4gIH1cblxuICAvLyBwcm94eSBjZXJ0YWluIGltcG9ydGFudCBldmVudHMuXG4gIHZhciBldmVudHMgPSBbJ2Vycm9yJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knLCAncGF1c2UnLCAncmVzdW1lJ107XG4gIGZvckVhY2goZXZlbnRzLCBmdW5jdGlvbihldikge1xuICAgIHN0cmVhbS5vbihldiwgc2VsZi5lbWl0LmJpbmQoc2VsZiwgZXYpKTtcbiAgfSk7XG5cbiAgLy8gd2hlbiB3ZSB0cnkgdG8gY29uc3VtZSBzb21lIG1vcmUgYnl0ZXMsIHNpbXBseSB1bnBhdXNlIHRoZVxuICAvLyB1bmRlcmx5aW5nIHN0cmVhbS5cbiAgc2VsZi5fcmVhZCA9IGZ1bmN0aW9uKG4pIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBfcmVhZCcsIG4pO1xuICAgIGlmIChwYXVzZWQpIHtcbiAgICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgICAgc3RyZWFtLnJlc3VtZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gc2VsZjtcbn07XG5cblxuLy8gZXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuUmVhZGFibGUuX2Zyb21MaXN0ID0gZnJvbUxpc3Q7XG5cbi8vIFBsdWNrIG9mZiBuIGJ5dGVzIGZyb20gYW4gYXJyYXkgb2YgYnVmZmVycy5cbi8vIExlbmd0aCBpcyB0aGUgY29tYmluZWQgbGVuZ3RocyBvZiBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIGxpc3QuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICB2YXIgbGlzdCA9IHN0YXRlLmJ1ZmZlcjtcbiAgdmFyIGxlbmd0aCA9IHN0YXRlLmxlbmd0aDtcbiAgdmFyIHN0cmluZ01vZGUgPSAhIXN0YXRlLmRlY29kZXI7XG4gIHZhciBvYmplY3RNb2RlID0gISFzdGF0ZS5vYmplY3RNb2RlO1xuICB2YXIgcmV0O1xuXG4gIC8vIG5vdGhpbmcgaW4gdGhlIGxpc3QsIGRlZmluaXRlbHkgZW1wdHkuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gbnVsbDtcblxuICBpZiAobGVuZ3RoID09PSAwKVxuICAgIHJldCA9IG51bGw7XG4gIGVsc2UgaWYgKG9iamVjdE1vZGUpXG4gICAgcmV0ID0gbGlzdC5zaGlmdCgpO1xuICBlbHNlIGlmICghbiB8fCBuID49IGxlbmd0aCkge1xuICAgIC8vIHJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgYXJyYXkuXG4gICAgaWYgKHN0cmluZ01vZGUpXG4gICAgICByZXQgPSBsaXN0LmpvaW4oJycpO1xuICAgIGVsc2UgaWYgKGxpc3QubGVuZ3RoID09PSAxKVxuICAgICAgcmV0ID0gbGlzdFswXTtcbiAgICBlbHNlXG4gICAgICByZXQgPSBCdWZmZXIuY29uY2F0KGxpc3QsIGxlbmd0aCk7XG4gICAgbGlzdC5sZW5ndGggPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQganVzdCBzb21lIG9mIGl0LlxuICAgIGlmIChuIDwgbGlzdFswXS5sZW5ndGgpIHtcbiAgICAgIC8vIGp1c3QgdGFrZSBhIHBhcnQgb2YgdGhlIGZpcnN0IGxpc3QgaXRlbS5cbiAgICAgIC8vIHNsaWNlIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzLlxuICAgICAgdmFyIGJ1ZiA9IGxpc3RbMF07XG4gICAgICByZXQgPSBidWYuc2xpY2UoMCwgbik7XG4gICAgICBsaXN0WzBdID0gYnVmLnNsaWNlKG4pO1xuICAgIH0gZWxzZSBpZiAobiA9PT0gbGlzdFswXS5sZW5ndGgpIHtcbiAgICAgIC8vIGZpcnN0IGxpc3QgaXMgYSBwZXJmZWN0IG1hdGNoXG4gICAgICByZXQgPSBsaXN0LnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbXBsZXggY2FzZS5cbiAgICAgIC8vIHdlIGhhdmUgZW5vdWdoIHRvIGNvdmVyIGl0LCBidXQgaXQgc3BhbnMgcGFzdCB0aGUgZmlyc3QgYnVmZmVyLlxuICAgICAgaWYgKHN0cmluZ01vZGUpXG4gICAgICAgIHJldCA9ICcnO1xuICAgICAgZWxzZVxuICAgICAgICByZXQgPSBuZXcgQnVmZmVyKG4pO1xuXG4gICAgICB2YXIgYyA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbCAmJiBjIDwgbjsgaSsrKSB7XG4gICAgICAgIHZhciBidWYgPSBsaXN0WzBdO1xuICAgICAgICB2YXIgY3B5ID0gTWF0aC5taW4obiAtIGMsIGJ1Zi5sZW5ndGgpO1xuXG4gICAgICAgIGlmIChzdHJpbmdNb2RlKVxuICAgICAgICAgIHJldCArPSBidWYuc2xpY2UoMCwgY3B5KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGJ1Zi5jb3B5KHJldCwgYywgMCwgY3B5KTtcblxuICAgICAgICBpZiAoY3B5IDwgYnVmLmxlbmd0aClcbiAgICAgICAgICBsaXN0WzBdID0gYnVmLnNsaWNlKGNweSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG5cbiAgICAgICAgYyArPSBjcHk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcblxuICAvLyBJZiB3ZSBnZXQgaGVyZSBiZWZvcmUgY29uc3VtaW5nIGFsbCB0aGUgYnl0ZXMsIHRoZW4gdGhhdCBpcyBhXG4gIC8vIGJ1ZyBpbiBub2RlLiAgU2hvdWxkIG5ldmVyIGhhcHBlbi5cbiAgaWYgKHN0YXRlLmxlbmd0aCA+IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdlbmRSZWFkYWJsZSBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO1xuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICBwcm9jZXNzTmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBvbmUgbGFzdCB1bnNoaWZ0LlxuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgc3RhdGUuZW5kRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvckVhY2ggKHhzLCBmKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZih4c1tpXSwgaSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5kZXhPZiAoeHMsIHgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoeHNbaV0gPT09IHgpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn1cbiIsInZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vdHJhbnNmb3JtJylcbiAgLCBpbmhlcml0cyAgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHNcbiAgLCB4dGVuZCAgICAgPSByZXF1aXJlKCd4dGVuZCcpXG5cbmZ1bmN0aW9uIERlc3Ryb3lhYmxlVHJhbnNmb3JtKG9wdHMpIHtcbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0cylcbiAgdGhpcy5fZGVzdHJveWVkID0gZmFsc2Vcbn1cblxuaW5oZXJpdHMoRGVzdHJveWFibGVUcmFuc2Zvcm0sIFRyYW5zZm9ybSlcblxuRGVzdHJveWFibGVUcmFuc2Zvcm0ucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbihlcnIpIHtcbiAgaWYgKHRoaXMuX2Rlc3Ryb3llZCkgcmV0dXJuXG4gIHRoaXMuX2Rlc3Ryb3llZCA9IHRydWVcbiAgXG4gIHZhciBzZWxmID0gdGhpc1xuICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgIGlmIChlcnIpXG4gICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgIHNlbGYuZW1pdCgnY2xvc2UnKVxuICB9KVxufVxuXG4vLyBhIG5vb3AgX3RyYW5zZm9ybSBmdW5jdGlvblxuZnVuY3Rpb24gbm9vcCAoY2h1bmssIGVuYywgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2sobnVsbCwgY2h1bmspXG59XG5cblxuLy8gY3JlYXRlIGEgbmV3IGV4cG9ydCBmdW5jdGlvbiwgdXNlZCBieSBib3RoIHRoZSBtYWluIGV4cG9ydCBhbmRcbi8vIHRoZSAuY3RvciBleHBvcnQsIGNvbnRhaW5zIGNvbW1vbiBsb2dpYyBmb3IgZGVhbGluZyB3aXRoIGFyZ3VtZW50c1xuZnVuY3Rpb24gdGhyb3VnaDIgKGNvbnN0cnVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24gKG9wdGlvbnMsIHRyYW5zZm9ybSwgZmx1c2gpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZmx1c2ggICAgID0gdHJhbnNmb3JtXG4gICAgICB0cmFuc2Zvcm0gPSBvcHRpb25zXG4gICAgICBvcHRpb25zICAgPSB7fVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHJhbnNmb3JtICE9ICdmdW5jdGlvbicpXG4gICAgICB0cmFuc2Zvcm0gPSBub29wXG5cbiAgICBpZiAodHlwZW9mIGZsdXNoICE9ICdmdW5jdGlvbicpXG4gICAgICBmbHVzaCA9IG51bGxcblxuICAgIHJldHVybiBjb25zdHJ1Y3Qob3B0aW9ucywgdHJhbnNmb3JtLCBmbHVzaClcbiAgfVxufVxuXG5cbi8vIG1haW4gZXhwb3J0LCBqdXN0IG1ha2UgbWUgYSB0cmFuc2Zvcm0gc3RyZWFtIVxubW9kdWxlLmV4cG9ydHMgPSB0aHJvdWdoMihmdW5jdGlvbiAob3B0aW9ucywgdHJhbnNmb3JtLCBmbHVzaCkge1xuICB2YXIgdDIgPSBuZXcgRGVzdHJveWFibGVUcmFuc2Zvcm0ob3B0aW9ucylcblxuICB0Mi5fdHJhbnNmb3JtID0gdHJhbnNmb3JtXG5cbiAgaWYgKGZsdXNoKVxuICAgIHQyLl9mbHVzaCA9IGZsdXNoXG5cbiAgcmV0dXJuIHQyXG59KVxuXG5cbi8vIG1ha2UgbWUgYSByZXVzYWJsZSBwcm90b3R5cGUgdGhhdCBJIGNhbiBgbmV3YCwgb3IgaW1wbGljaXRseSBgbmV3YFxuLy8gd2l0aCBhIGNvbnN0cnVjdG9yIGNhbGxcbm1vZHVsZS5leHBvcnRzLmN0b3IgPSB0aHJvdWdoMihmdW5jdGlvbiAob3B0aW9ucywgdHJhbnNmb3JtLCBmbHVzaCkge1xuICBmdW5jdGlvbiBUaHJvdWdoMiAob3ZlcnJpZGUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVGhyb3VnaDIpKVxuICAgICAgcmV0dXJuIG5ldyBUaHJvdWdoMihvdmVycmlkZSlcblxuICAgIHRoaXMub3B0aW9ucyA9IHh0ZW5kKG9wdGlvbnMsIG92ZXJyaWRlKVxuXG4gICAgRGVzdHJveWFibGVUcmFuc2Zvcm0uY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMpXG4gIH1cblxuICBpbmhlcml0cyhUaHJvdWdoMiwgRGVzdHJveWFibGVUcmFuc2Zvcm0pXG5cbiAgVGhyb3VnaDIucHJvdG90eXBlLl90cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cblxuICBpZiAoZmx1c2gpXG4gICAgVGhyb3VnaDIucHJvdG90eXBlLl9mbHVzaCA9IGZsdXNoXG5cbiAgcmV0dXJuIFRocm91Z2gyXG59KVxuXG5cbm1vZHVsZS5leHBvcnRzLm9iaiA9IHRocm91Z2gyKGZ1bmN0aW9uIChvcHRpb25zLCB0cmFuc2Zvcm0sIGZsdXNoKSB7XG4gIHZhciB0MiA9IG5ldyBEZXN0cm95YWJsZVRyYW5zZm9ybSh4dGVuZCh7IG9iamVjdE1vZGU6IHRydWUsIGhpZ2hXYXRlck1hcms6IDE2IH0sIG9wdGlvbnMpKVxuXG4gIHQyLl90cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cblxuICBpZiAoZmx1c2gpXG4gICAgdDIuX2ZsdXNoID0gZmx1c2hcblxuICByZXR1cm4gdDJcbn0pXG4iLCIvLyBSZXR1cm5zIGEgd3JhcHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB3cmFwcGVkIGNhbGxiYWNrXG4vLyBUaGUgd3JhcHBlciBmdW5jdGlvbiBzaG91bGQgZG8gc29tZSBzdHVmZiwgYW5kIHJldHVybiBhXG4vLyBwcmVzdW1hYmx5IGRpZmZlcmVudCBjYWxsYmFjayBmdW5jdGlvbi5cbi8vIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG93biBwcm9wZXJ0aWVzIGFyZSByZXRhaW5lZCwgc28gdGhhdFxuLy8gZGVjb3JhdGlvbnMgYW5kIHN1Y2ggYXJlIG5vdCBsb3N0IGFsb25nIHRoZSB3YXkuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBweVxuZnVuY3Rpb24gd3JhcHB5IChmbiwgY2IpIHtcbiAgaWYgKGZuICYmIGNiKSByZXR1cm4gd3JhcHB5KGZuKShjYilcblxuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ25lZWQgd3JhcHBlciBmdW5jdGlvbicpXG5cbiAgT2JqZWN0LmtleXMoZm4pLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICB3cmFwcGVyW2tdID0gZm5ba11cbiAgfSlcblxuICByZXR1cm4gd3JhcHBlclxuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV1cbiAgICB9XG4gICAgdmFyIHJldCA9IGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgdmFyIGNiID0gYXJnc1thcmdzLmxlbmd0aC0xXVxuICAgIGlmICh0eXBlb2YgcmV0ID09PSAnZnVuY3Rpb24nICYmIHJldCAhPT0gY2IpIHtcbiAgICAgIE9iamVjdC5rZXlzKGNiKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHJldFtrXSA9IGNiW2tdXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cbn1cbiIsInZhciBuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheVxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUlzQXJyYXkgfHwgaXNBcnJheVxuXG5mdW5jdGlvbiBpc0FycmF5KG9iaikge1xuICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBBcnJheV1cIlxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgd2luZG93ID0gcmVxdWlyZShcImdsb2JhbC93aW5kb3dcIilcbnZhciBvbmNlID0gcmVxdWlyZShcIm9uY2VcIilcbnZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZShcImlzLWZ1bmN0aW9uXCIpXG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZShcInBhcnNlLWhlYWRlcnNcIilcbnZhciB4dGVuZCA9IHJlcXVpcmUoXCJ4dGVuZFwiKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVhIUlxuY3JlYXRlWEhSLlhNTEh0dHBSZXF1ZXN0ID0gd2luZG93LlhNTEh0dHBSZXF1ZXN0IHx8IG5vb3BcbmNyZWF0ZVhIUi5YRG9tYWluUmVxdWVzdCA9IFwid2l0aENyZWRlbnRpYWxzXCIgaW4gKG5ldyBjcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QoKSkgPyBjcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QgOiB3aW5kb3cuWERvbWFpblJlcXVlc3RcblxuZm9yRWFjaEFycmF5KFtcImdldFwiLCBcInB1dFwiLCBcInBvc3RcIiwgXCJwYXRjaFwiLCBcImhlYWRcIiwgXCJkZWxldGVcIl0sIGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIGNyZWF0ZVhIUlttZXRob2QgPT09IFwiZGVsZXRlXCIgPyBcImRlbFwiIDogbWV0aG9kXSA9IGZ1bmN0aW9uKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRQYXJhbXModXJpLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgb3B0aW9ucy5tZXRob2QgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICAgICAgICByZXR1cm4gX2NyZWF0ZVhIUihvcHRpb25zKVxuICAgIH1cbn0pXG5cbmZ1bmN0aW9uIGZvckVhY2hBcnJheShhcnJheSwgaXRlcmF0b3IpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGFycmF5W2ldKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNFbXB0eShvYmope1xuICAgIGZvcih2YXIgaSBpbiBvYmope1xuICAgICAgICBpZihvYmouaGFzT3duUHJvcGVydHkoaSkpIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpbml0UGFyYW1zKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICB2YXIgcGFyYW1zID0gdXJpXG5cbiAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnNcbiAgICAgICAgaWYgKHR5cGVvZiB1cmkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHt1cmk6dXJpfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zID0geHRlbmQob3B0aW9ucywge3VyaTogdXJpfSlcbiAgICB9XG5cbiAgICBwYXJhbXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHJldHVybiBwYXJhbXNcbn1cblxuZnVuY3Rpb24gY3JlYXRlWEhSKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBvcHRpb25zID0gaW5pdFBhcmFtcyh1cmksIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgIHJldHVybiBfY3JlYXRlWEhSKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVYSFIob3B0aW9ucykge1xuICAgIHZhciBjYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2tcbiAgICBpZih0eXBlb2YgY2FsbGJhY2sgPT09IFwidW5kZWZpbmVkXCIpe1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjYWxsYmFjayBhcmd1bWVudCBtaXNzaW5nXCIpXG4gICAgfVxuICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjaylcblxuICAgIGZ1bmN0aW9uIHJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgbG9hZEZ1bmMoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Qm9keSgpIHtcbiAgICAgICAgLy8gQ2hyb21lIHdpdGggcmVxdWVzdFR5cGU9YmxvYiB0aHJvd3MgZXJyb3JzIGFycm91bmQgd2hlbiBldmVuIHRlc3RpbmcgYWNjZXNzIHRvIHJlc3BvbnNlVGV4dFxuICAgICAgICB2YXIgYm9keSA9IHVuZGVmaW5lZFxuXG4gICAgICAgIGlmICh4aHIucmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGJvZHkgPSB4aHIucmVzcG9uc2VcbiAgICAgICAgfSBlbHNlIGlmICh4aHIucmVzcG9uc2VUeXBlID09PSBcInRleHRcIiB8fCAheGhyLnJlc3BvbnNlVHlwZSkge1xuICAgICAgICAgICAgYm9keSA9IHhoci5yZXNwb25zZVRleHQgfHwgeGhyLnJlc3BvbnNlWE1MXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNKc29uKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKGJvZHkpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJvZHlcbiAgICB9XG5cbiAgICB2YXIgZmFpbHVyZVJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgIGJvZHk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiAwLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgICAgIHVybDogdXJpLFxuICAgICAgICAgICAgICAgIHJhd1JlcXVlc3Q6IHhoclxuICAgICAgICAgICAgfVxuXG4gICAgZnVuY3Rpb24gZXJyb3JGdW5jKGV2dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dFRpbWVyKVxuICAgICAgICBpZighKGV2dCBpbnN0YW5jZW9mIEVycm9yKSl7XG4gICAgICAgICAgICBldnQgPSBuZXcgRXJyb3IoXCJcIiArIChldnQgfHwgXCJVbmtub3duIFhNTEh0dHBSZXF1ZXN0IEVycm9yXCIpIClcbiAgICAgICAgfVxuICAgICAgICBldnQuc3RhdHVzQ29kZSA9IDBcbiAgICAgICAgY2FsbGJhY2soZXZ0LCBmYWlsdXJlUmVzcG9uc2UpXG4gICAgfVxuXG4gICAgLy8gd2lsbCBsb2FkIHRoZSBkYXRhICYgcHJvY2VzcyB0aGUgcmVzcG9uc2UgaW4gYSBzcGVjaWFsIHJlc3BvbnNlIG9iamVjdFxuICAgIGZ1bmN0aW9uIGxvYWRGdW5jKCkge1xuICAgICAgICBpZiAoYWJvcnRlZCkgcmV0dXJuXG4gICAgICAgIHZhciBzdGF0dXNcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRUaW1lcilcbiAgICAgICAgaWYob3B0aW9ucy51c2VYRFIgJiYgeGhyLnN0YXR1cz09PXVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy9JRTggQ09SUyBHRVQgc3VjY2Vzc2Z1bCByZXNwb25zZSBkb2Vzbid0IGhhdmUgYSBzdGF0dXMgZmllbGQsIGJ1dCBib2R5IGlzIGZpbmVcbiAgICAgICAgICAgIHN0YXR1cyA9IDIwMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdHVzID0gKHhoci5zdGF0dXMgPT09IDEyMjMgPyAyMDQgOiB4aHIuc3RhdHVzKVxuICAgICAgICB9XG4gICAgICAgIHZhciByZXNwb25zZSA9IGZhaWx1cmVSZXNwb25zZVxuICAgICAgICB2YXIgZXJyID0gbnVsbFxuXG4gICAgICAgIGlmIChzdGF0dXMgIT09IDApe1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgICAgICAgYm9keTogZ2V0Qm9keSgpLFxuICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHN0YXR1cyxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgICAgICB1cmw6IHVyaSxcbiAgICAgICAgICAgICAgICByYXdSZXF1ZXN0OiB4aHJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMpeyAvL3JlbWVtYmVyIHhociBjYW4gaW4gZmFjdCBiZSBYRFIgZm9yIENPUlMgaW4gSUVcbiAgICAgICAgICAgICAgICByZXNwb25zZS5oZWFkZXJzID0gcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyciA9IG5ldyBFcnJvcihcIkludGVybmFsIFhNTEh0dHBSZXF1ZXN0IEVycm9yXCIpXG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soZXJyLCByZXNwb25zZSwgcmVzcG9uc2UuYm9keSlcblxuICAgIH1cblxuICAgIHZhciB4aHIgPSBvcHRpb25zLnhociB8fCBudWxsXG5cbiAgICBpZiAoIXhocikge1xuICAgICAgICBpZiAob3B0aW9ucy5jb3JzIHx8IG9wdGlvbnMudXNlWERSKSB7XG4gICAgICAgICAgICB4aHIgPSBuZXcgY3JlYXRlWEhSLlhEb21haW5SZXF1ZXN0KClcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB4aHIgPSBuZXcgY3JlYXRlWEhSLlhNTEh0dHBSZXF1ZXN0KClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlcbiAgICB2YXIgYWJvcnRlZFxuICAgIHZhciB1cmkgPSB4aHIudXJsID0gb3B0aW9ucy51cmkgfHwgb3B0aW9ucy51cmxcbiAgICB2YXIgbWV0aG9kID0geGhyLm1ldGhvZCA9IG9wdGlvbnMubWV0aG9kIHx8IFwiR0VUXCJcbiAgICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keSB8fCBvcHRpb25zLmRhdGEgfHwgbnVsbFxuICAgIHZhciBoZWFkZXJzID0geGhyLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge31cbiAgICB2YXIgc3luYyA9ICEhb3B0aW9ucy5zeW5jXG4gICAgdmFyIGlzSnNvbiA9IGZhbHNlXG4gICAgdmFyIHRpbWVvdXRUaW1lclxuXG4gICAgaWYgKFwianNvblwiIGluIG9wdGlvbnMpIHtcbiAgICAgICAgaXNKc29uID0gdHJ1ZVxuICAgICAgICBoZWFkZXJzW1wiYWNjZXB0XCJdIHx8IGhlYWRlcnNbXCJBY2NlcHRcIl0gfHwgKGhlYWRlcnNbXCJBY2NlcHRcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIikgLy9Eb24ndCBvdmVycmlkZSBleGlzdGluZyBhY2NlcHQgaGVhZGVyIGRlY2xhcmVkIGJ5IHVzZXJcbiAgICAgICAgaWYgKG1ldGhvZCAhPT0gXCJHRVRcIiAmJiBtZXRob2QgIT09IFwiSEVBRFwiKSB7XG4gICAgICAgICAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdIHx8IGhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gfHwgKGhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIikgLy9Eb24ndCBvdmVycmlkZSBleGlzdGluZyBhY2NlcHQgaGVhZGVyIGRlY2xhcmVkIGJ5IHVzZXJcbiAgICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShvcHRpb25zLmpzb24pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gcmVhZHlzdGF0ZWNoYW5nZVxuICAgIHhoci5vbmxvYWQgPSBsb2FkRnVuY1xuICAgIHhoci5vbmVycm9yID0gZXJyb3JGdW5jXG4gICAgLy8gSUU5IG11c3QgaGF2ZSBvbnByb2dyZXNzIGJlIHNldCB0byBhIHVuaXF1ZSBmdW5jdGlvbi5cbiAgICB4aHIub25wcm9ncmVzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gSUUgbXVzdCBkaWVcbiAgICB9XG4gICAgeGhyLm9udGltZW91dCA9IGVycm9yRnVuY1xuICAgIHhoci5vcGVuKG1ldGhvZCwgdXJpLCAhc3luYywgb3B0aW9ucy51c2VybmFtZSwgb3B0aW9ucy5wYXNzd29yZClcbiAgICAvL2hhcyB0byBiZSBhZnRlciBvcGVuXG4gICAgaWYoIXN5bmMpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9ICEhb3B0aW9ucy53aXRoQ3JlZGVudGlhbHNcbiAgICB9XG4gICAgLy8gQ2Fubm90IHNldCB0aW1lb3V0IHdpdGggc3luYyByZXF1ZXN0XG4gICAgLy8gbm90IHNldHRpbmcgdGltZW91dCBvbiB0aGUgeGhyIG9iamVjdCwgYmVjYXVzZSBvZiBvbGQgd2Via2l0cyBldGMuIG5vdCBoYW5kbGluZyB0aGF0IGNvcnJlY3RseVxuICAgIC8vIGJvdGggbnBtJ3MgcmVxdWVzdCBhbmQganF1ZXJ5IDEueCB1c2UgdGhpcyBraW5kIG9mIHRpbWVvdXQsIHNvIHRoaXMgaXMgYmVpbmcgY29uc2lzdGVudFxuICAgIGlmICghc3luYyAmJiBvcHRpb25zLnRpbWVvdXQgPiAwICkge1xuICAgICAgICB0aW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBhYm9ydGVkPXRydWUvL0lFOSBtYXkgc3RpbGwgY2FsbCByZWFkeXN0YXRlY2hhbmdlXG4gICAgICAgICAgICB4aHIuYWJvcnQoXCJ0aW1lb3V0XCIpXG4gICAgICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcihcIlhNTEh0dHBSZXF1ZXN0IHRpbWVvdXRcIilcbiAgICAgICAgICAgIGUuY29kZSA9IFwiRVRJTUVET1VUXCJcbiAgICAgICAgICAgIGVycm9yRnVuYyhlKVxuICAgICAgICB9LCBvcHRpb25zLnRpbWVvdXQgKVxuICAgIH1cblxuICAgIGlmICh4aHIuc2V0UmVxdWVzdEhlYWRlcikge1xuICAgICAgICBmb3Ioa2V5IGluIGhlYWRlcnMpe1xuICAgICAgICAgICAgaWYoaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShrZXkpKXtcbiAgICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIGhlYWRlcnNba2V5XSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5oZWFkZXJzICYmICFpc0VtcHR5KG9wdGlvbnMuaGVhZGVycykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSGVhZGVycyBjYW5ub3QgYmUgc2V0IG9uIGFuIFhEb21haW5SZXF1ZXN0IG9iamVjdFwiKVxuICAgIH1cblxuICAgIGlmIChcInJlc3BvbnNlVHlwZVwiIGluIG9wdGlvbnMpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IG9wdGlvbnMucmVzcG9uc2VUeXBlXG4gICAgfVxuXG4gICAgaWYgKFwiYmVmb3JlU2VuZFwiIGluIG9wdGlvbnMgJiZcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMuYmVmb3JlU2VuZCA9PT0gXCJmdW5jdGlvblwiXG4gICAgKSB7XG4gICAgICAgIG9wdGlvbnMuYmVmb3JlU2VuZCh4aHIpXG4gICAgfVxuXG4gICAgeGhyLnNlbmQoYm9keSlcblxuICAgIHJldHVybiB4aHJcblxuXG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuIiwibW9kdWxlLmV4cG9ydHMgPSBvbmNlXG5cbm9uY2UucHJvdG8gPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwgJ29uY2UnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBvbmNlKHRoaXMpXG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbn0pXG5cbmZ1bmN0aW9uIG9uY2UgKGZuKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZVxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYWxsZWQpIHJldHVyblxuICAgIGNhbGxlZCA9IHRydWVcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGV4dGVuZFxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiBleHRlbmQoKSB7XG4gICAgdmFyIHRhcmdldCA9IHt9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldXG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldFxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBleHRlbmRcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV1cblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0XG59XG4iXX0=
=>=>=>=>=>=>=>=>=>=>=>=>=>=>'>')>=>4-1;i++){argv.push(0)}}var>1|0>1|(h<<1|g>0?-1:0)<<1)&l)|0;b=c;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f){c[f>0?-1:0)<<1;i=o&1;a=cd(e,n,o&m,(((p|0)<0?-1:0)>1|0;cd(k,d,e,n)|0;p=c;o=p>1;g=i|g<<1;e=a<<1|e>=30){b=g+1|0;i=31-g|0;h=b;a=k<32-p|l>